当得到构件的fragment Id (碎片)后,通过Viewer.impl.getRenderProxy方法可得到fragId对应的mesh的信息,其中包含了三角面片的数据。 var renderProxy = viewer.impl.getRenderProxy( viewer.model, fragId); renderProxy包含的内容有: 三角片的顶点数组 (mesh.geometry.vb) 三角片的顶点序号 (mesh.geometry.ib)。这将影响哪三个点形成某个三角形,严格按照这个序号来获取对应的顶点。 序号跨度(mesh.geometry.vbstride)。基于顶点序号,跨越多少个数组元素定位到特定的顶点。 构件局部坐标系到全局坐标的变换矩阵 (mesh.matrixWorld) 有时,可能是mesh.geometry.attributes 存有这些信息。我还未弄清楚两者的区别。 另外,一个构件可能有多个fragment,所以,假设您先是拿到 构件的对象ID (dbId),需要通过instanceTree的enumNodeFragments搜出所有的fragment Id。 //假定选择到构件 var sel = NOP_VIEWER.getSelection(); //考察第一个对象 var dbId = sel[0]; //获取模型树 var it = NOP_VIEWER.model.getData().instanceTree; //遍历此对象含有的fragment id it.enumNodeFragments(dbId, function(fragId) { console.log(fragId); }, false); 这里有一段Forge Viewer 扩展,对选择到的对象,绘制其三角片。效果如下:
当得到构件的fragment Id (碎片)后,通过Viewer.impl.getRenderProxy方法可得到fragId对应的mesh的信息,其中包含了三角面片的数据。
renderProxy包含的内容有:
三角片的顶点数组 (mesh.geometry.vb)
三角片的顶点序号 (mesh.geometry.ib)。这将影响哪三个点形成某个三角形,严格按照这个序号来获取对应的顶点。
序号跨度(mesh.geometry.vbstride)。基于顶点序号,跨越多少个数组元素定位到特定的顶点。
构件局部坐标系到全局坐标的变换矩阵 (mesh.matrixWorld)
有时,可能是mesh.geometry.attributes 存有这些信息。我还未弄清楚两者的区别。
另外,一个构件可能有多个fragment,所以,假设您先是拿到 构件的对象ID (dbId),需要通过instanceTree的enumNodeFragments搜出所有的fragment Id。
这里有一段Forge Viewer 扩展,对选择到的对象,绘制其三角片。效果如下: