メカニカル構造の概要
ODA Mechanical SDKでは、複雑な図面での作業を容易にするために、ジオメトリを構造化されたエンティティにマーク付けして収集できます。
メカニカル構造は、ジオメトリをコンポーネントとしてマークし、マークされたジオメトリのコンポーネントビューを作成できるメカニズムです。ジオメトリのマークタイプに関係なく、マークされたジオメトリはBOM(部品表)に表示されます。
ジオメトリを収集およびマークする別のオプションについては、部品参照のドキュメントを参照してください。
メカニカル構造には、コンポーネントとコンポーネントビューの概念が含まれています。コンポーネントは、構造機能を提供するために作成される目に見えないエンティティです。コンポーネントビューは、ジオメトリを保持するエンティティです。コンポーネントとコンポーネントビューの両方に階層があります。
また、メカニカル構造には、定義とインスタンスの概念があります。まず、コンポーネント定義とコンポーネントビュー定義が作成され、次に定義のインスタンスが作成されます。この概念により、コンポーネントとコンポーネントビューを再利用する機能が提供されます。
メカニカル構造の基本操作
メカニカル構造に関するすべての操作は、MechanicalのMcadApiライブラリを通じて行われます。
メカニカル構造は以下の操作を提供します:
- amiCreate2dCompDef – 新しいコンポーネント定義を作成します。
- amiInstance2dComp – コンポーネント定義に基づいてコンポーネントインスタンスを作成します。
- ami2DSCreateCompViewDef – 以前に作成されたコンポーネントに基づいてコンポーネントビュー定義を作成します。
- ami2DSInstanceCompView – コンポーネントビュー定義に基づいてコンポーネントビューインスタンスを作成します。
- ami2DSInstanceAnnotationView – 注釈ビューを作成します。
- ami2DSCreateAnnotationViewLabels – 注釈ビューの注釈ビューラベルを作成します。
- ami2DSGetViewsInComp – コンポーネントに含まれるビューを取得します。
- ami2DSGetViewName – ビュー名を取得します。
- ami2DSGetCompViewOwnerDef – コンポーネントビューの所有者定義を取得します。
- ami2DSGetViewOwnerDef – ビューの所有者定義を取得します。
- ami2DSGetNextComponentDefinitionName – 指定された名前の後に続くコンポーネント定義の名前を取得します。
- ami2DSGetViewGeomExtents – ビューの幾何学的範囲を取得します。
- ami2DSGetViewDefChildren – ビュー定義の子を取得します。
- ami2DSCompDefHasComponentViewDefinition – 指定されたコンポーネント定義が特定のコンポーネントビュー定義を含むかどうかを示します。
- amiGetCompInstanceByGeom – ジオメトリによってコンポーネントインスタンスを取得します。
- amiGetMasterCompDef – マスターコンポーネント定義を取得します。
- amiGetMasterViewDef – マスタービュー定義を取得します。
- amiGetCompDef – 指定されたコンポーネントの定義を取得します。
- amiGetCompDefChildren – コンポーネント定義の子を取得します。
- amiGetCompName – コンポーネントの名前を取得します。
- amiGetCompOwner – コンポーネントの所有者を取得します。
- amiIsCompDefMaster – 指定されたコンポーネント定義がマスターコンポーネント定義であるかどうかを示します。
- amiIsCompDefFeature – コンポーネント定義がフィーチャであるかどうかを示します。
- amiIsCompDef2DAssembly – コンポーネント定義が2Dアセンブリであるかどうかを示します。
- amiIsCompDefExternal – コンポーネント定義が外部であるかどうかを示します。
- amiSetCompDefName – コンポーネント定義に新しい名前を設定します。
シンプルな機械構造の例
このセクションでは、ジオメトリを作成、マーク付け、収集し、BOMテーブルに配置する例を示します。
まず、同じ詳細の上面図と正面図のために、いくつかの基本的なジオメトリ(円と線)を作成する必要があります。
OdGeVector3d topPos(200.0, 100.0, 0.0);
OdGeVector3d frontPos(400.0, 100.0, 0.0);
OdDbCirclePtr pCircle1 = OdDbCircle::createObject();
pCircle1->setDatabaseDefaults(pDb);
pCircle1->setCenter(topPos.asPoint());
pCircle1->setRadius(50.0);
pTMModelSpace->appendOdDbEntity(pCircle1);
OdDbLinePtr pLine1 = OdDbLine::createObject();
pLine1->setDatabaseDefaults(pDb);
pLine1->setStartPoint(frontPos.asPoint() + OdGeVector3d(-50.0, .0, .0));
pLine1->setEndPoint(frontPos.asPoint() + OdGeVector3d(50.0, .0, .0));
pTMModelSpace->appendOdDbEntity(pLine1);
ジオメトリが作成されると、コンポーネントも作成およびインスタンス化できます。この例では、1つのコンポーネントと2つのアタッチされたコンポーネントビューの作成プロセスを示します。
AmiCompDefKeyPtr pCompDefKey1;
AmiCompKeyPtr pCompKey1;
amiCreate2dCompDef(pDb, pCompDefKey1, L"CIRCLE_COMPONENT");
amiInstance2dComp(pDb, pCompKey1, pCompDefKey1, AmiCompDefKeyPtr());
コンポーネントが作成されると、最初のコンポーネントビュー(上面図)も作成できます。
OdGeMatrix3d compMatrix1;
compMatrix1.setTranslation(topPos);
AmiCompViewDefKeyPtr pComp1TopDef;
AmiCompViewKeyPtr pComp1Top;
OdArray<AmiFolderKey> arrayFolders;
OdDbObjectIdArray entities;
entities.append(pCircle1->objectId());
ami2DSCreateCompViewDef(pDb,
pComp1TopDef,
pComp1Top,
pCompKey1,
entities,
arrayFolders,
compMatrix1,
AmiFolderKeyPtr(),
L"Top");
追加のコンポーネントビュー(正面図):
OdGeMatrix3d compMatrixFront;
compMatrixFront.setTranslation(frontPos);
AmiCompViewDefKeyPtr pComp1FrontDef;
AmiCompViewKeyPtr pComp1Front;
OdArray<AmiFolderKey> arrayFoldersFront;
OdDbObjectIdArray entitiesFront;
entitiesFront.append(pLine1->objectId());
ami2DSCreateCompViewDef(
pDb,
pComp1FrontDef,
pComp1Front,
pCompKey1,
entitiesFront,
arrayFoldersFront,
compMatrixFront,
AmiFolderKeyPtr(),
L"Front");
コンポーネントが完成したら、そのコンポーネントを含むBOMテーブルを作成できます。
AcmBOMManagerPtr pBomMgr = getAcmBomMgr();
OdDbObjectId bomId;
pBomMgr->createBomTable(bomId, OdDbObjectId::kNull, OD_T("MAIN"), true, pDb);
データベース辞書における新しいBOMテーブル(コンポーネント行を含む)の物理的表現:

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