/*------------------------------------------------------------------------- * 功能描述: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 { /// /// 创建共享参数文件样式 /// /// 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; } /// /// 获取共享参数定义文件 /// /// /// 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 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}, bingdingType, definition); } } }