自定义模型在 Autodesk Forge 中的动态位置
Dynamic position of custom model in Autodesk Forge
我想构建一个连接到 BIM 360 的查看器伪造。THREE.js 中有一个新对象形式的附加功能,可以遵循 GPS 位置(模型的动态定位)。所以我将它映射到 FORGE 查看器中。据我所知,有 3 种方法可以在 FORGE 上显示自定义模型:
- viewer.impl.scene.add(型号)
- viewer.overlays.addMesh(型号)
- modelBuilder.addMesh(型号)
对于这种情况,我应该使用哪一个?
我还有一个问题,如何使用 sceneBuilder 对网格进行分组,因为在我尝试之后它不起作用,但是当我使用叠加层时它起作用了。
this.viewer.loadExtension("Autodesk.Viewing.SceneBuilder").then(() => {
this.sceneBuilder = this.viewer.getExtension(
"Autodesk.Viewing.SceneBuilder"
);
this.sceneBuilder.addNewModel({}).then((modelBuilder) => {
this.modelBuilder = modelBuilder;
window.modelBuilder = modelBuilder;
const geometry = new THREE.BufferGeometry().fromGeometry(
new THREE.SphereGeometry(5, 8, 8)
);
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const head = new THREE.Mesh(geometry, material);
mesh.matrix = new THREE.Matrix4().compose(
new THREE.Vector3(0, 0, 5),
new THREE.Quaternion(0, 0, 0, 1),
new THREE.Vector3(1, 1, 2)
);
const body = new THREE.Mesh(geometry, material);
body.matrix = new THREE.Matrix4().compose(
new THREE.Vector3(0, 0, 0),
new THREE.Quaternion(0, 0, 0, 1),
new THREE.Vector3(1, 1, 2)
);
const human = new THREE.Group();
human.add(head);
human.add(body);
human.dbId = 100; // Set the database id for the mesh
modelBuilder.addMesh(human);
});
});
通常,当您希望自定义 three.js 对象表现得像其他 Forge 模型 时,建议使用选项 3(使用 SceneBuilder
),即,使其可悬停、可选择等。选项 2(使用 viewer.overlays
)可用于所有其他情况。我猜在您的情况下,您不需要可选择人体模型或拥有 dbID,因此使用 viewer.overlays.addMesh
完全没问题。
此外,我认为 ModelBuilder.addMesh
方法仅支持“叶”对象,而不支持组,因此如果您确实需要使用组,viewer.overlays
是可行的方法。
我想构建一个连接到 BIM 360 的查看器伪造。THREE.js 中有一个新对象形式的附加功能,可以遵循 GPS 位置(模型的动态定位)。所以我将它映射到 FORGE 查看器中。据我所知,有 3 种方法可以在 FORGE 上显示自定义模型:
- viewer.impl.scene.add(型号)
- viewer.overlays.addMesh(型号)
- modelBuilder.addMesh(型号)
对于这种情况,我应该使用哪一个?
我还有一个问题,如何使用 sceneBuilder 对网格进行分组,因为在我尝试之后它不起作用,但是当我使用叠加层时它起作用了。
this.viewer.loadExtension("Autodesk.Viewing.SceneBuilder").then(() => {
this.sceneBuilder = this.viewer.getExtension(
"Autodesk.Viewing.SceneBuilder"
);
this.sceneBuilder.addNewModel({}).then((modelBuilder) => {
this.modelBuilder = modelBuilder;
window.modelBuilder = modelBuilder;
const geometry = new THREE.BufferGeometry().fromGeometry(
new THREE.SphereGeometry(5, 8, 8)
);
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const head = new THREE.Mesh(geometry, material);
mesh.matrix = new THREE.Matrix4().compose(
new THREE.Vector3(0, 0, 5),
new THREE.Quaternion(0, 0, 0, 1),
new THREE.Vector3(1, 1, 2)
);
const body = new THREE.Mesh(geometry, material);
body.matrix = new THREE.Matrix4().compose(
new THREE.Vector3(0, 0, 0),
new THREE.Quaternion(0, 0, 0, 1),
new THREE.Vector3(1, 1, 2)
);
const human = new THREE.Group();
human.add(head);
human.add(body);
human.dbId = 100; // Set the database id for the mesh
modelBuilder.addMesh(human);
});
});
通常,当您希望自定义 three.js 对象表现得像其他 Forge 模型 时,建议使用选项 3(使用 SceneBuilder
),即,使其可悬停、可选择等。选项 2(使用 viewer.overlays
)可用于所有其他情况。我猜在您的情况下,您不需要可选择人体模型或拥有 dbID,因此使用 viewer.overlays.addMesh
完全没问题。
此外,我认为 ModelBuilder.addMesh
方法仅支持“叶”对象,而不支持组,因此如果您确实需要使用组,viewer.overlays
是可行的方法。