繁体   English   中英

Autodesk Forge Viewer:F2D从Dbid获取碎片

[英]Autodesk Forge Viewer : f2d get frag from dbid

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

我有一个定义了“房间”的Revit文件。 Revit文件还具有定义为“第一层”,“第二层”的工作表。 当我使用Forge API进行转换时

我为Revit 3D视图获得了一个svf,为“第一层”和“第二层”工作表获得了f2d文件。

对于svf,我能够从dbids 其他帖子中获取虚假信息

现在,我正在尝试对f2d文件执行相同的操作。

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

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可以做什么以完成相同操作?

片段可以具有多个dbid的几何形状,而一个dbid的几何形状可以位于多个片段中。 可以使用提供帮助的2D捕捉程序使用Autodesk.Viewing.Private.VertexBufferReader进行提取。 您可以执行以下操作:

  1. FragmentList.dbid2fragId [dbid]将返回片段ID或包含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,主要,次要,倾斜,viewport_id)
  • onTriangleVertex(x,y,viewport_id)

如果只需要基元,而不需要它们在缓冲区中的位置,则可以。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM