我目前正在使用一个Navisworks文件,该文件至少由.dwg和.rvt组成(我没有原始文件)。我希望能够在.nwd文件上列出现有的已声明的房间和房间卷,如果可能的话,也可以列出他们的数据,所有这些处理文件都在伪造的。类似于激活“主视图”对伪造的文件进行修改,以提取房间容量。
发布于 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
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
https://stackoverflow.com/questions/73220311
复制相似问题