通过 B-Rep 处理实体和壳

借助 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:

  1. 添加包含头文件:
    #include "BrepBuilderFillerModule.h""
    
  2. 使用宿主应用程序服务实例的 brepBuilder 方法设置 OdBrepBuilder 的实现。例如:
    OdDbHostAppServices* pHostApp;
    …
    OdBrepBuilder builder;
    OdResult err = pHostApp->brepBuilder(builder, kOpenShell);
    if (eOk != err)
    {
      throw OdError(err);
    }
    
  3. 初始化一个 B-Rep。例如:
    OdDbSurface* pSurf;
    …
    OdBrBrep brep;
    pSurf->brep(brep);
    
  4. 创建 OdBrepBuilderFiller:
    OdBrepBuilderFiller bbFiller;
    

    注意:填充器存储构建器引用的几何体。因此,当您调用 builder.finish() 时,填充器应该存在。

  5. 初始化填充器参数,这可以通过不同的方式完成:
    • 当您需要处理材质和颜色时,此变体很有用:
      bbFiller.params().setupFor(pDbOfBrep, pDbOfBuilder);
      setupFor 参数根据每个数据库(DGN 除外)确定源和目标 B-Rep 的拓扑格式。
    • 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。

  6. 当您在同一数据库中转换 B-Rep 时,使用辅助类 OdBaseMaterialAndColorHelper 来处理材质:
    OdBaseMaterialAndColorHelper materialHelper;
    

    注意:在填充器参数中提供数据库。

    此外,OdBaseMaterialAndColorHelper 具有一种简单的机制,用于缓存早期创建的材质。因此,OdBaseMaterialAndColorHelper 的实例应在同一数据库对中使用。不同数据库之间的转换有些复杂。您可能需要重写 OdBaseMaterialAndColorHelper 的一些方法。

  7. 要初始化构建器,请使用 initFrom 方法:
    OdResult err = bbFiller.initFrom(builder, brep, &materialHelper);
    if (eOk != err)
    {
      throw OdError(err);
    }
    

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用