【问题标题】:How to get the model object tree of 2D drawing如何获取二维绘图的模型对象树
【发布时间】:2017-05-24 07:56:35
【问题描述】:

我使用viewer.getObjectTree = function(onSuccessCallback, onErrorCallback)获取模型对象树,然后从根节点向下遍历到所有叶节点。代码如下:

viewer.getObjectTree(function (objTree) {
    objTree.enumNodeChildren(
        objTree.getRootId(),
        function (dbId) {
            // Work with dbId
        },
        true
    );
};

但是,它仅适用于 3D 模型。 2D 模型不跳入回调事件。如何获取 2D 布局/绘图的所有对象 ID?

【问题讨论】:

  • 我刚刚使用我们的示例 Revit 文件进行了验证,并在 Viewer 2.11 中使用了 2D 模型,它工作正常。对于您的问题,通常原因是您尝试获取实例树时未初始化它。因此,您需要确保已设置实例树。您是否检查了此帖子stackoverflow.com/questions/38904993/… 以防出现同样的问题?
  • 我将viewer.getObjectTree 放在Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT 中,但它不适用于2D 绘图,只能用于3D 模型。您能否分享您的完整代码。
  • 您是否尝试在 Autodesk.Viewing.GEOMETRY_LOADED_EVENT 中执行此操作?我实际上是在这个活动中做到的。
  • 我尝试在Autodesk.Viewing.GEOMETRY_LOADED_EVENTAutodesk.Viewing.OBJECT_TREE_CREATED_EVENT 中加载viewer.getObjectTree,但没有任何效果。您可以尝试加载主 3D 模型的特定 2D 布局的瓮。

标签: autodesk-forge autodesk-viewer


【解决方案1】:

我找到了原因。 2D 布局/绘图没有其模型对象树(只有图层)。它使用与 3D 模型不同的数据结构。 3D 使用实例树获取所有节点,而 2D 使用 DbId 字符串。

要在 3D 模型中导航对象,请使用 viewer.getObjectTreeviewer.model.getData().instanceTree

要在 2D 布局中导航对象,请使用 viewer.model.getData()。我可以从viewer.model.getData().stringDbIds得到一个 DbIds 列表

【讨论】:

  • viewer.model.getData().stringDbIds 未返回二维绘图中使用的正确 DbId。
  • 你的种子文件是什么格式的?那是 DWG 文件吗?
  • 我的种子文件是 2D DWF。 DWG 也一样。
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多