B-Repを介したソリッドとシェルの操作

ODAプラットフォームを使用すると、境界表現(B-Rep)を使用してソリッドとシェルを操作できます。ODA Drawings(.dwgおよび.dgnファイルの両方を操作する場合)、ODA PRC、およびODA BimRvには、B-Repインターフェースの個別の実装がありますが、共通クラスOdBrBrepを使用してそれらを操作できます。

B-Repは、適切なBrepBuilderの助けを借りて作成できます。ビルダーは、B-Repと同様に共通クラスOdBrepBuilderによってラップされます。

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日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す