Autodesk Forge Viewer:f2d从dbid

时间:2016-10-04 20:53:22

标签: autodesk-forge autodesk-viewer autodesk-model-derivative

我正在尝试用revit转换文件的2d浏览器填充颜色。

我有一个Revit文件,其中包含" rooms"定义。 Revit文件还定义了工作表"第一层","第二层"。当我使用Forge API

转换它时

我获得了Revit 3D视图的svf和#34;第一层"的f2d文件和"二楼" 片材。

对于svf,我能够从dbids other post

中获得支持

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

如果我知道墙壁使用

形成dbid,我可以改变房间墙壁的颜色
viewer.setThemingColor(dbid, new THREE.Vector4(0, 1, 1,1));

我现在要做的是能够在2d上获得形状的碎片,以便我可以获得它使用的线的起点和终点。我想知道这些顶点,所以我可以构建一个自定义网格,并用颜色填充它,以便进行空间和#34;孵化"。

我的问题是我不知道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()时,我可以使用f2d做同样的事情.instanceTree = undefined?

1 个答案:

答案 0 :(得分:1)

片段可以具有多个dbid的几何体,并且dbid的几何体可以是多个片段。可以使用帮助的2D snapper使用的 Autodesk.Viewing.Private.VertexBufferReader 进行提取。你可以这样做:

  1. FragmentList.dbid2fragId [dbid]将返回片段id或包含dbid几何的片段ID数组。
  2. 遍历片段并获取每个片段的几何体。
  3. 使用几何体创建VertexBufferReader。
  4. 使用VertexBufferReader查找dbid的几何图形。
  5. 查找几何的最佳方法是使用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()为false,则需要您知道顶点缓冲区中的基元是4个顶点,如果 .useInstancing()为真,则需要知道1个顶点。您需要从 .getVertexFlagsAt(vertexIndex)解码基本类型,但我们没有任何用于解码标志的公共值或方法。