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

能否通过APS及Forge Viewer API获取Revit材料提取所用数据?

能否通过Forge Viewer API获取Revit材料提取的分层数据?

可以实现,但默认情况下Forge Viewer无法直接获取Revit材料提取所用的分层体积这类明细数据——因为导出到Forge的SVF格式模型做了轻量化处理,很多Revit原生的分层参数和计算逻辑会被简化或剥离。以下是几个可行的工作流:


方法1:提前在Revit中绑定分层参数到构件

这是最直接的方案,核心是把分层体积数据提前写入构件的共享参数,让这些数据跟随模型进入Forge:

  • 在Revit中给墙体创建对应图层的共享参数(比如Layer1_Volume、Layer2_Volume)
  • 通过Revit API手动计算每个图层的体积(利用WallLayer.Volume结合墙体长度),并赋值给这些共享参数
  • 上传模型到Forge后,在Viewer中通过属性数据库获取这些参数:
    // 获取指定构件的分层体积参数
    viewer.model.getPropertyDb().getProperties(dbId, (props) => {
      const layerVolumeProps = props.filter(p => 
        p.displayName.includes('Layer') && p.displayName.includes('Volume')
      );
      layerVolumeProps.forEach(prop => {
        console.log(`${prop.displayName}: ${prop.displayValue}`);
      });
    });
    

方法2:用Forge Design Automation调用Revit引擎计算

如果不想提前修改Revit模型,可以通过Design Automation远程调用Revit核心来提取分层数据:

  • 编写一个简单的Revit插件,用Revit API遍历墙体、提取每个图层的体积:
    public void ExtractWallLayerVolumes(Document doc)
    {
      var wallLayerData = new List<Dictionary<string, object>>();
      foreach (Wall wall in new FilteredElementCollector(doc).OfClass(typeof(Wall)))
      {
        var wallType = wall.WallType;
        var compoundLayers = wallType.GetCompoundStructure().GetLayers();
        var wallLength = wall.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();
        
        foreach (var layer in compoundLayers)
        {
          // 计算图层体积并转换为常用单位(比如立方米)
          var volume = UnitUtils.ConvertFromInternalUnits(
            layer.Volume * wallLength, 
            DisplayUnitType.DUT_CUBIC_METERS
          );
          wallLayerData.Add(new Dictionary<string, object>
          {
            {"WallId", wall.Id.IntegerValue},
            {"LayerName", layer.Material?.Name ?? "Unnamed Layer"},
            {"Volume", volume}
          });
        }
      }
      // 将结果写入输出JSON文件,返回给前端
      File.WriteAllText("wall_layer_volumes.json", JsonConvert.SerializeObject(wallLayerData));
    }
    
  • 通过Forge Design Automation API触发这个插件运行,获取输出的JSON数据后,在Viewer中关联构件ID展示对应的分层体积。

方法3:尝试请求Model Derivative的原生参数(不推荐)

你可以在调用Model Derivative API导出模型时,添加advanced参数请求保留更多Revit原生属性,但大概率还是拿不到分层体积——因为SVF的轻量化逻辑会优先剔除这类计算型明细数据,所以这个方案可靠性很低,不推荐作为主要方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:37:14