【问题标题】:DataVizExtention: issue with clearing viewables while a sprite is selectedDataVizExtention:选择精灵时清除可视项的问题
【发布时间】:2021-06-28 11:12:18
【问题描述】:

在我的代码中,我有这个工作流程:

  1. 当用户想看一些东西时,使用 'DataVizCore.addViewables()' 添加 Sprites
  2. 使用 'viewer.addEventListener(DataVizCore.MOUSE_CLICK, onDotClick)' 显示信息气泡
  3. 当用户想要展示其他东西时,调用'DataVizCore.removeAllViewables()'来清除Sprites
  4. 从第 1 步开始重复

除了在一种情况下,这个序列可以正常工作。

如果在调用 removeAllViewables() 之前选择了一个精灵(通过点击它),我不会收到新添加的精灵的 MOUSE_CLICK 事件。在浏览器控制台中,我看到抛出了以下错误。

CustomViewables.js:318 Uncaught TypeError: Cannot read property 'style' of undefined at ViewableData.getViewableUV (developer.api.autodesk.com/modelderivative/v2/viewers/7.*/extensions/DataVisualization/DataVisualization.js:454)

作为一种解决方法,我添加了“event.hasStopped = true”来单击事件处理程序,以防止 Sprite 在内部被选中。这似乎行得通。

对我来说,这似乎是 DataVizExtension 中的一个错误。或者,我的工作流程有误?

谢谢
班杜

【问题讨论】:

    标签: autodesk-forge


    【解决方案1】:

    班杜。感谢您提供重现此问题的详细步骤。我尝试使用DataVisualization.jsv7.46.0 版本(截至我的消息的最新版本),但没有看到同样的问题。我很好奇你是否使用相同版本的 Forge 查看器(你可以通过查看 Chrome DevTools 的 Network 选项卡下获取的 viewer3D.js 来弄清楚)。

    设置event.hasStopped = true 有效,因为它在内部避免了对引发异常的getViewableUV 的代码路径调用,但该标志适用于其他用例(例如overriding default sprite selection behavior)。

    无论如何,我刚刚调整了我们的内部代码,以使像您这样的用例更加健壮。这些更改将与即将发布的v7.47.0 一起发布。感谢您的反馈?

    【讨论】:

    • 谢谢本。是的,我使用的是 v7.46(默认加载了 v7.*)。我忘了提到我正在为每个 Sprint 制作一个新样式,因为颜色是每个 sprint 的用户定义的(这不是您的示例代码推荐的方式)。不确定这是否有影响。感谢您的修复,当我得到 7.47 时我会尝试。班杜
    • 当然,Bandu,从你得到异常的方式来看,新代码应该使它不会取消引用无效的viewableData(以及其他内容)。我确实重新创建了新的ViewableStyleViewableDataSpriteViewableaddViewables,所以应该与您的场景非常相似。让我们看看新版本是否对您有所改进。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2012-08-07
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多