STEP SDK: DOMAIN_MODELアセンブリファイルを作成する

場合によっては、詳細なジオメトリ記述を個別のファイルに持ち、それらを変換と組み合わせて最終製品を構築することが有用です。AP242アプリケーションプロトコルのDOMAIN_MODELの大部分は、アセンブリファイルをサポートしています。アセンブリファイルは、部品を含むSTEPファイルや他のアセンブリファイルへのリンクを持つことができます。

新しいアセンブリファイルの作成と入力
 

新しいアセンブリファイルを作成するには、StepCoreToolsモジュールのOdStpXModelFillerクラスを、DOMAIN_MODELスキーマ用の空のOdDAI::Modelとともに使用します。


  OdAnsiString workDirSchema("./Schemas/"); // Your path to .exp file
  OdDAI::SchemaPtr tutorialSchema = oddaiGetSchema(workDirSchema + "DomainModel.exp");
  if (!tutorialSchema.isNull())
  {
    OdDAI::RepositoryPtr repo = session->createRepo("StpX_Repo");
    session->openRepo(repo);

    OdDAI::ModelPtr tutorialModel = repo->createModel("Tutorial_07_Model", tutorialSchema);
    if (!tutorialModel.isNull())
    {
      tutorialModel->promoteModelToReadWrite();
      OdStpXModelFillerPtr pStpXFiller = OdStpXModelFiller::createObject(tutorialModel);

      if (pStpXFiller.isNull())
      {
        return eCreateFailed;
      }
      …
    }
  }  

モデルを埋めるには、低レベルのODA SDAI呼び出しのシーケンスを使用できますが、OdStpXModelFiller(SDAIの高レベルラッパー)を使用すると、完全なモデルを作成するために必要なコード量を大幅に削減できます。各コマンドはモデルに新しいインスタンスを追加し、作成されたクラスインスタンスのOdDAI::ApplicationInstanceへのスマートポインタを返します。

たとえば、ベースモデルのグローバルインスタンスを作成するには:


OdDAI::ApplicationInstancePtr pClass = pStpXFiller->createClass("exchange identification information");
OdDAI::ApplicationInstancePtr pOrganization = pStpXFiller->createOrganization("www.opendesign.com", "Open Design Alliance", OdAnsiStringArray().insertAt(0, "company"));
OdDAI::ApplicationInstancePtr pUnit = pStpXFiller->createUnit("metre", "SI system", "milli");
OdDAI::ApplicationInstancePtr pExchangeContext = pStpXFiller->createExchangeContext("AP242 BO Model XML Assembly Structure exchange", OdAnsiStringArray().insertAt(0, "en"), pUnit->id(), pOrganization->id());
OdDAI::ApplicationInstancePtr pViewContext = pStpXFiller->createViewContext("mechanical design", "design");
OdDAI::ApplicationInstancePtr pFormatProperty = pStpXFiller->createFormatProperty("ISO 8859-1", "ISO 10303-242 BO Model XML");

モデルに部品を追加する
 

DOMAIN_MODELスキーマは、部品などの工業製品を管理し、そのデータ交換には少なくとも1つのPartタイプの要素が含まれます。

次のコード例は、新しいPartインスタンスをモデルに追加する方法を示しています。


OdDAI::ApplicationInstancePtr pIdentifierRoot = pStpXFiller->createIdentifier("Tutorial_07", pClass->id(), pOrganization->id());
OdDAI::ApplicationInstancePtr pAssemblyDefinitionRoot = pStpXFiller->createAssemblyDefinition(pViewContext->id());

OdDAIObjectIds rootViewsIds;
rootViewsIds.push_back(pAssemblyDefinitionRoot->id());
OdDAI::ApplicationInstancePtr pPartVersionRoot = pStpXFiller->createPartVersion("/NULL", rootViewsIds);

OdDAIObjectIds rootPartVersionsIds;
rootPartVersionsIds.push_back(pPartVersionRoot->id());
OdDAI::ApplicationInstancePtr pPartRoot = pStpXFiller->createPart(pIdentifierRoot->id(), "Tutorial_07", "assembly", rootPartVersionsIds);

