从 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()

虽然想把它放回去,但重新执行你用来生成热图的代码。以下是参考应用程序如何实现此目的的代码: