【发布时间】:2021-06-14 15:17:10
【问题描述】:
是否可以将光栅图像(PNG、JPG、TIFF)直接加载到 Forge Viewer?
我看到可以加载 PDF 的 Autodesk.PDF 插件,但我找不到任何 Autodesk.IMAGE 插件... 否则,我需要先将图像转换为 PDF,然后通过 Autodesk.PDF 加载它。
【问题讨论】:
标签: autodesk-forge autodesk-viewer
是否可以将光栅图像(PNG、JPG、TIFF)直接加载到 Forge Viewer?
我看到可以加载 PDF 的 Autodesk.PDF 插件,但我找不到任何 Autodesk.IMAGE 插件... 否则,我需要先将图像转换为 PDF,然后通过 Autodesk.PDF 加载它。
【问题讨论】:
标签: autodesk-forge autodesk-viewer
Autodesk Forge 查看器基于 Three.js - 因此您可以使用 Three.js API 来加载图像/纹理,不需要查看器扩展。
但是,这取决于您想做什么。如果您只想在场景中加载图像,那么该代码就足够了。
const texture = THREE.ImageUtils.loadTexture( "thumbnail256.png" );
const material = new THREE.MeshBasicMaterial({ map : texture });
const geometry = new THREE.PlaneGeometry(5, 20, 32);
const planeMesh = new THREE.Mesh(geometry, material);
const planeMesh.position.set(1, 2, 3);
NOP_VIEWER.overlays.addScene('custom-scene');
NOP_VIEWER.overlays.addMesh(planeMesh, 'custom-scene');
但是如果你想在加载场景中的现有元素上应用纹理,你需要这样进行:
const texture = THREE.ImageUtils.loadTexture( "thumbnail256.png" );
const material = new THREE.MeshBasicMaterial({ map : texture, side: THREE.DoubleSide });
NOP_VIEWER.impl.matman().addMaterial('custom-material', material, true);
const model = NOP_VIEWER.model;
model.unconsolidate(); // If the model is consolidated, material changes won't have any effect
const tree = model.getInstanceTree();
const frags = model.getFragmentList();
const dbids = NOP_VIEWER.getSelection();
for (const dbid of dbids) {
tree.enumNodeFragments(dbid, (fragid) => {
frags.setMaterial(fragid, material);
});
}
NOP_VIEWER.impl.invalidate(true, true, false);
请注意,您可能需要根据几何形状计算纹理 uv。
【讨论】: