关于Model Derivative API中共享参数与内置参数的层级疑问
Model Derivative API中Type与Instance的参数层级疑问
我需要明确Model Derivative API响应里Type和Instance的层级关系,特别是properties对象中的Revit参数。我有一个门窗类别,混合了内置类型参数(Built-in Type Parameters)和共享族参数(Shared Family Parameters)。在Revit里编辑门类型时,能看到这两类参数及其值,但通过Model Derivative API获取已翻译模型的属性时,只有内置类型参数会显示在门实例上——比如Type Mark和Door Type(都是内置参数)能在实例中看到,但Frame Type(共享族参数)却不在实例的属性里。
请问这是预期行为吗?如果是,该如何获取特定实例的共享参数值?我参考过相关建议,但发现属性存在不一致的问题。
[ // 实例 { "objectid": 52, "name": "DOOR_DD4_F2", "externalId": "8a6cf411-ac2f-4379-9b63-7360f7473e2f-0005bf68", "properties": { "Identity Data": { "Type Name": "1830 x 2135 mm, 44 mm Thickness", "Mark": "1", "Type Mark": "12" /* ... */ }, "Construction": { "Door Type": "DD4" /* ... */ } } }, // 类型 { "objectid": 3368, "name": "1830 x 2135 mm, 44 mm Thickness", "externalId": "8a6cf411-ac2f-4379-9b63-7360f7473e2f-0005bf0b", "properties": { "Identity Data": { "Type Mark": "12" }, "Construction": { /* Frame type在这里,但不在实例里,不清楚原因 */ "Frame Type": "F2", "Door Type": "DD4" }, } } ]
内置参数截图

共享参数截图

问题解答
是否为预期行为?
是。Model Derivative API的属性映射逻辑中,只有Revit标记为"Instance Visible"的类型参数才会被复制到实例对象的properties中。内置类型参数(如Type Mark、Door Type)默认开启了这个可见性设置,而共享族参数默认不会自动同步到实例层级——除非在Revit中手动将该共享参数的"Instance Visible"选项勾选开启。如何获取特定实例的共享参数值?
如果无法修改Revit源文件的参数设置,可通过以下方式获取:
- 调用Model Derivative API的
GET /metadata/{urn}/metadata/{guid}/properties接口时,添加include=type参数,这样会在实例的属性响应中直接关联其对应的Type对象数据; - 提前遍历并缓存所有Type对象的属性,然后通过实例的
Type Name或externalId关联对应Type的共享参数值(优先用externalId,避免重名Type匹配错误)。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

