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);}
}
结论
做导出,实际并不复杂。复杂的是你的用户场景,你需要导出那些数据。另外,你的数据又要如何显示,如何使用等等。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
