Forge的 Model Derivative 模型数据提取和格式转换可以操作行业内几乎所有设计模型格式,包括Autodesk 工程建设行业的设计格式:Revit。Revit设计文件中,一般会包含三维视图,二维图纸,二维视图,导入图纸,链接模型或图纸等内容。Forge服务都是可以提取转换的。
本文整理几点相关事宜:
- Forge转换服务可以转换在Revit发布设置中的设置好的图纸或视图。通常以选择集(Set)方式选择上。
- 默认Forge服务会寻找名为{3D}的视图,如果没有,则会自动创建一个。因此当Revit模型中默认的{3D}视图被更名(例如中文名)或删掉了,在发布设置也要选上,否则Forge转换后,可能误认为默认加载的是自己调整后的视图。
- 转换后,所有视图都是这个模型的转换数据,通过端口API GET Manifest (modelderivative/v2/designdata/:urn),可以看到有多少转换数据,一个节点(derivative)对应一个三维模型或二维图纸/视图。Forge还会处理阶段模型视图,也将是一个derivative。
- 在Forge Viewer中加载模型,若不做特别设置,默认是加载那个{3D}的视图。而要切换到某个其它视图图纸,则需要在加载选项中设置 viewerable id,见上图中的viewerableId。代码样例默认是加载缺省的{3D}视图,所以直接拿取的是根节点的数据,无需指定viewerableId。
function onDocumentLoadSuccess(doc) {
// if a viewableId was specified, load that view, otherwise the default view
var viewables = (viewableId ? doc.getRoot().findByGuid(viewableId) : doc.getRoot().getDefaultGeometry());
viewer.loadDocumentNode(doc, viewables, { ids: global_queryBuilder.ids }).then(i => {
});
- 如果不做任何开发调整,可以利用Viewer自带的扩展Autodesk.DocumentBrowser,加载此扩展后,在工具条打开的对话框里,会列出所有转换的三维模型和二维图纸/视图,点击就可灵活切换加载。这个对话框也包括阶段模型视图,都集中在此Guid(08f99ae5-b8be-4f8d-881b-128675723c10)的节点下。Guid是Forge管理阶段模型视图 特有id,任何Revit模型都一样。
- 阶段模型视图 在Revit中是没有的,只有阶段设置(Phase)。启动转换Forge转换必须设置generateMasterViews = true, 才会做阶段模型视图组织工作。否则将没有阶段模型视图
{
"input": {
"urn": "{{urnBase64}}"
},
"output": {
"destination": {
"region": "us"
},
"formats": [
{
"type": "svf",
"views": [
"2d",
"3d"
],"advanced":{
"generateMasterViews":true
}
}
]
}
}
- 导入图纸(例如DWG)是和Revit模型原身一体,只需遵循常规转换要求即可。目前二维的DWG合并进来,某些图元显示会有点问题,开发部已知晓,正在研究改进中
- 链接模型是属于额外的数据内容,若只转换主Revit模型,这些链接模型是不被转换的,Get Manifest会告知 xxx 文件缺失.. 若需要链接模型内容,几个方式:
8.1) 整体打包主Revit模型和链接模型为zip,发送zip给Forge服务转换,并设置转换选项
{
"input": {
"urn": "{{urnBase64}}",
"compressedUrn":true,
"rootFilename":"main.rvt"
},
"output": {
"destination": {
"region": "us"
},
"formats": [
{
"type": "svf",
"views":["2d", "3d"]
}
]
}
}
8.2)分别转换主Revit模型和链接模型,然后通过模型聚合方式在Viewer中合并。参考模型聚合的专题课程
8.3) BIM 360或ACC中,主Revit模型和链接模型分别上载,也分别转换好,则只需要POST Xref的模式链接即可。这篇博客有详细讲述。
- 无论是二维图纸还是三维模型,甚至三维模型和二维图纸都是可以做聚合工作。可以自行用常规方式依次加载合并,在模型聚合的专题课程有讲述,但推荐使用Viewer的AggregateView类,或直接使用Viewer自带的扩展Autodesk.AEC.Hypermodeling(底层机制也是用到了AggregateView类)。