Как получить координаты, т.е. вершины из объекта - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь получить данные геометрии по одному элементу за раз, например, вершины.То, что я пробовал до сих пор:

  • fragproxy = viewer.gui.impl.getFragmentProxy(model,fragid) дает мне некоторую геометрию, но не вершины, к которым я могу получить доступ по dbId

  • frags = viewer.gui.model.getFragmentList() дает мне карту фрагмента для dbId, но нет связи между dbId и геометрией

Кто-нибудь знает метод получения геометрии с вершинами?

1 Ответ

0 голосов
/ 25 мая 2018

Значение позиций следующих фрагментов кода - это нужные вам вершины.

  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 , если вы хотите восстановить отношения сетки.

Надеюсь, это поможет!

...