123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*-------------------------------------------------------------------------
- * 功能描述:SharedParameterUtil
- * 作者:xulisong
- * 创建时间: 2019/3/7 10:49:42
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using Autodesk.Revit.ApplicationServices;
- using Autodesk.Revit.DB;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using FWindSoft.Common;
- namespace FWindSoft.Revit
- {
- public class SharedParameterUtil
- {
- /// <summary>
- /// 创建共享参数文件样式
- /// </summary>
- /// <returns></returns>
- public static StringBuilder CreateSharedFileSchema()
- {
- StringBuilder contents = new StringBuilder();
- contents.AppendLine("# This is a Revit shared parameter file.");
- contents.AppendLine("# Do not edit manually.");
- contents.AppendLine("*META VERSION MINVERSION");
- contents.AppendLine("META 2 1");
- contents.AppendLine("*GROUP ID NAME");
- contents.AppendLine("*PARAM GUID NAME DATATYPE DATACATEGORY GROUP VISIBLE");
- return contents;
- }
- /// <summary>
- /// 获取共享参数定义文件
- /// </summary>
- /// <param name="revitApp"></param>
- /// <returns></returns>
- public static DefinitionFile GetSharedParameterFile(Application revitApp)
- {
- DefinitionFile file = null;
- int count = 0;
- while (null == file && count < 100)
- {
- file = revitApp.OpenSharedParameterFile();
- if (file == null)
- {
- string shapeFile = Path.Combine(App.AppDataPath, "RevitShared", "tempSharedFile.txt");
- var schema = CreateSharedFileSchema();
- File.WriteAllText(shapeFile, schema.ToString());
- revitApp.SharedParametersFilename = shapeFile;
- }
- ++count;
- }
- return file;
- }
- public static ExternalDefinitionCreationOptions NewDefinitionCreationOptions(string paraName, ParameterType paraType, bool visible = true, bool userModifiable = true)
- {
- ExternalDefinitionCreationOptions options = new ExternalDefinitionCreationOptions(paraName, paraType);
- options.Visible = visible;
- options.UserModifiable = userModifiable;
- return options;
- }
- public static Definition NewDefinition(DefinitionGroup group, ExternalDefinitionCreationOptions options)
- {
- return group.Definitions.Create(options);
- }
- public static bool BindingParameter(Document document, List<Category> categories,bool bingdingType, Definition definition)
- {
- var useCategories = categories.Where(c => c.AllowsBoundParameters).ToList();
- if (!useCategories.Any())
- return false;
- bool flag = false;
- #region 查找已经存在定义
- ElementBinding instanceBinding = document.ParameterBindings.get_Item(definition) as ElementBinding;
- if (bingdingType)
- {
- instanceBinding = instanceBinding as TypeBinding;
- }
- else
- {
- instanceBinding = instanceBinding as InstanceBinding;
- }
- #endregion
- if (null != instanceBinding)
- {
- foreach (var useCategory in useCategories)
- {
- if (!instanceBinding.Categories.Contains(useCategory))
- {
- instanceBinding.Categories.Insert(useCategory);
- }
- }
- flag=document.ParameterBindings.ReInsert(definition, instanceBinding);
- }
- else
- {
- var app = document.Application;
- CategorySet categorySet = app.Create.NewCategorySet();
- useCategories.ForEach(c=>categorySet.Insert(c));
- if (bingdingType)
- {
- instanceBinding = app.Create.NewTypeBinding(categorySet);
- }
- else
- {
- instanceBinding = app.Create.NewInstanceBinding(categorySet);
- }
- flag=document.ParameterBindings.Insert(definition, instanceBinding);
- }
- return flag;
- }
- public static bool BindingParameter(Document document, Category category, bool bingdingType,
- Definition definition)
- {
- return BindingParameter(document, new List<Category>() {category}, bingdingType, definition);
- }
- }
- }
|