Revit共享参数的绑定

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;
        }

       
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值