使用AEC Data Model API获取构件材质、质量及体积数据的技术问询
解决方案:AEC Data Model API 获取屋顶材质、门体积及质量计算相关数据
一、屋顶构造层材质获取
屋顶的分层材质信息存储在类型(Type)的Layers引用中,而非直接的Material类引用。需调整查询逻辑:
- 在Type的
references中加入「Layers」过滤条件; - 遍历每个Layer节点,提取其关联的Material信息,即可对应Revit界面中「构造→编辑结构」里的Function与Material映射。
二、门的体积与质量计算
门体积获取
门无体积返回通常有两个原因:
- Revit族未启用体积计算:需先在Revit中确认门族的「体积」参数已开启并可计算;
- API查询过滤过严:不要仅过滤
["Volume"],可放宽条件获取所有属性,或补充本地化属性名(如中文环境的「体积」)确保覆盖。
质量计算优化
材质密度无需从外部库映射,可直接通过Material的properties获取(属性名通常为「Density」),结合体积参数用公式质量=体积×密度计算即可。
三、修改后的GraphQL查询及变量
查询语句
query GetElementsWithMaterialsAndVolume($elementGroupId: ID!, $elementsFilter: String!) { elements: elementsByElementGroup( elementGroupId: $elementGroupId filter: { query: $elementsFilter } pagination: { limit: 500 } ) { results { id name category alternativeIdentifiers { revitElementId externalElementId } # 放宽属性过滤,避免漏过不同命名的体积参数 properties { results { name value unit } } # 获取类型引用 references(filter: { names: ["Type"] }) { results { value { name # 获取墙、门的直接关联材质 references(filter: { names: [ "Structural Material", "Finish Material", "Material", "Interior Finish", "Exterior Finish", "Material Door", "Material Frame", "Material Ironmongery" ]}) { results { value { name # 获取材质密度用于质量计算 properties(filter: { names: ["Density"] }) { results { name value unit } } } } } # 获取屋顶分层结构及对应材质 references(filter: { names: ["Layers"] }) { results { value { name references(filter: { names: ["Material"] }) { results { value { name properties(filter: { names: ["Density"] }) { results { name value unit } } } } } } } } } } } } } }
变量
{ "elementGroupId": "{modelElementGroupId}", "elementsFilter": "(category in ['Walls', 'Doors', 'Roofs']) and (property.name='Element Context' and property.value='Instance')" }
关键调整说明
- 多类别适配:将查询别名从
walls改为elements,兼容墙、门、屋顶的统一查询; - 属性覆盖:移除
properties的名称过滤,确保不会漏过不同命名的体积参数; - 屋顶材质逻辑:新增「Layers」引用遍历,对应Revit屋顶构造层的材质信息;
- 密度直接获取:在Material节点中加入密度属性查询,省去外部库映射步骤;
- 过滤语法修正:修正原过滤条件的语法错误,符合AEC Data Model API的标准过滤规则。
内容的提问来源于stack exchange,提问作者Praful Bharate
相关产品推荐
相关产品推荐

