使用数据可视化扩展在不同时间添加多个精灵的问题

Posted

技术标签:

【中文标题】使用数据可视化扩展在不同时间添加多个精灵的问题【英文标题】:Problems with adding multiple sprites at different times using the Data Visualization Extension 【发布时间】:2021-09-10 22:27:44 【问题描述】:

如果您拥有最新的查看器版本 (7.46),则此问题中的所有内容都适用于仅使用控制台,因此如果您想自己尝试,只需复制并粘贴到控制台

问题来了,我想在不同的时间插入精灵,视觉上接下来的代码可以正常工作

      this.dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
      this.DataVizCore =  Autodesk.DataVisualization.Core;

      this.style = new this.DataVizCore.ViewableStyle(this.DataVizCore.ViewableType.SPRITE, new THREE.Color(0xffffff), 'https://avatars.githubusercontent.com/u/16883010');

      this.viewableData = new this.DataVizCore.ViewableData();
      this.viewableData.spriteSize = 20; // Size in px
     
      this.worldPoint = x:Math.floor(Math.random() * 10),y:Math.floor(Math.random() * 10),z:Math.floor(Math.random() * 10);

      this.viewable = new this.DataVizCore.SpriteViewable(this.worldPoint, style, Math.floor(Math.random() * 1000000));

      this.viewableData.addViewable(viewable);
   
      await this.viewableData.finish();
      this.dataVizExtn.addViewables(this.viewableData);

问题是当我使用方法on the documentation检索精灵的信息时,我只得到最后添加的精灵的信息

      console.log(viewableData.viewables)

我知道这是为什么,是因为我每次添加新精灵时都会重新创建 viewableData 变量。

但是进行更改,所以我只在控制台中声明一次

    this.dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
    this.DataVizCore =  Autodesk.DataVisualization.Core;
    this.viewableData = new this.DataVizCore.ViewableData();

然后多次执行新的更新代码而不再次声明viewableData

          this.style = new this.DataVizCore.ViewableStyle(this.DataVizCore.ViewableType.SPRITE, new THREE.Color(0xffffff), 'https://avatars.githubusercontent.com/u/16883010');
    
          
          this.viewableData.spriteSize = 20; // Size in px
         
          this.worldPoint = x:Math.floor(Math.random() * 10),y:Math.floor(Math.random() * 10),z:Math.floor(Math.random() * 10);

          this.viewable = new this.DataVizCore.SpriteViewable(this.worldPoint, style, Math.floor(Math.random() * 1000000));
    
          this.viewableData.addViewable(viewable);
       
          await this.viewableData.finish();
          this.dataVizExtn.addViewables(this.viewableData);

将使console.log(viewableData.viewables)返回所有插入的精灵,但它只会在查看器中绘制第一个

我不确定这是否是一个错误,因为数据可视化扩展是在不到 2 个月前发布的,或者我做错了什么

编辑:我做了一些似乎可以解决问题的事情,可能有更好的解决方案,但现在这似乎对我有用

    let oldViewableData = this.viewableData;
    this.viewableData = new this.DataVizCore.ViewableData();
    if(oldViewableData)
        this.dataVizExtn.removeAllViewables()
        for (let value of oldViewableData.viewables) 
            this.viewableData.addViewable(value);
        
    

现在让我们将新的精灵添加到已经存在的精灵中,现在看起来它工作正常

【问题讨论】:

【参考方案1】:

您的代码的第二个版本似乎仍然不正确,因为每当向此对象添加新精灵 (viewable) 时,您都会重复向查看器添加相同的 this.viewableData 对象。

最后一个 sn-p 可能是您想要做的:只创建一个 ViewableData 的实例,并在需要时继续向其中添加精灵/可视化。如果您需要删除此对象并创建另一个 ViewableData 实例,使用您找到的 removeAllViewables 方法删除原始实例是个好主意。

【讨论】:

以上是关于使用数据可视化扩展在不同时间添加多个精灵的问题的主要内容,如果未能解决你的问题,请参考以下文章

Python使用matplotlib函数subplot可视化多个不同颜色的折线图在折线图上为每个数据点添加日期数据标签

R语言plotly可视化:可视化多个数据集归一化直方图(historgram)并在直方图中添加密度曲线kde设置不同的直方图使用不同的分箱大小(bin size)在直方图的底部边缘添加边缘轴须图

R语言plotly可视化:plotly可视化多个数据集归一化直方图(historgram)设置不同的直方图使用不同的分箱大小(bin size)在直方图的底部边缘添加边缘轴须图rug

ThreeJS——精灵模型实现下雨场景效果

在不使用点精灵的情况下在屏幕上的不同点渲染多个纹理

ejabberd:并行处理具有不同命名空间的多个数据包