导出

Revit API允许将Revit文档或其中的一部分导出为各种格式,以便与其他软件一起使用。Document类具有重载的Export()方法,该方法将使用Revit中的内置导出器(如果可用)启动文档的导出。对于更高级的需求,可以使用Revit附加模块自定义某些类型的导出,例如导出到IFC和导出到Navisworks。(Note,Navisworks导出仅作为附加模块导出器提供)。

下表概述了Document.Export()方法重载。

表:Document.Export()方法

格式 Export() parameters Comments
gbXML String, String, MassGBXMLExportOptions 从体量模型文档导出gbXML文件
gbXML String, String, GBXMLExportOptions 以Green-Building XML格式导出文档。如果将EnergyDataSettings设置为使用概念模型,则无法使用此函数:请改用上述方法。
IFC String, String, IFCExportOptions 将文档导出为行业标准类(IFC)格式。
NWC String, String, NavisworksExportOptions 将Revit项目导出为Navisworks .nwc格式。请注意,要使用此功能,必须在Revit任务中注册兼容的Navisworks导出器附加模块。
DWF String, String, ViewSet, DWFExportOptions 以XML格式导出当前视图或选定的视图。
DWFX String, String, ViewSet, DWFXExportOptions 以DWFX格式导出当前视图或选定的视图。
FBX String, String, ViewSet, FBXExportOptions 以3D-Studio Max(FBX)格式导出文档。
DGN String, String, ICollection(ElementId), DGNExportOptions 以DGN格式导出选定的视图。
DWG String, String, ICollection(ElementId), DWGExportOptions 以DWG格式导出选定的视图。
DXF String, String, ICollection(ElementId), DXFExportOptions 以XML格式导出选定的视图。
SAT String, String, ICollection(ElementId), SATExportOptions 以SAT格式导出当前视图或选定的视图。
ADSK String, String, View3D, ViewPlan, BuildingSiteExportOptions 以Autodesk Civil 3D ®格式导出文档。

导出为gbXML

有两种方法可以导出为绿色建筑XML格式。最后一个参数为MassGBXMLExportOptions的参数仅适用于包含一个或多个概念体量族实例的项目。要传递到此方法中的MassGBXMLExportOptions对象可以仅使用要在导出的gbXML中分析的体量分区的ID来构造,也可以使用体量分区ID和要在导出的gbXML中用作着色表面的体量的ID来构造。使用体量时,它们不能有体量楼层或体量分区,以免在gbXML输出中出现重复的曲面信息。

用于其他gbXML导出选项的GBXMLExportOptions对象没有要指定的设置。它使用所有默认设置。注意,该方法不生成能量模型。在调用此导出之前,主能量模型必须已存储在文档中。

导出到IFC

使用IFC选项调用Document.Export()将使用默认的Revit IFC导出实现或自定义IFC导出(如果已在Revit的当前任务中注册)。在这两种情况下,IFCExportOptions类都用于设置导出选项,例如是否导出Revit当前支持的IFC标准数量,或是否允许按标高分割多层墙和柱。

导出到Navisworks

Navisworks的Export方法需要在当前Revit任务中注册兼容的Navisworks导出器附加模块。如果没有注册兼容的导出器,则该方法将引发异常。使用OptionalFunctionalityUtils.IsNavisworksExporterAvailable()方法确定Navisworks导出程序是否已注册。

NavisworksExportOptions对象可用于设置导出到Navisworks的许多导出设置,例如是否将文件划分为级别以及是否导出房间几何图形。此外,NavisworksExportOptions.ExportScope属性指定导出范围。默认值为“模型”。其他选项包括View和SelectedElements。当设置为“视图”时,NavisworksExportOptions。ViewId属性应相应设置。此属性仅在导出范围设置为View时使用。当设置为SelectedElements时,NavisworksExportOptions。应该使用要导出的元素的id调用SetSelectedElementIds()方法。

导出到DXF和DWFX

可以使用相应的Document.Export()重载导出DWFX和DWFX文件。这两个方法都有一个ViewSet参数,表示要导出的视图。ViewSet中的所有视图都必须是可打印的,才能使导出成功。这可以使用每个视图的View.CanBePrinted属性进行检查。最后一个参数是DWFExportOptions或DWFXExportOptions。DWFXExportOptions派生自DWFExportOptions,并具有所有相同的导出设置。选项包括是否导出裁剪框、图像质量是否将纹理导出为3D打印文件以及纸张格式。

代码区域:Export DWF

1
2
3
4
5
6
7
8
9
10
11
12
public bool ExportViewToDWF(Document document, View view, string pathname)
{
DWFExportOptions dwfOptions = new DWFExportOptions();
// export with crop box and area and room geometry
dwfOptions.CropBoxVisible = true;
dwfOptions.ExportingAreas = true;
dwfOptions.ExportTexture = false;
ViewSet views = new ViewSet();
views.Insert(view);
return (document.Export(Path.GetDirectoryName(pathname),
Path.GetFileNameWithoutExtension(pathname), views, dwfOptions));
}

