将新模型动态添加到查看器中
Posted
技术标签:
【中文标题】将新模型动态添加到查看器中【英文标题】:Dynamic adding new models into viewer 【发布时间】:2021-05-14 21:31:08 【问题描述】:我想创建一个网页,在左侧,模型缩略图将显示,在右侧,我需要显示所述模型。我找到了最初加载多个模型的解决方案,如下所示:
window.addEventListener('DOMContentLoaded', () =>
loadModels([
urn: "urn1", xform: x: -60, y: 0, z: 0 ,
urn: "urn2", xform: x: 60, y: 0, z: 0 ,
urn: "urn3", xform: x: 50, y: 0, z: 50 ,
])
);
并使用以下函数
Autodesk.Viewing.Initializer(viewerOptions, () =>
const div = document.getElementById('forgeViewer');
viewer = new Autodesk.Viewing.Private.GuiViewer3D(div, extensions: ["DragControlExtension"] );
viewer.start();
urns.map((m) =>
Autodesk.Viewing.Document.load(`urn:$m.urn`, (doc) =>
var viewables = doc.getRoot().getDefaultGeometry();
viewer.loadDocumentNode(doc, viewables,
placementTransform: (new THREE.Matrix4()).setPosition(m.xform),
keepCurrentModels: true,
globalOffset: x: 0, y: 0, z: 0
)
.then(onLoadFinished);
);
)
);
现在,我的问题是:“我可以在运行时拖动一个新模型吗”。另外,是否可以通过拖动来移动现有模型。
Autodesk.Viewing.Initializer
之后,有什么事件或方法可以帮助吗? (一些参考资料也会有所帮助。)
【问题讨论】:
【参考方案1】:加载模型后,您可以通过修改其 placementTransform 来移动它 - 例如如果 secondModel 是您刚刚添加并尝试使用例如移动的那个键盘上的键,你可以这样做:
document.onkeydown = event =>
if (!event.shiftKey)
return;
if (event.code === "ArrowRight")
let tr = secondModel.getPlacementTransform();
// move along X axis
tr.elements[12] += 1;
secondModel.setPlacementTransform(tr);
if (event.code === "ArrowLeft")
let tr = secondModel.getPlacementTransform();
// move along X axis
tr.elements[12] -= 1;
secondModel.setPlacementTransform(tr);
;
您可以在此处找到有关它的更多详细信息:https://forge.autodesk.com/blog/dynamic-model-placement
【讨论】:
感谢您的帮助。我还有两个查询是否可以在现有查看器中使用模型添加新模型,我可以选择一个模型并移动该模型吗? 1) 是的,您可以继续将模型添加到查看器 2) 是的,您可以按照文章中的方式移动任何模型。如何选择要移动的模型取决于您。根据他们的名字,根据他们的索引(第一次加载与第三次加载),让用户从中选择一个对象 感谢您的回答。您能给我提供一些类似上面的链接,以便在查看器中已经存在模型的查看器中添加模型吗?还有任何关于该方法的深入文档和解释吗? 你可以一直用相同的参数调用 viewer.loadDocumentNode() 来一次又一次地添加相同的模型以上是关于将新模型动态添加到查看器中的主要内容,如果未能解决你的问题,请参考以下文章