将新模型动态添加到查看器中

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() 来一次又一次地添加相同的模型

以上是关于将新模型动态添加到查看器中的主要内容,如果未能解决你的问题,请参考以下文章

将新的 UITextView 动态添加到 UIscrollView

如何将新数据动态添加到二维数组?

如何将新列动态添加到 bigquery 中已存在的表..?

将新组件动态添加到 JSF 组件树时重复 id

iOS动态地将新单元格加载到表格视图的底部

如何在 ASP .NET MVC 5 中使用 select2 将新值动态添加到列表框并将其传递给控制器​​?