如何解决使用数据可视化扩展在不同时间添加多个精灵的问题
如果您拥有最新的查看器版本 (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,'https://avatars.githubusercontent.com/u/16883010');
this.viewableData.spriteSize = 20; // Size in px
this.worldPoint = {x:Math.floor(Math.random() * 10),z:Math.floor(Math.random() * 10)};
this.viewable = new this.DataVizCore.SpriteViewable(this.worldPoint,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);
}
}
现在让我们向现有的精灵添加新的精灵,现在看起来它工作正常
解决方法
您的代码的第二个版本似乎仍然不正确,因为每当向该对象添加新精灵 (this.viewableData
) 时,您都会反复向查看器添加相同的 viewable
对象。
最后一个片段可能是您想要做的:仅创建 ViewableData
的单个实例,并在需要时不断向其中添加 sprites/viewables。如果您需要删除此对象并创建 ViewableData
的另一个实例,使用您找到的 removeAllViewables
方法删除原始实例是个好主意。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。