借助 ODA 平台,您可以使用边界表示 (B-Rep) 处理实体和壳。在 ODA Drawings(用于处理 .dwg 和 .dgn 文件)、ODA PRC 和 ODA BimRv 中,B-Rep 接口有单独的实现,但您可以使用通用类 OdBrBrep 来处理它们。
B-Rep 可以借助相应的 BrepBuilder 创建。构建器由通用类 OdBrepBuilder 包装,就像 B-Rep 一样。
您可以通过调用 add* 方法(addFace、addEdge 等)手动填充构建器。示例可在以下位置找到:
- BimRv/Examples/TB_DevGuideCommands/BmFreeFormElemCmd.cpp
- CommonApplications/Prc/Examples/OdPrcBrepBuilderEx/Box.cpp
- CommonApplications/Prc/Examples/OdPrcBrepBuilderEx/ComplexPlane.cpp
- CommonApplications/Prc/Examples/OdPrcBrepBuilderEx/Cone.cpp
- CommonApplications/Prc/Examples/OdPrcBrepBuilderEx/Cylinder.cpp
- CommonApplications/Prc/Examples/OdPrcBrepBuilderEx/Sphere.cpp
- Drawing/Examples/ExCustObjs/ExCreateBreps.cpp
- Drawing/Examples/OdWriteEx/DbFiller.cpp
或者您可以使用现有的 B-Rep 和 OdBrepBuilderFiller。OdBrepBuilderFiller 是核心扩展模块。它遍历 B-Rep 并收集拓扑和视觉信息。然后该模块将数据放入构建器中。
使用 OdBrepBuilderFiller:
- 添加包含头文件:
#include "BrepBuilderFillerModule.h"" - 使用宿主应用程序服务实例的 brepBuilder 方法设置 OdBrepBuilder 的实现。例如:
OdDbHostAppServices* pHostApp; … OdBrepBuilder builder; OdResult err = pHostApp->brepBuilder(builder, kOpenShell); if (eOk != err) { throw OdError(err); } - 初始化一个 B-Rep。例如:
OdDbSurface* pSurf; … OdBrBrep brep; pSurf->brep(brep); - 创建 OdBrepBuilderFiller:
OdBrepBuilderFiller bbFiller;注意:填充器存储构建器引用的几何体。因此,当您调用 builder.finish() 时,填充器应该存在。
- 初始化填充器参数,这可以通过不同的方式完成:
- 当您需要处理材质和颜色时,此变体很有用:
setupFor 参数根据每个数据库(DGN 除外)确定源和目标 B-Rep 的拓扑格式。bbFiller.params().setupFor(pDbOfBrep, pDbOfBuilder); - DGN 格式支持 Parasolid 和 ACIS B-Rep 拓扑。因此 setupFor 无法确定拓扑类型。要确定 B-Rep 拓扑格式:
OdDgModelerGeometry* pModeler; … OdDgModelerGeometry::OdDgModelerVersion modelerVersion = 0; OdResult err = pModeler->comeFromVersion(modelerVersion); if (eOk != err) { throw OdError(err); } OdBrepBuilderFillerParams::BrepType brepType = (modelerVersion & OdDgModelerGeometry::kAcisMask) ? OdBrepBuilderFillerParams::kBrepAcisDgn : OdBrepBuilderFillerParams::kBrepPS; bbFiller.params().setupFor(pDbOfBrep, brepType, pDbOfBuilder); - 您也可以手动设置拓扑格式。例如:
bbFiller.params().setupFor(OdBrepBuilderFillerParams::kBrepAcisDwg, OdBrepBuilderFillerParams::kBrepAcisDgn);您还可以通过调用 OdBrepBuilderFillerParams::set* 方法直接设置填充器的选项。需要这些选项是因为不同的 B-Rep 拓扑可以有自己的规则。
注意:setupFor 方法将填充器的选项重置为数据库转换特定的默认值。因此,您需要在所有 set* 调用之前调用 setupFor。
- 当您需要处理材质和颜色时,此变体很有用:
- 当您在同一数据库中转换 B-Rep 时,使用辅助类 OdBaseMaterialAndColorHelper 来处理材质:
OdBaseMaterialAndColorHelper materialHelper;注意:在填充器参数中提供数据库。
此外,OdBaseMaterialAndColorHelper 具有一种简单的机制,用于缓存早期创建的材质。因此,OdBaseMaterialAndColorHelper 的实例应在同一数据库对中使用。不同数据库之间的转换有些复杂。您可能需要重写 OdBaseMaterialAndColorHelper 的一些方法。
- 要初始化构建器,请使用 initFrom 方法:
OdResult err = bbFiller.initFrom(builder, brep, &materialHelper); if (eOk != err) { throw OdError(err); }