导出到3D-Studio Max

FBX导出要求存在某些可选模块,这些模块可能不是已安装的Revit的一部分,因此OptionalFunctionalityUtils。IsFBXExportAvailable()方法报告FBX导出功能是否可用。用于导出到3D-Studio Max的Export()方法有一个ViewSet参数,表示要导出的视图集。仅允许3D视图。FBXExportOptions参数可用于指定是否在不带边界边的情况下导出、是否使用详细级别以及在视图导出失败时是否应停止导出过程。

导出为CAD图形

输出为DGN、DWG和DXF格式文件具有类似的输出方法和选项。

DGN、DWG和DXF导出都需要存在某些可选模块,这些模块可能不是已安装的Revit版本的一部分,因此OptionalFunctionalityUtils类作为相应的方法来报告这些类型的导出功能是否可用。

用于导出为DGN、DWG和DWG格式的Export()方法都有一个参数,表示要导出的视图(作为视图的ElementId的ICollection)。必须至少存在一个有效视图,并且该视图必须是可打印的,导出才能成功。这可以使用每个视图的View.CanBePrinted属性进行检查。

每种格式的导出选项都派生自BaseExportOptions,因此有许多通用的导出设置,例如颜色模式或是否隐藏范围框。BaseExportOptions还有一个名为GetPredefinedSetupNames()的静态方法,它将返回文档的任何预定义设置。然后,可以将预定义设置的名称传递到静态方法GetPredefinedOptions()中,该方法可从相应的选项类获得:DWGExportOptions、DGNExportOptions或DXFExportOptions。DWG和DWG文件的导出选项具有更多的共同选项,因为它们共享基类ACADExportOptions。

以下示例使用第一个预定义设置名称和预定义选项将活动视图(如果可以打印)导出到DGN文件,而不进行任何更改。

代码区域:出口DGN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public bool ExportDGN(Document document, View view)
{
bool exported = false;
// Get predefined setups and export the first one
IList setupNames = BaseExportOptions.GetPredefinedSetupNames(document);
if (setupNames.Count > 0)
{
// Get predefined options for first predefined setup
DGNExportOptions dgnOptions = DGNExportOptions.GetPredefinedOptions(document, setupNames[0]);

// export the active view if it is printable
if (document.ActiveView.CanBePrinted == true)
{
ICollection views = new List();
views.Add(view.Id);
exported = document.Export(Path.GetDirectoryName(document.PathName),
Path.GetFileNameWithoutExtension(document.PathName), views, dgnOptions);
}
}

return exported;
}

对于这些文件类型,可以指定或修改各种映射设置,例如通过创建相应的表并将其传递到BaseExportOptions类的相应方法来指定或修改图层映射或文本字体映射。对于图层映射,您也可以将字符串值传递给预定义图层映射样式的BaseExportOptions.LayerMapping或图层映射文件的文件名。有关创建或修改导出表的详细信息,请参阅导出表主题。

导出到SAT

SAT的Export方法有一个表示要导出的视图的参数(作为视图的ElementId的ICollection)。必须至少存在一个有效视图,并且该视图必须是可打印的,导出才能成功。这可以使用每个视图的View.CanBePrinted属性进行检查。SATExportOptions对象没有要指定的设置。它使用所有默认设置。

导出到 Civil Engineering Design程序

最后一个Export()方法以土木工程设计应用程序的格式导出文档的3D视图。该方法的一个参数是指定总面积平面的视图平面。视图平面上的所有区域都将被导出,并且它必须是“总建筑”面积平面。若要检查其面积方案是否为Gross Building,请使用AreaScheme.GrossBuildingArea属性。BuildingSiteExportOptions对象允许自定义设置值,如总面积或总占用率。

本节中的页面

  • 导出表
  • IFC导出
  • 自定义导出

导出表

下表中列出的类公开了对用于在导出为各种格式(如DWG和DGN)时进行映射的表的读写访问权限。每个类都包含(key,info)对映射数据。

Class Description
ExportLayerTable 表示支持将各种图层特性(类别、名称、颜色名称)映射到目标导出格式中的图层名称的表。
ExportLinetypeTable 表示一个表,该表支持线型名称的映射(采用目标导出格式)。
ExportPatternTable 表示支持将FillPattern名称和id映射到目标导出格式中的FillPattern名称的表。
ExportFontTable 表示支持目标导出格式的字体名称映射的表。
ExportLineweightTable 表示支持目标导出格式的线宽名称映射的表。

这些表中的大多数都可以通过BaseExportOptions类(DGN、DWG和DWG格式选项的基类)获得。ExportLineweightTable可从DGNExportOptions类中获得。每个表都有一个对应的Get和Set方法。要修改映射,请获取相应的表,进行更改,然后将其设置回选项类。 以下示例在导出DWG文件之前修改ExportLayerTable。

代码区域:导出具有修改的ExportLayerTable的DWG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public bool ExportDWGModifyLayerTable(Document document, View view)
{
bool exported = false;
IList setupNames = BaseExportOptions.GetPredefinedSetupNames(document);
if (setupNames.Count > 0)
{
// Get the export options for the first predefined setup
DWGExportOptions dwgOptions = DWGExportOptions.GetPredefinedOptions(document, setupNames[0]);

// Get the export layer table
ExportLayerTable layerTable = dwgOptions.GetExportLayerTable();

// Find the first mapping for the Ceilings category
string category = "Ceilings";
ExportLayerKey targetKey = layerTable.GetKeys().First(layerKey => layerKey.CategoryName == category);
ExportLayerInfo targetInfo = layerTable[targetKey];

// change the color name and cut color number for this mapping
targetInfo.ColorName = "31";
targetInfo.CutColorNumber = 31;

// Set the change back to the map
layerTable[targetKey] = targetInfo;

// Set the modified table back to the options
dwgOptions.SetExportLayerTable(layerTable);

ICollection views = new List();
views.Add(view.Id);

exported = document.Export(Path.GetDirectoryName(document.PathName),
Path.GetFileNameWithoutExtension(document.PathName), views, dwgOptions);
}

return exported;
}

IFC导出

自定义IFC导出

Revit API允许自定义应用程序覆盖IFC导出过程的默认实现。

在Revit中注册IExporterIFC对象后,当用户从UI和API方法Document.Export(String,String,IFCExportOptions)调用到IFC的导出时,都将使用该对象。在这两种情况下,如果未注册自定义IFC导出器,则将使用IFC导出的默认Revit实现。

从API调用IFC导出时,IFCExportOptions可用于设置用户从“导出IFC”对话框中可用的相同导出选项。

IExporterIFC

接口IExporterIFC只有一个要实现的方法ExportIFC()。此方法由Revit调用以执行到IFC的导出。ExporterIFC对象作为其参数之一传递给此方法。ExporterIFC是Revit提供的用于实现IFC导出的主类。它包含有关用户为导出操作选择的选项的信息,以及用于访问正确实现导出所需的特定数据类型的成员的信息。

Autodesk.Revit.DB.IFC命名空间包含许多与IFC相关的API类,IFC导出过程的自定义实现可以使用这些类。有关自定义IFC导出应用程序的完整示例,请参见http://sourceforge.net/projects/ifcexporter/上的开放源代码示例。

自定义导出

使用自定义导出过程从Revit文档导出三维视图。

Revit API提供了一组类,可以通过自定义导出上下文导出三维视图。这些类提供对渲染输出管道的访问,Revit通过该管道将模型的图形三维表示发送到输出设备。在自定义导出的情况下,“设备”由上下文对象表示,该上下文对象可以是任何类型的设备。一个文件将是最常见的情况。

自定义导出器的实现提供上下文并调用模型的渲染,然后Revit开始处理模型并通过上下文的方法发送图形数据。数据描述的模型与渲染模型时在Revit中显示的完全一样。数据包括所有几何和材料属性。

CustomExporter类

CustomExporter类允许通过自定义导出上下文导出3D视图。此类的Export()方法触发Revit中的标准渲染过程,但不是在屏幕或打印机上显示结果,而是通过处理几何和非几何信息的给定自定义上下文传递输出。

IExportContext

IExportContext类的实例作为CustomExporter构造函数的参数传递。然后在导出模型的实体时调用该接口的方法。

虽然可以创建从IExportContext类派生的类,但最好使用其派生类之一:IPhotoRenderContext或IModelExportContext。使用IPhotoRenderContext执行自定义导出时,Revit将遍历模型并输出模型的几何图形,就像处理通过UI调用的渲染命令一样。只有具有实际几何图形且适合在渲染视图中显示的图元才会被处理和输出。

IModelExportContext应用于处理视图中的图元,处理方式与Revit在三维视图中处理图元的方式相同。此上下文支持其他元素,包括三维视图中显示的模型曲线和文本。

RenderNode类

RenderNode是模型导出过程中所有输出节点的基类。节点可以是几何节点(如元素或灯光),也可以是非几何节点(如材质)。某些类型的节点是包含其他渲染节点的容器节点。

CameraInfo

CameraInfo类描述有关3D视图到渲染图像的投影映射的信息。这个类的实例可以通过ViewNode的属性获得。如果为空,则应假定为正交视图。

注:翻译自Revit API Developers Guide