如何从对象获取坐标,即顶点

时间:2018-05-24 16:00:41

标签: autodesk-forge

我试图一次将几何数据作为一个元素,例如顶点。 到目前为止我尝试了什么:

  • fragproxy = viewer.gui.impl.getFragmentProxy(model,fragid)给了我某种几何,但没有任何顶点,我可以通过dbId访问

  • frags = viewer.gui.model.getFragmentList()给我一个dbId映射的fragId,但没有从dbId到几何的连接

有没有人知道用顶点获取几何的方法?

1 个答案:

答案 0 :(得分:0)

以下代码段的位置值是您想要的顶点。

  function getLeafFragIds( model, leafId ) {
    const instanceTree = model.getData().instanceTree;
    const fragIds = [];

    instanceTree.enumNodeFragments( leafId, function( fragId ) {
      fragIds.push( fragId );
    });

    return fragIds;
  }

  function getComponentGeometry( viewer, dbId ) {

    const fragIds = getLeafFragIds( viewer.model, dbId );

    let matrixWorld = null;

    const meshes = fragIds.map( function( fragId ) {

      const renderProxy = viewer.impl.getRenderProxy( viewer.model, fragId );

      const geometry = renderProxy.geometry;
      const attributes = geometry.attributes;
      const positions = geometry.vb ? geometry.vb : attributes.position.array;

      const indices = attributes.index.array || geometry.ib;
      const stride = geometry.vb ? geometry.vbstride : 3;
      const offsets = geometry.offsets;

      matrixWorld = matrixWorld || renderProxy.matrixWorld.elements;

      return {
        positions,
        indices,
        offsets,
        stride
      };
    });

    return {
      matrixWorld,
      meshes
    };
  }

  var meshInfo = getComponentGeometry( viewer, 1234 );

由于Forge片段的这些信息存储在展平存储中,如果要重建网格关系,请检查演示扩展Autodesk.ADN.Viewing.Extension.MeshData.js

希望它有所帮助!