0

我正在尝试在 revit 转换文件的 2d 查看器上用颜色填充房间。

我有一个定义了“房间”的 Revit 文件。Revit 文件还包含定义为“一楼”、“二楼”的图纸。当我使用 Forge API 转换它时

我得到了 Revit 3D 视图的 svf 和“一楼”和“二楼”图纸的 f2d 文件。

对于 svf,我能够从 dbids其他帖子中得到脆弱

现在我试图对 f2d 文件做同样的事情。

如果我知道墙壁的形状 dbid 通过使用,我可以改变房间墙壁的颜色

viewer.setThemingColor(dbid, new THREE.Vector4(0, 1, 1,1));

我现在想要做的是能够在 2d 上获得形状的脆弱性,以便我可以获得它使用的线条的开始和停止顶点。我想知道这些顶点,这样我就可以构建一个自定义网格并用颜色填充它以用于房间“孵化”。

我的问题是我不知道 f2d 格式。看起来它是一个网格,让着色器控制线条的颜色。任何人都可以给我任何关于如何进入房间片段列表的指示吗?

这是我用于 3d svf 的

function getFragIdFromDbId(viewer, dbid) {
 var returnValue;
 var it = viewer.model.getData().instanceTree;
 it.enumNodeFragments(dbid, function (fragId) {
   //console.log("dbId: " + dbid + " FragId : " + fragId);
   returnValue = fragId;
 }, false);
  return returnValue;
}

当 f2d 具有 viewer.model.getData().instanceTree = undefined 时,我可以使用 f2d 做什么?

4

1 回答 1

1

片段可以具有多个 dbid 的几何结构,并且一个 dbid 的几何结构可以位于多个片段中。可以使用Autodesk.Viewing.Private.VertexBufferReader进行提取,由 2D snapper 提供帮助。你可以这样做:

  1. FragmentList.dbid2fragId[dbid] 将返回包含 dbid 几何的片段 ID 或片段 ID 数组。
  2. 遍历片段并获取每个片段的几何形状。
  3. 使用几何创建一个 VertexBufferReader。
  4. 使用 VertexBufferReader 查找 dbid 的几何图形。

查找几何的最佳方法是使用 VertexBufferReader.enumGeomsForObject(dbid, callback)。它使用回调对象为 dbid 枚举几何。回调对象需要这些可选函数:

  • onLineSegment(x0, y0, x1, y1, viewport_id)
  • onCircularArc(centerX, centerY, startAngle, endAngle, radius, viewport_id)
  • onEllipticalArccenterX、centerY、startAngle、endAngle、major、minor、tilt、viewport_id)
  • onTriangleVertex(x, y, viewport_id)

如果您只需要原语而不需要它们在缓冲区中的位置,这没关系。

您还可以使用VertexBufferReader循环遍历缓冲区中的几何图形以查找 dbid。这需要您知道如果.useInstancing()为假,则顶点缓冲区中的原语是 4 个顶点,如果.useInstancing()为真,则为 1 个顶点。您需要从.getVertexFlagsAt(vertexIndex)解码原始类型,但我们没有任何用于解码标志的公共值或方法。

于 2016-10-10T12:22:41.387 回答