【发布时间】:2021-09-24 02:20:21
【问题描述】:
我正在尝试在某些事件上禁用/隐藏模型的热图,在其他事件上重新激活它们,但我在文档和 API 参考中找不到任何信息。是否有任何实现或者我必须重新加载几何?最好的方法是什么?
【问题讨论】:
我正在尝试在某些事件上禁用/隐藏模型的热图,在其他事件上重新激活它们,但我在文档和 API 参考中找不到任何信息。是否有任何实现或者我必须重新加载几何?最好的方法是什么?
【问题讨论】:
要禁用/隐藏热图,我们可以调用removeSurfaceShading()。在移除热图之前,我们可能需要记住应用中某处的当前热图设置。
viewer.getExtension('Autodesk.DataVisualization').removeSurfaceShading()
在想要放回它时,重新执行用于生成热图的代码。以下是参考应用程序如何实现此目的的代码:
【讨论】:
我已经找到了执行此操作的方法。我不知道我是否是隐藏热图的预期方式,但它对我有用。
为了在 Forge Dataviz API 上动态禁用热图,我在按钮上创建了一个事件监听器,如下所示:
document.getElementById('maintenance-tab').addEventListener('click', async() => await viewer.unloadExtension('Autodesk.DataVisualization'));
这将完全卸载扩展。我也尝试过updateSurfaceShading(()=> null) 函数,但没有成功,热图只是设置为最低值。如果您完全卸载扩展,热图和精灵将不会显示。
为了再次显示它们,我必须调用加载扩展、添加设备数据和渲染表面阴影的函数。
async function loadHeatmaps(viewer, model) {
await viewer.loadExtension('Autodesk.DataVisualization');
const dataVizExt = viewer.getExtension('Autodesk.DataVisualization');
const devices = [
//ARRAY OF DEVICES
];
const sensorColors = [0x00b2ca, 0x6fbf4a, 0xf7b53b, 0xe34f26];
const sensorType = 'temperature';
const structureInfo = new Autodesk.DataVisualization.Core.ModelStructureInfo(model); // Obtain room info from the model
const shadingData = await structureInfo.generateSurfaceShadingData(devices); // Map devices to rooms
await dataVizExt.setupSurfaceShading(model, shadingData); // Build heatmaps for rooms with at least one device in them
dataVizExt.registerSurfaceShadingColors(sensorType, sensorColors);
normalizedValue = await getSensorValue();
const floorName = 'A1_Level 1';
dataVizExt.renderSurfaceShading(floorName, sensorType, (surfaceShadingPoint, sensorType) => normalizedValue);
}
document.getElementById('data-tab').addEventListener('click', async() => { await loadHeatmaps(viewer, viewer.model, ) });
这可以映射到任何不依赖于 dataviz api 的事件。我就是这样做的,我再说一遍,我不确定这是开发人员想要的方式。欢迎任何其他答案。
【讨论】: