RevitExportGltf是一款专为Autodesk Revit打造的开源插件,用于将模型以glTF格式导出。该工具包含了详尽的中文注释,便于开发者理解和使用。
这款插件是迄今为止我使用过的最实用且功能强大的Revit二次开发工具之一,它在原有的基础上进行了大幅改进,解决了Node、纹理丢失及压缩等问题。该插件主要基于Revit2018版本设计,其核心任务是从Revit中导出建筑模型,并采用GLTF格式进行编码。
运行此插件十分简便:只需双击启动插件后选择所需输出的文件格式与保存路径即可;支持gltf和glb二进制等多种格式。在成功执行之后,它会返回相关信息以确认操作结果及生成的文件详情。
该开发项目主要依赖于RevitAPI.dll 和 RevitAPIUI.dll ,这两个库用于实现对Revit的应用程序接口进行二次编程扩展功能。同时,在导出过程中使用了SharpGLTF 库来处理glTF 2.0 文件格式的数据,这是一个完全基于 .NET 标准的库。
SharpGLTF 包含两个主要部分: SharpGLTF.Core 和 SharpGLTF.Toolkit 。前者提供读写文件支持以及对 glTF 模型的基本访问功能;后者则包含一系列实用工具以帮助构建、操作和评估glTF模型。例如,可以使用以下代码将gltf格式的模型保存为glb:
```csharp
var model = SharpGLTF.Schema2.ModelRoot.Load(model.gltf);
model.SaveGLB(model.glb);
```
在数据导出过程中,需要实现 IExportContext 接口以执行特定操作序列。这个接口定义了一系列方法用于处理模型元素、材质和光照等信息的解析与转换。
具体步骤如下:
- Start
- OnViewBegin
- onElementBegin
- OnInstanceBegin
- OnMaterial 和 OnLight 的处理
- 紧接着是OnFaceBegin,然后是OnPolymesh 以及OnFaceEnd 方法调用。
- 接下来执行的是OnInstanceEnd和OnElementEnd方法。
- 最后完成整个视图的导出:IsCanceled ->Finish
如果有链接模型的话,在非链接元素处理完成后会进入 OnLinkBegin 阶段,然后继续对链接模型中的各个元素进行相同的处理流程。
开发环境需要安装Autodesk Revit API 和 Autodesk Revit UI 库。此外还需配置Node.js 环境,并使用npm 安装gltf-pipeline工具来进一步优化导出的glTF 文件质量。