3D空間で各出現を配置するには、SingleOccurrenceを使用する必要があります。単一レベルまたは複数レベルのアセンブリ構造で同じコンポーネント部品が複数回使用される場合、コンポーネントの各使用に対してSingleOccurrenceの個別のインスタンスが作成されます。一部のPDMシステムでは、アセンブリ部品のNextAssemblyOccurrenceUsageによって参照されるSingleOccurrenceの各インスタンスは一意のIDを持ちます。それらはすべてコンポーネント部品のPartViewまたはAssemblyDefinitionの下で定義され、NextAssemblyOccurrenceUsageを介して一度だけ参照されます。

作成された2つの部品のPartView間で変換操作を行うには:


OdDAI::ApplicationInstancePtr pIdentifierRoot = pStpXFiller->createIdentifier("Tutorial_07", pClass->id(), pOrganization->id());
OdDAI::ApplicationInstancePtr pAssemblyDefinitionRoot = pStpXFiller->createAssemblyDefinition(pViewContext->id());

OdDAIObjectIds rootViewsIds;
rootViewsIds.push_back(pAssemblyDefinitionRoot->id());
OdDAI::ApplicationInstancePtr pPartVersionRoot = pStpXFiller->createPartVersion("/NULL", rootViewsIds);

OdDAIObjectIds rootPartVersionsIds;
rootPartVersionsIds.push_back(pPartVersionRoot->id());
OdDAI::ApplicationInstancePtr pPartRoot = pStpXFiller->createPart(pIdentifierRoot->id(), "Tutorial_07", "assembly", rootPartVersionsIds);

ドキュメントを部品に関連付ける

ドキュメントは、ドキュメントと製品データの他の要素との関係を表すドキュメント割り当てを使用して、特定の役割で部品インスタンスに関連付けることができます。この関連付けには、ドキュメントまたはファイルの適用可能な部分のみを指定するための制約を指定できます。部品のジオメトリを含むファイルには、ドキュメント割り当ての役割値が必要です。

次のコード例は、ドキュメント割り当てを作成し、それを部品のDigitalFileインスタンスに関連付ける方法を示しています。


OdDAI::ApplicationInstancePtr pDigitalFileIdentifier = pStpXFiller->createIdentifier(pAssemblyFile->fileName, pClass->id(), pOrganization->id());
OdDAI::ApplicationInstancePtr pDigitalFile = pStpXFiller->createDigitalFile(pDigitalFileIdentifier->id(), pFormatProperty->id(), "File name");
OdDAI::ApplicationInstancePtr pDocumentAssignment = pStpXFiller->createDocumentAssignment("mandatory", pDigitalFile->id(), pPartView->id());

構造を埋める

補助構造を使用して、必要な構造を簡単に埋めることができます。たとえば、次の構造セットは、オブジェクトとファイル間の関係を指定するのに役立ちます。AssemblyPart構造は、変換行列を持つネストされたPartsインスタンスの配列を格納します。各ネストされた部品は、ネストされたPartsインスタンスの別の配列を持つか、ジオメトリを含むファイルに関連付けられます。

struct AssemblyBase
{
  virtual ~AssemblyBase() {}
};
struct AssemblyFile : AssemblyBase
{
  AssemblyFile(const OdAnsiString& name) : fileName(name) {}
  OdAnsiString fileName;
};
struct AssemblyPart : AssemblyBase
{
  OdArray<std::pair<AssemblyBase*, OdGeMatrix3d> > assemblies;
};

アセンブリファイルは、部品インスタンス間の参照を持つ構成である必要があります。ルート部品はネストされた部品を参照し、ネストされた部品は他のネストされた部品を参照したり、ジオメトリファイルとの関係を持ったりすることができます。

DOMAIN_MODELアセンブリファイルの作成例については、ExStepTutorialsサンプルモジュールのチュートリアル7を参照してください。チュートリアルで生成されたファイルは、Open Step Viewerで開くことができます。

詳細については、当社のドキュメントをご覧ください。

今すぐ始める

ODAソフトウェアを60日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す