【问题标题】:Disabling heatmaps from Autodesk Forge Datavisualization API从 Autodesk Forge Datavisualization API 禁用热图
【发布时间】:2021-09-24 02:20:21
【问题描述】:

我正在尝试在某些事件上禁用/隐藏模型的热图,在其他事件上重新激活它们,但我在文档和 API 参考中找不到任何信息。是否有任何实现或者我必须重新加载几何?最好的方法是什么?

【问题讨论】:

    标签: javascript autodesk-forge


    【解决方案1】:

    要禁用/隐藏热图,我们可以调用removeSurfaceShading()。在移除热图之前,我们可能需要记住应用中某处的当前热图设置。

    viewer.getExtension('Autodesk.DataVisualization').removeSurfaceShading()
    

    在想要放回它时,重新执行用于生成热图的代码。以下是参考应用程序如何实现此目的的代码:

    【讨论】:

      【解决方案2】:

      我已经找到了执行此操作的方法。我不知道我是否是隐藏热图的预期方式,但它对我有用。

      为了在 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 的事件。我就是这样做的,我再说一遍,我不确定这是开发人员想要的方式。欢迎任何其他答案。

      【讨论】:

        猜你喜欢
        • 2020-03-20
        • 2019-11-18
        • 2016-11-16
        • 2021-02-17
        • 2017-03-25
        • 2017-01-12
        • 2019-11-16
        • 2019-04-21
        • 2018-04-25
        相关资源
        最近更新 更多