[ブログに戻る](/ja/blog) # Teigha Visualizeでマークアップ (赤線) を使用する方法

Vlad Malka 5月 24, 2018 [\#Visualize](/ja/blog/tag/visualize) [\#getting started](/ja/blog/tag/getting-started) [\#Example](/ja/blog/tag/example)

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

Teigha Visualizeは、ファイルのレビューと編集に役立つ機能、特にマークアップ (赤線) の作成と保存をサポートしています。以下に、マークアップを含む図面の例をいくつか示します:

![image1](/files/inline-images/image002_13.jpg)![image2](/files/inline-images/image004_6.jpg)![image3](/files/inline-images/image006_3.jpg)Teigha Visualize Viewerのサンプルで、ご自身で試すことができます。メインウィンドウのマークアップツールバーを使用して、さまざまな種類のマークアップを作成します:

- 矩形マークアップ — 矩形マークアップを描画します;
- 円マークアップ — 円マークアップを描画します;
- ハンドルマークアップ — フリーハンドルのマークアップを描画します
- 雲マークアップ — 雲マークアップを描画します;
- テキストマークアップ — テキストマークアップを描画します。

![image4](/files/inline-images/image007_4.png)次に、マークアップビューを保存およびロードするための2つのツールを使用します:

- ビューを保存 — 描画したマークアップを含む現在のビューを保存します;
- ビューをロード — マークアップを含むビューをロードします。

描画したマークアップを保存するには:

1. 保存をクリックします; ![image5](/files/inline-images/image009_3.png)
2. 保存するマークアップビューの名前を入力します。

仕組みは次のとおりです:

保存されたマークアップは、ビューのパラメータ (位置、ターゲット、upVector、fieldWidth、fieldHeight、投影タイプ、レンダリングモード) を含む構造を使用します。「保存」ボタンが押されると、これらのパラメータがビューから受け取られます。その後、構造は入力された名前の新しいエンティティにバイナリデータを書き込みます。

```
// create and append the binary data to the entity
OdTvByteUserData *data = new OdTvByteUserData(params, sizeof(struct SaveViewParams), OdTvByteUserData::kOwn, true);
      pEn->appendUserData(data, m_appTvId);

```

マークアップを含む保存されたビューをロードするには:

1. ロードをクリックします; ![image6](/files/inline-images/image010_0.png)
2. ロードするビューを選択し、「ロード」をクリックします。(選択したマークアップビューを削除するには、「削除」をクリックすることもできます。)

仕組みは次のとおりです:

「ロード」ボタンが押されると、まず選択された名前のエンティティからバイナリデータが読み取られ、次にそのデータが現在のビューに適用され、最後にエンティティの可視性がオンになります。

#### 実装の詳細

マークアップの実装構造の図を以下に示します:

![image7](/files/inline-images/image012.jpg)データベースには異なるモデルが保存されており、そのうちの1つがマークアップエンティティを保存します。このモデルの名前は「$ODA\_TVVIEWER\_MARKUPS」です。このモデルは、マークアップが描画されたときにのみ作成されます。オブジェクトツリーでは、このモデルは「サービスモデル」内にあります。このモデルが存在するかどうかを常に確認してください。

```
if (m_TvMarkupsModelId.isNull())
{
  m_TvMarkupsModelId = m_TvDatabaseId.openObject(OdTv::kForWrite)
    ->createModel(OD_TV_MARKUP_MODEL, OdTvModel::kDirect);

  m_TvMarkupsModelId.openObject()->setNeedSaveInFile(true);
}

```

マークアップの作成が開始されると、一時エンティティ「$MarkupTempEntity」が作成されます。ここでは、すべての名前が適切な名前のマクロで宣言されます。次回のマークアップ作成はこのエンティティに書き込まれます。このエンティティは、ほとんどすべてのアクション（パン、オービット、ズームなど）で破棄されます。また、モデルには保存された他のエンティティが含まれていますが、マークアップは保存されず、一時エンティティでの作業が続行されます。次の図は、マークアップエンティティの構造を示しています。

![image8](/files/inline-images/image014_0.jpg)どのマークアップエンティティも、わずか5つのサブエンティティを持っています。各サブエンティティは、特殊なタイプのマークアップ用のフォルダーです。

- 長方形マークアップ — サブエンティティ「Rectangles」;
- 円マークアップ — サブエンティティ「Circles」;
- フリーハンドルマークアップ — サブエンティティ「Free handles」;
- クラウドマークアップ — サブエンティティ「Clouds」;
- テキストマークアップ — サブエンティティ「Texts」。

各マークアップのコンストラクタは一時エンティティを検索し、見つからない場合は、マークアップタイプ用のフォルダーに従って新しい一時エンティティを作成します。

```
// create main entity if not exist
OdTvModelPtr modelPtr = m_tvDraggersModelId.openObject(OdTv::kForWrite);
m_entityId = findEntityByName(modelPtr->getEntitiesIterator(), OD_TV_MARKUP_TEMP_ENTITY, false);
if (m_entityId.isNull())
{
  m_entityId = modelPtr->appendEntity(OD_TV_MARKUP_TEMP_ENTITY);
  m_entityId.openObject(OdTv::kForWrite)->setColor(OdTvColorDef(255, 0, 0));
}

// crate rectangles subEntity if not exist
m_rectFoldEntityId = findSubEntityByName(m_entityId.openObject()->getGeometryDataIterator(), OD_TV_MARKUP_RECTANGLES);
if (m_rectFoldEntityId.isNull())
  m_rectFoldEntityId = m_entityId.openObject(OdTv::kForWrite)->appendSubEntity(OD_TV_MARKUP_RECTANGLES);

```

マークアップフォルダーには、適切なジオメトリデータを持つサブエンティティが含まれています。ジオメトリデータを持つサブエンティティは、オブジェクト作成フラグがtrueの場合にupdateFrame()メソッドを使用して作成されます。

```
//update or create entity
if (bCreate)
{
  m_rectEntityId = m_rectFoldEntityId.openAsSubEntity(OdTv::kForWrite)->appendSubEntity();
  {
    OdTvEntityPtr entityNewPtr = m_rectEntityId.openAsSubEntity(OdTv::kForWrite);
    //create frame
    m_frameId = entityNewPtr->appendPolygon(m_pts);
  }
}

```

## 今すぐ始める

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

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