[ブログに戻る](/ja/blog) # Teigha MechanicalにおけるAmdtSystemAttributeの概要

Andrii Morozov 8月 17, 2017 [\#mechanical](/ja/blog/tag/mechanical) [\#getting started](/ja/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

BOM (部品表) マネージャーは、BOM テーブル、部品参照、BOM 行を操作するサービス クラスです。BOM テーブルが保持するすべてのデータは、データ エントリと呼ばれるデータ コンテナに格納されます。データ エントリには、DataEntry、DataEntryPart、DataEntryBlock の 3 種類があります。DataEntryPart は部品参照に接続され、DataEntryBlock はコンポーネントに接続されます。

DataEntryPart は DataEntryBlock とは異なる方法でデータを格納します。BOM マネージャーには、BOM テーブル データへのアクセスを提供する一連のメソッドがあります。たとえば、次のとおりです。

- getItemData は BOM 行のデータを取得します。
- getPartData は部品参照のデータを取得します。

BOM マネージャーのメソッドを使用すると、DataEntryPart にアタッチされた属性と DataEntryBlock にアタッチされたデータの両方を取得できます。DataEntryPart はデータをプレーンなデータ配列に保持しますが、DataEntryBlock は異なるアプローチをとります。

#### DataEntryBlock の構造的特徴

OdaMfcApp (AcDbDictionary -&gt; AcmBOM) のいくつかの BOM テーブルと BOM 行 (AcmBom -&gt; AcmBomRow) を見てみましょう。

![image1](/files/inline-images/image001_8.png)BOM 行のリストと選択された行

ここに BomRow エントリ プロパティの一部を示します。左側は DataEntryBlock にアタッチされた BOM 行で、右側は DataEntryPart にアタッチされた BOM 行です。基本的に、DataEntryBlock にアタッチされた (BOM 行を介した) コンポーネントまたは部品の属性 (プロパティ) は、コンポーネント定義オブジェクトを介して DataEntry オブジェクトに暗黙的に接続されている特殊なオブジェクトである AmdtSystemAttribute オブジェクトに格納されます。

![image2](/files/inline-images/image002_2.png)BOM 行のプロパティ

DataEntryPart はデータをプレーンなデータ シーケンス (配列) に格納します。DataEntryBlock データは、コンポーネント定義 (CompDef) オブジェクトに強く依存します。以下の DataEntryBlock プロパティは次のようになります。

![image3](/files/inline-images/image003_3.png)DataEntryBlock プロパティ セット

DataEntryBlock は、AcAmCompDef (コンポーネント定義) への SoftPointer とコンポーネント名を保持します。DataEntryBlock は、コンポーネント定義オブジェクトと対話してその属性を取得します。

#### AmdtSystemAttributes の概要

AcAmCompDef は、コンポーネント全体を記述するコンポーネント定義オブジェクトです。選択されたコンポーネントのコンポーネント オブジェクト、コンポーネント名、およびビュー定義オブジェクトを保持します。Teigha Mechanical の構造では、コンポーネント定義オブジェクトは AmdtSystemAttribute オブジェクトと DataEntryBlock オブジェクト間の結合要素です。すべての AmdtSystemAttribute オブジェクトには、AcRfMCADAPIAttHolder という 1 つのグローバル ホルダーがあります。

![image4](/files/inline-images/image004_2.png)AcRfMCADAPIAttHolder の内容

AcRfMCADAPIAttHolder は、AmdtSystemAttribute オブジェクトへの HardPointer のセットを持つ単なるホルダーであり、AcRfMCADAPIAttHolder は何もバインドしません。バインドには AcRfObjAttGroupMgr オブジェクトがあります。AcRfObjAttGroupMgr は、AmdtSystemAttribute のセットとコンポーネント定義オブジェクト (AcAmCompDef オブジェクト) を結合します。

![image5](/files/inline-images/image005_1.png)AcRfObjAttGroupMgr の内容

AcRfObjAttGroupMgr オブジェクトがグローバルな AcRfAttGeneralMgr に集約されていることを知っておくと便利です。

![image6](/files/inline-images/image006_0.png)AcRfAttGeneralMgr の内容

AmdtSystemAttribute は、すべての Teigha Mechanical 構造における属性データを保持する最終的なアトミックデータセルです。AmdtSystemAttribute オブジェクトは、属性名と属性データを Unicode 形式で保持します。

![image7](/files/inline-images/image007_1.png)AmdtSystemAttribute の内容

#### コード例

AmdtSystemAttribute の値を取得する:

```
OdString AmdtSystemAttribute::getString() const;

```

AmdtSystemAttribute 配列を取得する:

```
OdDbObjectIdArray AcRfObjAttGroupMgr::getSystemAttribIdArray() const;

```

AcMeScope で AcRfMCADAPIAttHolder を取得する:

```
void AcRfMCADAPIAttHolder::getHolderFromScope(const AcMeScope* pScope, OdDbObjectId& objectId) const;

```

AcMeScope で AcRfAttGeneralMgr を取得する:

```
AcRfAttGeneralMgrPtr AcRfAttGeneralMgr::getManagerFromScope(const AcMeScope* pScope) const;

```

#### 結論

BOM マネージャーは、部品データとコンポーネントデータを操作できるサービスです。ほとんどのデータはデータエントリに保存されます。Teigha Mechanical 構造は、DataEntryPart エントリがそれ自体の中にデータを保存し、DataEntryBlock エントリがデータエントリと暗黙的に接続されている他のオブジェクトにデータを保存するように編成されています。AmdtSystemAttributes を使用すると、属性値を便利な方法で保存できます。

## 今すぐ始める

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

[無料で試す](https://www.opendesign.com/ja/free-trial)
