[ブログに戻る](/ja/blog) # ODA Mechanical SDK: シンボルライブラリの使用

Dmytro Kabenok 4月 30, 2021 [\#mechanical](/ja/blog/tag/mechanical)

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

#### 概要

ODA Mechanical SDK はシンボルライブラリと連携し、頻繁に使用するシンボルをライブラリに保存し、事前に設定された値で図面に挿入できます。ライブラリからのシンボルの追加と削除に加えて、シンボルの編集や名前変更も可能です。また、シンボルライブラリをデフォルトとして設定することもできます。

以下のシンボルはシンボルライブラリをサポートしています。

- エッジシンボル
- 幾何公差記号
- 表面性状記号
- 溶接記号

シンボルライブラリにアクセスするには、以下のグローバル関数を使用します (上記のシンボルの順に記載)。

- ```
    include "AmdtEdgeLibrary.h"
    bool getAcmEdgeLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true);
    ```
- ```
    include "AmdtFCFLibrary.h"
    bool getAcmFCFLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true);
    ```
- ```
    include "AmdtSurfTextLibrary.h"
    bool getAcmSurfaceTextureLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true);
    ```
- ```
    include "AmdtWeldingLibrary.h"
    bool getAcmWeldingLibrary(OdDbObjectId& libId, OdDbDatabase* pDb, bool bCreateIfNotExist = true);
    ```

ここで、

- libId — 成功した場合に返されるシンボルライブラリのオブジェクト ID。
- pDb — データベースへのポインタ。
- bCreateIfNotExist — このフラグが true の場合、シンボルライブラリが存在しない場合は作成されます。

#### 例

フィーチャ制御フレームに基づいて新しいライブラリ オブジェクトを作成する例：

```
OdDbDatabasePtr pDb = ... // get the database

OdDbObjectId libId;
// find and get the ID of the library
if (!getAcmFCFLibrary(libId, pDb, true)) 
  return;

AmdtFCFLibraryPtr pFCFLib = AmdtFCFLibrary::cast(libId.openObject(OdDb::kForWrite));
if (pFCFLib.isNull())
  return;

// create and initialize an AcmFCF symbol for saving it to the library as a template
AcmFCFPtr pFCF = AcmFCF::createObject();
pFCF->setSymbolDefaults(pDb);
pFCF->setAllAround(true);
pFCF->setSymbol(Acm::kProfileLine);
pFCF->setSymbol2(Acm::kStraightness);

// add a new item to the library
OdDbObjectId itemId;
pFCFLib->appendItem(L"FCFSymbTemplate", pFCF, itemId, true);
```

別の方法で新しいライブラリ オブジェクトを作成する例：

```
AmdtFCFLibraryPtr pFCFLib = ... // get the library as in previous code example

// create and initialize an AcmFCF symbol for saving it to the library as a template
AcmFCFPtr pFCF = AcmFCF::createObject();
pFCF->setSymbolDefaults(pDb);
pFCF->setAllAround(true);
pFCF->setSymbol(Acm::kCylindricity);
pFCF->setValue(Acm::FCFProjectedZone, L"projectedZone");

// create and initialize AmdtFCFLibObject using settings from AcmFCF
AmdtFCFLibObjectPtr pFCFLibObj = AmdtFCFLibObject::createObject();
pFCFLibObj->set(pFCF->subSymbol(), L"FCFSymbTemplate2", L"ISO", L"AcmFCFStdISO");

// add a new item to the library
OdDbObjectId itemId;
pFCFLib->appendItem(pFCFLibObj, itemId, false);
pFCFLib->appendItem(L"FCFSymbTemplate", pFCF, itemId, true);
```

シンボル ライブラリ オブジェクトを更新する例：

```
AmdtFCFLibraryPtr pFCFLib = ... // get the library as in previous code example

// find symbol
OdDbObjectId libObjId;
if (!pFCFLib->find(L"FCFSymbTemplate", L"ISO", L"AcmFCFStdISO", libObjId, false))
  return;

AmdtFCFLibObjectPtr pFCFLibObj = AmdtFCFLibObject::cast(libObjId.openObject(OdDb::kForWrite));
if (pFCFLibObj.isNull())
  return;

// create a new AcmFCF for updating the symbol library object
AcmFCFPtr pFCF2 = AcmFCF::createObject();
pFCF2->setSymbolDefaults(pDb);
pFCF2->setAllAround(false);
pFCF2->setSymbol(Acm::kCircularity);

// update the symbol library object
pFCFLibObj->setObject(pFCF2->subSymbol());
```

ライブラリ オブジェクトに基づいて AcmFCF シンボルを作成する例：

```
OdDbObjectId libObjId = ... // get the library object ID as in previous code example

AmdtFCFLibObjectPtr pFCFLibObj = AmdtFCFLibObject::cast(libObjId.openObject(OdDb::kForWrite));
if (pFCFLibObj.isNull())
  return;

// create a new AcmFCF symbol
AcmFCFPtr pFCF = AcmFCF::createObject();
pFCF->setSymbolDefaults(pDb);

// load template settings
pFCFLib->loadItem(L"FCFSymbTemplate", pFCF);
```

シンボル ライブラリをデフォルトとして設定する例：

```
AmdtFCFLibraryPtr pFCFLib = .. // get the library as in the first code example

pFCFLib->setIsDefaultItem(L"FCFSymbTemplate", L"ISO", L"AcmFCFStdISO", true);
```

## 今すぐ始める

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

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