Revit API: 自定义导出 CustomExporter

前言

在几年前,从 Revit 里面导出几何图形和数据一度非常火热,现在已经是成了 Revit API 开发领域的基本功了。
API 领域的大牛 Jeremy Tammik 早在2014年就发布了这个开源的项目,用于导出:https://github.com/va3c/RvtVa3c
另外,它还提供了在浏览器显示导出模型的工具,在这个 github 的 repo 里面有详细的介绍。

原理

数据最终是如何导出的,还是要去看它使用了哪些 Revit API。

CustomExporter

Autodesk.Revit.DB::CustomExporter,这个类实际上就是一个框架入口,你需要把你自己定义的导出方式传递给它。

/// 
/// 代码来自 Revit API SDK
/// 导出一个三维视图
/// 
internal void ExportA3DView(Document document, View a3DView)
{// 这个 MyExportContext 是你自己定义的类MyExportContext context = new MyExportContext(document);// 把你自己定义的这个 context 传给 CustomExporterCustomExporter exporter = new CustomExporter(document, context);// 做一些设置exporter.IncludeGeometricObjects = false;exporter.ShouldStopOnError = true;// 开始导出exporter.Export(a3DView);
}

MyExportContext

重点来了,作为外部开发者,可以控制的只有这个 MyExportContext
在 RvtVa3c, 在 https://github.com/va3c/RvtVa3c/blob/gh-pages/RvtVa3c/Va3cExportContext.cs#L28。
public class Va3cExportContext : IExportContext 可以看出需要实现 IExportContext 这个接口。

IExportContext

这个接口非常直白,几乎不需要解释。

namespace Autodesk.Revit.DB
{public interface IExportContext{void Finish();bool IsCanceled();RenderNodeAction OnElementBegin(ElementId elementId);void OnElementEnd(ElementId elementId);RenderNodeAction OnFaceBegin(FaceNode node);void OnFaceEnd(FaceNode node);RenderNodeAction OnInstanceBegin(InstanceNode node);void OnInstanceEnd(InstanceNode node);void OnLight(LightNode node);RenderNodeAction OnLinkBegin(LinkNode node);void OnLinkEnd(LinkNode node);void OnMaterial(MaterialNode node);void OnPolymesh(PolymeshTopology node);void OnRPC(RPCNode node);RenderNodeAction OnViewBegin(ViewNode node);void OnViewEnd(ElementId elementId);bool Start();}
}

除了这个接口,还有其它几个接口,比如这个为模型数据做特化的接口 IModelExportContext

namespace Autodesk.Revit.DB
{public interface IModelExportContext : IExportContext{RenderNodeAction OnCurve(CurveNode node);void OnLineSegment(LineSegment segment);RenderNodeAction OnPoint(PointNode node);RenderNodeAction OnPolyline(PolylineNode node);void OnPolylineSegments(PolylineSegments segments);void OnText(TextNode node);}
}

结论

做导出,实际并不复杂。复杂的是你的用户场景,你需要导出那些数据。另外,你的数据又要如何显示,如何使用等等。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部