1、准备好共享参数的文本文件,建议通过Revit来生成;
2、通过commandData.Application.Application的SharedParametersFilename属性设置共享参数文件,并获取该定义文件。如下
uIApplication = commandData.Application;
UIDocument uidoc = uIApplication.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
var app = uIApplication.Application;
string sharedParaPath = @"C:\Users\AntPC\Desktop\wo.txt";
app.SharedParametersFilename = sharedParaPath;
var definitionFile = app.OpenSharedParameterFile();
3、获取共享参数文件的属性分组
var groups = definitionFile.Groups;//通过groups属性获取属性分组
4、确定要将属性绑定给的构件
private static CategorySet AddedCategory(UIApplication uIApplication, Autodesk.Revit.DB.Document doc)
{
CategorySet categorySet = uIApplication.Application.Create.NewCategorySet();
BuiltInCategory[] categorys = new BuiltInCategory[] { BuiltInCategory.OST_StructuralFraming,BuiltInCategory.OST_Walls,BuiltInCategory.OST_Columns,BuiltInCategory.OST_StructuralColumns};
foreach(BuiltInCategory ca in categorys)
{
Category catergory = Category.GetCategory(doc,ca);
categorySet.Insert(catergory);
}
return categorySet;
}
5、执行绑定。绑定分为实例绑定和类型绑定,本例采用实例绑定
private static void InstanceBindingSharedParameter(UIApplication uIApplication, Autodesk.Revit.DB.Document doc, DefinitionGroups groups, CategorySet category)
{
BindingMap bindingMap = doc.ParameterBindings;
//CategorySet category = AddedCategory(uIApplication, doc, BuiltInCategory.OST_StructuralColumns);
InstanceBinding instanceBinding = uIApplication.Application.Create.NewInstanceBinding(category);
foreach (DefinitionGroup dg in groups)
{
foreach (Definition def in dg.Definitions)
{
using (Transaction t = new Transaction(doc, "binding"))
{
t.Start();
bool isSuccess;
isSuccess = bindingMap.Insert(def, instanceBinding, BuiltInParameterGroup.INVALID);
if (isSuccess == false)
{
isSuccess = bindingMap.ReInsert(def, instanceBinding, BuiltInParameterGroup.INVALID);
}
t.Commit();
}
}
}
}
6、完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI;
namespace TYBIMDesign
{
[Transaction(TransactionMode.Manual)]
public class SharedParameterFile : IExternalCommand
{
UIApplication uIApplication;
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
uIApplication = commandData.Application;
UIDocument uidoc = uIApplication.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
var app = uIApplication.Application;
string sharedParaPath = @"C:\Users\AntPC\Desktop\wo.txt";
app.SharedParametersFilename = sharedParaPath;
var definitionFile = app.OpenSharedParameterFile();
var groups = definitionFile.Groups;
CategorySet categorySet = AddedCategory(uIApplication, doc);
InstanceBindingSharedParameter(uIApplication, doc, groups, categorySet);
return Result.Succeeded;
}
/// <summary>
/// 执行绑定
/// </summary>
/// <param name="uIApplication"></param>
/// <param name="doc"></param>
/// <param name="groups">参数分组</param>
/// <param name="category">构件类型</param>
private static void InstanceBindingSharedParameter(UIApplication uIApplication, Autodesk.Revit.DB.Document doc, DefinitionGroups groups, CategorySet category)
{
BindingMap bindingMap = doc.ParameterBindings;
//CategorySet category = AddedCategory(uIApplication, doc, BuiltInCategory.OST_StructuralColumns);
InstanceBinding instanceBinding = uIApplication.Application.Create.NewInstanceBinding(category);
foreach (DefinitionGroup dg in groups)
{
foreach (Definition def in dg.Definitions)
{
using (Transaction t = new Transaction(doc, "binding"))
{
t.Start();
bool isSuccess;
isSuccess = bindingMap.Insert(def, instanceBinding, BuiltInParameterGroup.INVALID);
if (isSuccess == false)
{
isSuccess = bindingMap.ReInsert(def, instanceBinding, BuiltInParameterGroup.INVALID);
}
t.Commit();
}
}
}
}
/// <summary>
/// 将所有要添加的内建类型加入集合,categorys装了这些集合
/// </summary>
/// <param name="uIApplication"></param>
/// <param name="doc"></param>
/// <returns></returns>
private static CategorySet AddedCategory(UIApplication uIApplication, Autodesk.Revit.DB.Document doc)
{
CategorySet categorySet = uIApplication.Application.Create.NewCategorySet();
BuiltInCategory[] categorys = new BuiltInCategory[] { BuiltInCategory.OST_StructuralFraming,BuiltInCategory.OST_Walls,BuiltInCategory.OST_Columns,BuiltInCategory.OST_StructuralColumns};
foreach(BuiltInCategory ca in categorys)
{
Category catergory = Category.GetCategory(doc,ca);
categorySet.Insert(catergory);
}
return categorySet;
}
}
}