我试图一次将几何数据作为一个元素,例如顶点。 到目前为止我尝试了什么:
fragproxy = viewer.gui.impl.getFragmentProxy(model,fragid)
给了我某种几何,但没有任何顶点,我可以通过dbId访问
frags = viewer.gui.model.getFragmentList()
给我一个dbId映射的fragId,但没有从dbId到几何的连接
有没有人知道用顶点获取几何的方法?
答案 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。
希望它有所帮助!