You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Revit 2022 API能否创建项目参数的技术问询

关于Revit API创建项目参数的解答

你的结论不完全正确——可以通过Revit API创建可添加至内置族的项目参数,但项目参数的创建流程需要结合共享参数的定义来完成,并非只能创建共享参数。

具体实现逻辑(基于Revit 2022 + C#):

  • 项目参数的本质是将共享参数绑定到指定的项目类别上,因此第一步需要先创建或加载共享参数定义
  • 通过BindingMap将共享参数与目标内置族类别绑定,完成项目参数的创建

核心代码示例:

// 获取当前活动文档
Document doc = commandData.Application.ActiveUIDocument.Document;

// 1. 打开共享参数文件(需确保文件已存在)
DefinitionFile sharedParamFile = doc.Application.OpenSharedParameterFile();
if (sharedParamFile == null)
{
    return Result.Failed;
}

// 2. 获取或创建共享参数组与参数定义
DefinitionGroup paramGroup = sharedParamFile.Groups.get_Item("CustomParams") ?? sharedParamFile.Groups.Create("CustomParams");
ExternalDefinitionCreationOptions paramOptions = new ExternalDefinitionCreationOptions("WallDescription", ParameterType.Text);
Definition paramDef = paramGroup.Definitions.get_Item("WallDescription") ?? paramGroup.Definitions.Create(paramOptions);

// 3. 指定要绑定的内置族类别(例如墙)
Category wallCat = Category.GetCategory(doc, BuiltInCategory.OST_Walls);
CategorySet targetCats = doc.Application.Create.NewCategorySet();
targetCats.Insert(wallCat);

// 4. 创建实例绑定(针对族实例)
InstanceBinding binding = doc.Application.Create.NewInstanceBinding(targetCats);

// 5. 在事务中完成参数绑定,生成项目参数
using (Transaction trans = new Transaction(doc, "创建墙项目参数"))
{
    trans.Start();
    bool bindSuccess = doc.ParameterBindings.Insert(paramDef, binding, BuiltInParameterGroup.PG_TEXT);
    if (!bindSuccess)
    {
        trans.RollBack();
        return Result.Failed;
    }
    trans.Commit();
}

你之前尝试未成功,大概率是以下原因:

  • 未正确加载共享参数文件,或共享参数定义创建流程出错
  • 绑定类别时选错了内置族类别,或CategorySet未正确初始化
  • 未将绑定操作放在事务中执行
  • 参数组(BuiltInParameterGroup)选择不符合参数类型要求

内容的提问来源于stack exchange,提问作者MartinPoncio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:52:07