Forge 查看器 - 添加后自定义模型片段位置发生变化

问题描述 投票:0回答:1

我使用此代码将具有多个网格的自定义模型添加到 Forge 查看器

let cameras = camerasJSON.cameras[0];
let sceneBuilder = await viewer.loadExtension('Autodesk.Viewing.SceneBuilder');
let modelBuilder = await sceneBuilder.addNewModel({
    modelNameOverride: 'Cameras',
    conserveMemory: false
})
cameras.forEach(camera => {
    const sphereGeometry = new THREE.BufferGeometry().fromGeometry(new THREE.SphereGeometry(1, 8, 8));
    const sphereMaterial = new THREE.MeshPhongMaterial({ color: new THREE.Color(0, 1, 0) });
    let p = [+camera[2]/1000, +camera[3]/1000, +camera[4]/1000]
    const sphereTransform = new THREE.Matrix4().compose(
        new THREE.Vector3(...p),
        new THREE.Quaternion(0,0,0,1),
        new THREE.Vector3(1, 1, 1)
    );
        
    let mesh = new THREE.Mesh(sphereGeometry, sphereMaterial);
    mesh.matrix = sphereTransform
    mesh.dbId = camera[0].split('_')[1];    
    modelBuilder.addMesh(mesh);
})

然后我尝试使用此代码检索单击片段的位置

event.selections[0].model.getInstanceTree().enumNodeFragments(event.selections[0].dbIdArray[0], function (frag) {       
    let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
    let matrix = new THREE.Matrix4();       
    fragProxy.getWorldMatrix(matrix);       
    let position = new THREE.Vector3().setFromMatrixPosition(matrix);
    console.log(position);
});

检索到的位置(以及变换矩阵本身)与初始位置不匹配。创建的网格(绿色)位置正确。但实际的片段位置(红色)甚至相对也不匹配。为了可见性,模型已分解。

Image

删除全局偏移似乎没有任何效果。

不确定我是否错误地检索了位置,或者片段的位置在添加过程中以某种方式发生了转换。主力机型没有这个问题。

javascript autodesk-forge
1个回答
0
投票

我找错了型号。要检索使用 modelBuilder 添加的片段的位置,您应该使用 modelBuilder.model 而不是viewer.model。它变成了这样:

const frags = modelBuilder.model.getFragmentList();
let matrix = new THREE.Matrix4();
frags.getOriginalWorldMatrix(event.selections[0].fragIdsArray[0], 
matrix);
        
let position = new THREE.Vector3().setFromMatrixPosition(matrix);
© www.soinside.com 2019 - 2024. All rights reserved.