从 Autodesk Forge Datavisualization 禁用热图 API
Disabling heatmaps from Autodesk Forge Datavisualization API
我试图在某些事件上禁用/隐藏模型的热图,在其他事件上重新激活它们,但我在文档和 API 参考资料中找不到任何信息。是否有任何实现,或者我是否必须重新加载几何图形?最好的方法是什么?
我已经找到方法了。我不知道我是否是隐藏热图的预期方式,但它对我有用。
为了动态禁用 Forge Dataviz 上的热图 API,我在按钮上创建了一个 eventListener,如下所示:
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, ) });
这可以映射到不依赖于数据可视化的任何事件api。这就是我的做法,我再说一遍,我不确定这是开发人员打算采用的方式。欢迎任何其他答案。
到disable/hide热图,我们可以调用removeSurfaceShading()
。在删除热图之前,我们可能需要记住应用中某处的当前热图设置。
viewer.getExtension('Autodesk.DataVisualization').removeSurfaceShading()
虽然想把它放回去,但重新执行你用来生成热图的代码。以下是参考应用程序如何实现此目的的代码:
- https://github.com/Autodesk-Forge/forge-dataviz-iot-react-components/blob/a805e66597ff9ca27840ebee2fcba1985729ec61/client/components/HeatmapOptions.jsx#L163
- https://github.com/Autodesk-Forge/forge-dataviz-iot-react-components/blob/a805e66597ff9ca27840ebee2fcba1985729ec61/client/components/BaseApp.jsx#L887
我试图在某些事件上禁用/隐藏模型的热图,在其他事件上重新激活它们,但我在文档和 API 参考资料中找不到任何信息。是否有任何实现,或者我是否必须重新加载几何图形?最好的方法是什么?
我已经找到方法了。我不知道我是否是隐藏热图的预期方式,但它对我有用。
为了动态禁用 Forge Dataviz 上的热图 API,我在按钮上创建了一个 eventListener,如下所示:
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, ) });
这可以映射到不依赖于数据可视化的任何事件api。这就是我的做法,我再说一遍,我不确定这是开发人员打算采用的方式。欢迎任何其他答案。
到disable/hide热图,我们可以调用removeSurfaceShading()
。在删除热图之前,我们可能需要记住应用中某处的当前热图设置。
viewer.getExtension('Autodesk.DataVisualization').removeSurfaceShading()
虽然想把它放回去,但重新执行你用来生成热图的代码。以下是参考应用程序如何实现此目的的代码:
- https://github.com/Autodesk-Forge/forge-dataviz-iot-react-components/blob/a805e66597ff9ca27840ebee2fcba1985729ec61/client/components/HeatmapOptions.jsx#L163
- https://github.com/Autodesk-Forge/forge-dataviz-iot-react-components/blob/a805e66597ff9ca27840ebee2fcba1985729ec61/client/components/BaseApp.jsx#L887