首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Navisworks .nwd中检测和提取房间体积

从Navisworks .nwd中检测和提取房间体积
EN

Stack Overflow用户
提问于 2022-08-03 10:38:42
回答 1查看 120关注 0票数 0

我目前正在使用一个Navisworks文件,该文件至少由.dwg和.rvt组成(我没有原始文件)。我希望能够在.nwd文件上列出现有的已声明的房间和房间卷,如果可能的话,也可以列出他们的数据,所有这些处理文件都在伪造的。类似于激活“主视图”对伪造的文件进行修改,以提取房间容量。

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 09:24:15

不幸的是,generateMasterView选项只适用于RVT。

对于Navisworks文件(NWD/NWC),它需要在Navisworks选项中启用Convert Room Geometry。否则,来自RVT的转换后的NWD/NWC将不会有Revit数据。参见Navisworks手册这里

因此,首先,我建议您检查在Forge的Model面板上是否可以看到类似于此快照的Rooms,在将其转换为SVF后用Forge打开navisworks文件。

如果有房间,恭喜!我们可以从模型属性和包围框中重建房间数据。相反,您看不到Rooms节点,您必须回去询问Navisworks文件的所有者,以启用Navisworks选项中的Convert Room Geometry,重做导出RVT -> NWC,并链接DWG。

下面是从模型属性和边界框重建房间数据的代码片段。有关详细信息,请查看https://forge.autodesk.com/blog/add-data-visualization-heatmaps-rooms-non-revit-model-part-i-nwc

代码语言:javascript
复制
async function getBoxAsync(dbId, model) {
    return new Promise((resolve, reject) => {
        const tree = model.getInstanceTree();
        const frags = model.getFragmentList();
        tree.enumNodeFragments(dbId, function(fragid) {
            let bounds = new THREE.Box3();
            frags.getWorldBounds(fragid, bounds);
            return resolve(bounds);
        }, true);
    });
}

function getLevel(box, floors) {
    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, model) {
    return new Promise((resolve, reject) => {
        model.getProperties(dbId, result => resolve(result));
    });
}

function getRoomName(dbId, model) {
    const tree = model.getInstanceTree();
    return tree.getNodeName( dbId );
}

async function getRoomDbIds(model) {
    return new Promise((resolve, reject) => {
        model.search( 'Rooms', resolve, reject, ['Category'])
    });
}

const dataVizExtn = await viewer.loadExtension('Autodesk.DataVisualization');

const model = viewer.model;
const levelExt = await viewer.loadExtension('Autodesk.AEC.LevelsExtension');
const floors = levelExt.floorSelector.floorData;

const dbIds = await getRoomDbIds(model);

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

    // Do your tasks here

}

要计算Room的容量,您可以查看这个博客,从网格数据中计算它。

https://forge.autodesk.com/blog/get-volume-and-surface-area-viewer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73220311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档