部品表は、すべての部品とコンポーネントを対応するデータと属性とともに保持するテーブルです。論理表現は非常に理解しやすいですが、BOMテーブルの物理データモデルは、コンポーネント、部品、データコンテナを含む複雑な概念です。
メカニカル辞書
Teigha Mechanicalに関連するすべての共通データは、いくつかの辞書、特にAcmDictionaryに格納されています。
データベース内のAcmDictionary
AcmDictionaryは、部品表に関連するデータ(AcmBOM辞書とAcmDataDictionary)を保持します。また、この辞書には、標準辞書などの共通データも含まれています。
BOM辞書
メカニカルデータ辞書
もう1つの重要な辞書はAcmBOMDATA辞書です。この辞書はAcmDataDictionaryに関連しています。基本的に、AcmBOMDATAはBOM行とBOMテーブルのデータコンテナを保持します。
データコンテナは、DataEntry、DataEntryPart、またはDataEntryBlockのいずれかのタイプにすることができます。AcmDataDictionaryクラスはBOMデータを処理し、次のように動作します。
OdResult append(AcmDataEntryPtr pDataEntry, OdDbObjectId& newObjId);
OdResult createDataEntryFor(AcmBomPtr& pBom, const OdDbObjectId& targetId, OdDbObjectId& objId);
OdResult createDataEntryFor2DCompDef(const OdDbObjectId& targetId, OdDbObjectId& objId);
OdResult createDataEntryFor(const OdDbBlockTableRecordPtr& pBlockTableRecord, OdDbObjectId& objId);
OdResult getDataEntryByCompDefId(const OdDbObjectId& compDefId, OdDbObjectId& dataEntryId) const;
- append(AcmDataEntryPtr pDataEntry, OdDbObjectId& newObjId) — 既存の辞書に新しいデータエントリコンテナを追加します。
- createDataEntryFor() — このメソッド群は新しいデータエントリコンテナを作成します。
- getDataEntryByCompDefId(const OdDbObjectId& compDefId, OdDbObjectId& dataEntryId) — コンポーネント定義オブジェクトのデータエントリコンテナを返します。
BOMData辞書とDataEntries
DbInfoサービス クラス
AcadmDbInfoは、AcmDataDictionaryと連携するサービス クラスです。このサービス クラスは、Teigha Mechanical辞書をより簡単に操作できるように設計されています。
OdDbObjectId acmDictionaryId();
OdDbObjectId bomDictionaryId();
OdDbObjectId dataDictionaryId();
OdDbObjectId createBomDictionary();
- acmDictionaryId() — 現在のデータベースのAcmDictionary OdDbObjectIdを返します。
- bomDictionaryId() — 現在のデータベースのAcmBOM OdDbObjectIdを返します。
- dataDictionaryId() — 現在のデータベースのAcmBOMDATA OdDbObjectIdを返します。
- createBomDictionary() — 現在のデータベースにAcmBOM辞書がない場合、新しいAcmBOM辞書を作成します。
BOMオブジェクト
AcmBomクラスは、部品表テーブルオブジェクトを表します。AcmBomオブジェクトは、BOMテーブルに適したデータと、BOM項目を表すBOM行を含むデータエントリコンテナを保持します。
OdString name() const;
OdDbHardPointerId dataEntryId() const;
void setDataEntryId(OdDbHardPointerId objId);
void setName(OdString name);
bool isExpandedBOM() const;
OdInt16 itemNumberStep() const;
OdString itemNumberStart() const;
void setItemNumberStart(const OdString& itemNumberStart);
void setItemNumberStep(OdInt16 itemNumberStep);
- dataEntryId() — BOMテーブルのデータコンテナを返します。
- setDataEntryId(OdDbHardPointerId objId) — BOMテーブルのデータコンテナを設定します。
- name() — BOMテーブルの名前を返します。
- setName(OdString name) — BOMテーブルの名前を設定します。
- isExpandedBOM() — BOMが展開されている場合はtrue、構造化されている場合はfalseを返します。
- itemNumberStep() — BOMテーブルの項目属性の番号ステップを返します。
- itemNumberStart() — BOMテーブルの属性の最初の番号を返します。
- setItemNumberStart(const OdString& itemNumberStart) — BOMテーブルの項目番号ステップを設定します。
- setItemNumberStep(OdInt16 itemNumberStep) — BOMテーブルの最初の番号を設定します。
BOM行
AcmBomRowクラスはBOMテーブルの項目を表します。BomRowはデータコンテナも保持します。
OdString getItemName() const;
OdDbHardPointerId getDataEntryId() const;
virtual bool isVisible() const;
bool isToExpand() const;
OdInt32 getSortPriority();
void setSortPriority(OdInt32 priority);
- getItemName() — 項目名を返します。
- getDataEntryId() — データコンテナを返します。
- isVisible() — 項目が表示されている場合にtrueを返します。
- isToExpand() — 項目が展開されたBOM内にある場合にtrueを返します。
- getSortPriority() — ソート優先度を返します。
- setSortPriority(OdInt32 priority) — 項目のソート優先度を設定します。
BomRowとBom
結論
部品表(Bill Of Materials)は、BOM項目(行)のサブセットとデータコンテナ(データエントリ)を持つ辞書のセットです。行とエントリは互いに接続されており、行はコンポーネントに接続されています。