程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使 Forge Data Visualization 扩展与 IFC 文件一起使用??

开发过程中遇到如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?的解决方法建议,希望对你解决如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?有所启发或帮助;

我遵循了 Forge Data Visualization 扩展文档中的教程:https://forge.autodesk.com/en/docs/dataviz/v1/developers_guide/quickstart/ 在 IFC 文件中,除了房间的着色(如下图所示,而不是被着色)外,一切似乎都正常。

如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?

我还在 Revit 文件上进行了测试,房间的颜色正确,所以这个问题是特定于 IFC 文件的。

问题是 IFC 文件出现这种行为的原因可能是什么,我该如何解决?

解决方法

抱歉回复晚了。经过一番搜索,我设法重现了与您类似的行为,并找到了解决方案。

就我而言,我传递给 DataVisualization#registerSurfaceShadingColors、DataVisualization#renderSurfaceShading 和设备的 sensorTypesensorType 值在我的 levelRoomMap 中由 {{3 }} 不使用相同的字符大小写。例如,温度 vs temperature。修复字符大小写问题后,我的热图按预期重新绘制。截图如下:

this tutorial

这是我的代码片段供您参

async function getBoxAsync(dbId) {
    return new Promise((resolve,reject) => {
        const tree = viewer.model.geTinstanCETree();
        const frags = viewer.model.getFragmentList();
        tree.enumNodeFragments(dbId,function(fragid) {
            let bounds = new THREE.box3();
            frags.getWorldBounds(fragid,bounds);
            return resolve(bounds);
        },truE);
    });
}

function getLevel(boX) {
    const floors = viewer.getExtension("Autodesk.AEC.LevelsExtension").floorSELEctor.floorData;
    const currentElevation = box.min.z;

    if (currentElevation < floors[0].zMin) {
        return floors[0];
    } else if (currentElevation > floors[floors.length - 1].zMaX) {
        return floors[floors.length - 1];
    } else {
        return floors.find(f => f.zMin <= currentElevation && f.zMax >= currentElevation );
    }
}

async function getPropAsync(dbId) {
    return new Promise((resolve,reject) => {
        viewer.getProperties(dbId,result => resolve(result));
    });
}

async function getRoomname(dbId) {
    const result = await getPropAsync(dbId);
    const nameProp = result.properties.find(p => p.attributename === 'lcldrevit_parameter_Pset_Productrequirements_tab:lcldrevit_parameter_Name(Pset_Productrequirements)_pg_IFC');

    return nameProp.displayValue;
}

async function getRoomDbIds() {
    return new Promise((resolve,reject) => {
        viewer.search( 'Rooms',resolve,reject,['lcldrevit_parameter_Pset_SpaceCommon_tab:lcldrevit_parameter_Category(Pset_SpaceCommon)_pg_IFC'])
    });
}

async function buildRoomMap() {
    const dbIds = await getRoomDbIds();
    const DataVizCore = Autodesk.DataVisualization.Core;
    let levelRoomsmap = new DataVizCore.LevelRoomsmap();


    for ( let i = dbIds.length - 1; i >= 0; i-- ) {
        const dbId = dbIds[i];
        const box = await getBoxAsync( dbId );
        const level = getLevel( box );
        const name = await getRoomname( dbId );

        let room = new DataVizCore.Room(
            dbId,//Room's DbId
            name,box
        );

        levelRoomsmap.addRoomToLevel(level.name,room);
    }

    return levelRoomsmap;
}

async function initHeatmap() {
    const DataVizCore = Autodesk.DataVisualization.Core;
    const dataVizExtn = viewer.getExtension('Autodesk.DataVisualization');
    const levelRoomsmap = await buildRoomMap();
    const devices = [];

    for(let lvl in levelRoomsmap) {
        const rooms = levelRoomsmap[lvl];
        for (let i = rooms.length - 1; i >= 0; i--) {
            const room = rooms[i];
            const center = room.bounds.center();
            const device = {
                id: `${room.namE} Device`,// An ID to identify this device
                position: center,// World coordinates of this device
                sensorTypes: ["temperature"],// The types/properties this device exposes
            }

            devices.push(devicE);
            room.addDevice(devicE);
        }
    }

    const structureInfo = new DataVizCore.ModelStructureInfo(viewer.model);
    let shadingData = await structureInfo.generateSurfaceShadingData(devices,levelRoomsmap);

    await dataVizExtn.setupSurfaceShading(viewer.model,shadingData);

    // Set heatmap colors for temperature
    dataVizExtn.registerSurfaceShadingColors("temperature",[0x00ff00,0xff0000]);

    function getSensorValue() {
        return Math.random(); // Your random function ?
    }

    // Generate the heatmap graphics (do this one time,this is heavier)
    dataVizExtn.renderSurfaceShading(Object.keys(levelRoomsmap),"temperature",getSensorvalue);
    // Do this as many times as you want (this is lightweight)
    dataVizExtn.updateSurfaceShading(getSensorvalue);

    viewer.getExtension("Autodesk.AEC.LevelsExtension").floorSELEctor.SELEctFloor(0);
}

await initHeatmap();

大佬总结

以上是大佬教程为你收集整理的如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?全部内容,希望文章能够帮你解决如何使 Forge Data Visualization 扩展与 IFC 文件一起使用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。