【问题标题】:How can I remove or hide an object on the model tree panel in Forge Viewer?如何在 Forge Viewer 的模型树面板上移除或隐藏对象?
【发布时间】:2019-08-27 15:56:47
【问题描述】:

我需要从查看器的模型树面板中隐藏(使其完全消失)。

我已经尝试过覆盖查看器中的方法(其他一些事情就是这样做的),但是与树相关的方法和对象无法访问以进行扩展。弄乱 instanceTree 数据似乎也太危险了,比如从节点列表中删除 dbId。

我在最新的 Viewer 代码 (6.5.3) 上运行,并编写纯 javascript 扩展。

例如,我尝试重写此函数,该函数在内部用于确定是否应显示节点。它不起作用,在 ModelStructureTreeDelegate 上覆盖相同的函数也不起作用:

Autodesk.Viewing.UI.TreeDelegate.prototype.shouldCreateTreeNode = function (dbId)
{
    // original code on the viewer.js is:
    // return true;

    let itGo = true;

    // _objectsHiddenInTree is populated with dbIds of objects to be hidden right after initializing the viewer
    _objectsHiddenInTree.forEach(x => {
        if (x == dbId){
            itGo = false;
        }
    });

    // return false; doesn't work either

    return itGo;
};

有没有办法从查看器端做到这一点?我的意思是,从模型树中删除一个项目?

如果它更可行,从场景中完全移除对象也是一个有效的选择。但是我不能在发送到模型派生之前从模型中删除它,它必须在打开查看器时完成,或者在打开树模型面板之前完成。

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    Bryan 的回答给了我一个目前看来可行的想法:

    树面板上的每个元素都有一个属性“lmv-nodeid”,以及对象的 dbId。于是找了找,给 div 添加了 'hidden' 属性:

    document.querySelectorAll('[lmv-nodeid="' + objectDbId + '"]')[0].hidden = true;
    

    不过,他的回答仍然更好,因为不能保证该属性会保留在较新版本的 Viewer 上,而 Viewer 类和方法更稳定且面向未来。

    【讨论】:

      【解决方案2】:

      个人最简单的方法是通过viewer.modelstructure 访问节点元素并使用样式隐藏节点:

      <style>
      .yourHiddenNodeClass{display:none!important}
      </style>
      ...
      <script>
      let modelStructureControl = viewer.modelstructure;
      modelStructureControl.createUI(); //initialize the panel if it hasn't
      let treeViewControl = modelStructureControl.tree;
      let modelDelegate = treeViewControl.getDelegate(model.id);
      treeViewControl.addClass(modelDelegate, dbid, "yourHiddenNodeClass", false) //hide a node - last boolean to toggle recursiveness
      ...
      treeViewControl.removeClass(modelDeleagate, dbid, "yourHiddenNodeClass", false) //remove your custom class
      </script>
      

      并完全隐藏一个节点:

      model.visibilityManager.setNodeOff(dbid, true) // true=hide, false=show
      

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 2020-01-21
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 2019-05-08
        • 2017-11-17
        • 2022-10-05
        • 2021-10-02
        相关资源
        最近更新 更多