Revit API 开发(4):共享参数

共享参数

从Revit的用户界面可以知道共享参数是被存储在一个文件里面的。如何通过API来对它进行查询和创建,以及应用到具体的构建类型上面呢?
下面是一些关键的API和代码实现。

设置共享参数文件路径

// RevitApp 为你当前代码中的  Autodesk.Revit.ApplicationServices.ControlledApplication
RevitApp.SharedParametersFilename = @"C:\YourDefinitionFile.txt";

读取共享参数信息

// RevitApp 为你当前代码中的  Autodesk.Revit.ApplicationServices.ControlledApplication
DefinitionFile definitionFile = RevitApp.OpenSharedParameterFile();

读取具体内容

  1. 读取存储共享参数的文件的名称;
  2. 读取各个分组;
  3. 读取分组中各个参数的定义。
// 以下代码来自 Revit API 公开文档。
private void ShowDefinitionFileInfo(DefinitionFile myDefinitionFile)
{
    StringBuilder fileInformation = new StringBuilder(500);

    // 存储共享参数的文件名
    fileInformation.AppendLine("File Name: " + myDefinitionFile.Filename);

    // 访问所有参数分组
    foreach (DefinitionGroup myGroup in myDefinitionFile.Groups)
    {
        // 得到分组名称
        fileInformation.AppendLine("Group Name: " + myGroup.Name);

        // 得到分组中的所有定义
        foreach (Definition definition in myGroup.Definitions)
        {
            // 得到定义的名称
            fileInformation.AppendLine("Definition Name: " + definition.Name);
        }
    }
    TaskDialog.Show("Revit",fileInformation.ToString());
}

创建共享参数

用在“墙”,这种构建类型上添加共享参数为例:

  1. 创建一个新的group到共享参数定义文件, 名称为 MyParameters1
  2. 创建一个参数定义,Instance_ProductDate,到名为MyParameters1的group;
  3. 创建类别集合用于绑定,把墙这个类别加入;
  4. 创建 InstanceBinding
  5. 得到当前文档的 BingdingMap,并把创建出来的InstanceBinding绑定上去。
// 以下代码来自 Revit API 公开文档。
public bool SetNewParameterToInstanceWall(UIApplication app, DefinitionFile myDefinitionFile)
{
    // 创建一个新的group到共享参数定义文件
    DefinitionGroups myGroups = myDefinitionFile.Groups;
    DefinitionGroup myGroup = myGroups.Create("MyParameters1");

    // 创建一个参数定义
    ExternalDefinitionCreationOptions option = new ExternalDefinitionCreationOptions("Instance_ProductDate", ParameterType.Text);
    // 只读,仅API可以修改
    option.UserModifiable = false;
    // 设置说明字符串
    option.Description = "Wall product date";
    // 加入 `MyParameters1` group
    Definition myDefinition_ProductDate = myGroup.Definitions.Create(option);

    // 创建类别集合用于绑定,把墙这个类别加入
    CategorySet myCategories = app.Application.Create.NewCategorySet();
    Category myCategory = Category.GetCategory(app.ActiveUIDocument.Document, BuiltInCategory.OST_Walls);
    myCategories.Insert(myCategory);

    //创建 InstanceBinding
    InstanceBinding instanceBinding = app.Application.Create.NewInstanceBinding(myCategories);

    // 得到当前文档的 BingdingMap,并把创建出来的InstanceBinding绑定上去
    BindingMap bindingMap = app.ActiveUIDocument.Document.ParameterBindings;
    bool instanceBindOK = bindingMap.Insert(myDefinition_ProductDate,
                                    instanceBinding, BuiltInParameterGroup.PG_TEXT);
    return instanceBindOK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值