[ブログに戻る](/ja/blog) # ビューの背景を操作する

Eugeniy Nikolaenko 8月 12, 2022

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

### ビューの背景の概要

ビューの背景は、ベースとなる[Visualizeグラフィカルビュー](https://docs.opendesign.com/tv/tv_working_with_base_classes_view.html)オブジェクトの機能の一部です。Visualize APIは、ビューの背景を操作するためのいくつかのクラスを提供します。

- OdTvGsViewBackgroundId — ビューの背景識別子を操作するためのクラス。
- OdTvGsViewSolidBackground - ソリッドビューの背景を操作するためのクラス。
- OdTvGsViewGradientBackground - グラデーションビューの背景を操作するためのクラス。
- OdTvGsViewImageBackground - 画像ビューの背景を操作するためのクラス。
- OdTvGsViewEnvironmentBackground - 環境ビューの背景を操作するためのクラス。
- OdTvGsViewBackgroundsIterator - ビューの背景イテレータを操作するためのクラス。
- OdTvGsViewBackgroundsIteratorPtr - ソリッドビューの背景イテレータのインスタンスへの型付きスマートポインタ。ソリッドビューの背景イテレータオブジェクトへの参照を格納および渡すために使用されます。
- OdTvGsViewSolidBackgroundPtr - ソリッドビューの背景のインスタンスへの型付きスマートポインタ。ソリッドビューの背景オブジェクトへの参照を格納および渡すために使用されます。
- OdTvGsViewGradientBackgroundPtr - グラデーションビューの背景のインスタンスへの型付きスマートポインタ。グラデーションビューの背景オブジェクトへの参照を格納および渡すために使用されます。
- OdTvGsViewEnvironmentBackgroundPtr - 環境ビューの背景のインスタンスへの型付きスマートポインタ。環境ビューの背景オブジェクトへの参照を格納および渡すために使用されます。
- OdTvGsViewImageBackgroundPtr - 画像ビューの背景のインスタンスへの型付きスマートポインタ。画像ビューの背景オブジェクトへの参照を格納および渡すために使用されます。

作成できるビューの背景には、次の3種類があります。

- ソリッド背景
- グラデーション背景
- 画像背景
- 環境背景

![background types](/files/inline-images/backgrounds_types1.png)特定のビューには、一度に1つのビュー背景のみを設定できます。

ビューの背景を作成するには:

<a name="example"></a>

1. グローバル関数 odTvGetFactory を使用してファクトリ ID を取得します。
    ```
    
    OdTvFactoryId tvFactory = odTvGetFactory();
    
    ```
2. メソッド実行の結果を格納する OdTvResult 変数を宣言します。メソッドが正常に実行された場合、OdTvResult 値は tvOk として設定または返され、それ以外の場合は適切なエラーコードが含まれます。
    ```
    
    OdTvResult rc;
    
    ```
3. ファクトリオブジェクトを使用して新しい Visualize SDK データベースを開くか作成します (コードフラグメントでは新しい空のデータベースが作成されます)。作成されたデータベースへのスマートポインタを取得します。
    ```
    
    OdTvDatabaseId databaseId = tvFactory.createDatabase(&rc);
    OdTvDatabasePtr dbPtr = databaseId.openObject(OdTv::kForWrite, &rc);
    
    ```
4. データベースに新しいデバイスを作成します。いくつかの種類のデバイスを作成できます。この例では、最も単純な種類のデバイスである非セットアップデバイスが作成されます。作成されたデバイスへのスマートポインタを取得します。
    ```
    
    OdTvGsDeviceId deviceId0 = dbPtr->createDevice(OD_T("Device0"), &rc);
    OdTvGsDevicePtr pDevice0 = deviceId0.openObject(OdTv::kForWrite, &rc);
    
    ```
5. 新しいビューオブジェクトを作成します。ビューオブジェクトは、デバイスの createView() メソッドを呼び出すことによって作成されます。データベース内で一意である必要があるビュー名を指定する必要があります。他の2つのパラメータはオプションです。ビューをファイルに保存する必要があるかどうかを指定するブール値と、メソッド実行のコードを受け入れる2番目のオプションパラメータです。メソッドが正常に終了した場合、このパラメータは `tvOk` に設定されます。このメソッドは、作成されたビューオブジェクトの識別子を返します。
    ```
    
    OdTvGsViewId viewId0 = pDevice0->createView(OD_T("View_0"), true, &rc);
    
    ```
6. 作成されたビューへのスマートポインタを取得します。
    ```
    
    OdTvGsViewPtr pView0 = viewId0.openObject(OdTv::kForWrite, &rc);
    
    ```
7. データベースにビューの背景を作成し、そのビューの背景へのスマートポインタを取得します。ビューの背景は、データベースの createBackground() メソッドで作成されます。ビューの背景を作成するときは、その名前とタイプ (OdTvGsViewBackgroundId::BackgroundTypes 列挙からの値) を指定する必要があります。また、メソッド実行の結果を保持する OdTvResult 型のオプションパラメータが1つあります。この例では、単色背景が作成されます。
    ```
    
    OdTvGsViewBackgroundId solidBackgroundId0 = dbPtr->createBackground(OD_T("SolidBackground_0"), OdTvGsViewBackgroundId::kSolid, &rc);
    OdTvGsViewSolidBackgroundPtr pSolidBackground = solidBackgroundId0.openAsSolidBackground(OdTv::kForWrite, &rc);
    
    ```

ビューの背景へのスマートポインタを取得すると、そのプロパティを管理できます。

### データベースでのビューの背景の管理

Visualize APIは、データベース内の背景との基本的な対話のためのメソッドを提供します。少なくとも1つのビュー背景が作成された後、名前で背景IDを検索したり、背景を反復処理したり、特定の背景を削除したり、すべてクリアしたりできます。次のいくつかの例は、これらのアクションを実行する方法を示しています。

```

// Searching for background ID by its name
// if background is not found, then searchedBackgroundId.isNull() returns true
OdTvGsViewBackgroundId searchedBackgroundId = dbPtr->findBackground(OdString("SolidBackground_0"));

// Retrieving background IDs with iterator and appending to an array
OdTvGsViewBackgroundsIteratorPtr pIter = dbPtr->getBackgroundsIterator(&rc);
OdArray<OdTvGsViewBackgroundId> backgroundIdsArr;
OdTvGsDeviceId bgId;

while (!pIter->done())
{
  bgId = pIter->getGsViewBackground(&rc)
  if(!bgId.isNull()) // if identifier is not NULL
  {
    backgroundIdsArr.append(bgId);
  }
  pIter->step()
}

// Removing a background by the ID
rc = dbPtr->removeBackground(searchedBackgroundId);

// Clear all backgrounds
rc = dbPtr->clearBackgrounds();

```

### 単色ビュー背景

単色背景は、特定の1色のみを表示する背景の一種です。単色背景は、その色と名前によって最も管理しやすいものです。

単色背景の色を管理するには、それぞれ色を設定および取得するためにsetColorSolid()およびgetColorSolid()メソッドを使用します。デフォルトの背景色は黒です。

![solid view background](/files/inline-images/solid.png)
```

// OdTvColorDef OdTvGsViewSolidBackground::getColorSolid(OdTvResult* rc = NULL)
OdTvColorDef solidColor = pSolidBackground->getColorSolid(&rc);

// OdTvResult OdTvGsViewSolidBackground::setColorSolid(const OdTvColorDef& color)
pSolidBackground->setColorSolid(OdTvColorDef(128, 255, 128));

```

単色ビュー背景の名前は、文字、数字、空白、アンダースコア、および一部の特殊文字を含むことができる任意の空でない文字列ですが、不適切な文字（「&lt;」、「&gt;」、「\\」、「/」、「:」、「;」、「?」、「,」、「\*」、「|」、「=」、「'」、引用符、およびUnicodeフォントで作成された一部の特殊文字）を含めることはできません。背景名を設定するにはsetName()メソッドを使用します。背景名を表す文字列を取得するにはgetName()メソッドを使用します。この機能は、他の種類の背景にも当てはまります。

```

// OdString OdTvGsViewSolidBackground::getName(OdTvResult* rc = NULL)
OdString solidBgName = pSolidBackground->getName(&rc);

// OdTvResult OdTvGsViewSolidBackground::setName(const OdString& sName)
rc = pSolidBackground->setName(OdString("SolidBG_0"));

```

### グラデーションビュー背景

グラデーション背景は、互いにブレンドする3色を表示する背景の一種です。グラデーション背景を作成するには、ここで提供されている指示に従いますが、最後のステップでcreateBackground()メソッドにOdTvGsViewBackgroundId::kSolidの代わりにOdTvGsViewBackgroundId::kGradient値を渡します。

#### グラデーション背景の色の管理

グラデーション背景は、下、中、上の3色で構成されています。デフォルトでは、3色すべてが黒です。これらの色を設定するには、OdTvGsViewGradientBackgroundインターフェースの対応するsetメソッド（例：setColorBottom()メソッド）を使用します。対応するgetメソッドで色を取得することもできます。

次の例は、これらのメソッドの使用方法を示しています。

```

// OdTvColorDef OdTvGsViewGradientBackground::getColorBottom(OdTvResult* rc = NULL) const
OdTvColorDef bottomColor = pGradientBackground->getColorBottom(&rc);

// OdTvColorDef OdTvGsViewGradientBackground::getColorMiddle(OdTvResult* rc = NULL) const
OdTvColorDef middleColor = pGradientBackground->getColorMiddle(&rc);

// OdTvColorDef OdTvGsViewGradientBackground::getColorTop(OdTvResult* rc = NULL) const
OdTvColorDef topColor = pGradientBackground->getColorTop(&rc);


// OdTvResult OdTvGsViewGradientBackground::setColorBottom(const OdTvColorDef& color)
rc = pGradientBackground->setColorBottom(OdTvColorDef(255, 0, 0));

// OdTvResult OdTvGsViewGradientBackground::setColorMiddle(const OdTvColorDef& color)
rc = pGradientBackground->setColorMiddle(OdTvColorDef(0, 0, 255));

// OdTvResult OdTvGsViewGradientBackground::setColorTop(const OdTvColorDef& color)
rc = pGradientBackground->setColorTop(OdTvColorDef(0, 255, 0));

```

#### グラデーション背景の変換プロパティの管理

グラデーション背景は、前述のように3色で構成されています。setHorizon()およびsetHeight()メソッドを使用して、色のカバレッジの比率を設定できます。ここで、ホライズンは\[0, 1\]の範囲のdouble値であり、0は0座標に対応し、1はデバイスウィンドウのx軸とy軸の両方の最大座標に対応します。たとえば、setHorizon(0.5)メソッド呼び出しは、ウィンドウの中央に中間色を配置します（回転が適用されていない場合、これがデフォルトです）。

heightパラメータは、中間色のカバレッジを制御します。たとえば、setHeight(0.1)メソッド呼び出しは、中間色がウィンドウ空間の10パーセントを占めるように設定します（デフォルトではy軸上）。

他の2色は中間色によって分離されており、そのウィンドウカバレッジは変換プロパティに依存します。たとえば、setHorizon(0.5)とsetHeight(0.001)メソッド呼び出しは、他の2色が均等に分布し、ほとんどすべてのウィンドウ空間を占めることを示しています。

![Gradient](/files/inline-images/background%20gradient.png)setRotation()メソッドを呼び出すことで、背景を回転させることもできます。このメソッドは、回転の度数を指定するdouble値を受け入れます。回転は反時計回りに測定されます。度数は予想される方法で測定されないことに注意してください。45度の角度は、ホライズンラインが点(0.0, 0.0)から点(1.0, 1.0)まで伸び、デバイスウィンドウの座標の開始と終了を表すことを意味します。

![gradient rotation](/files/inline-images/gradient%20rotation.png)変換背景プロパティの値を取得するためのgetメソッドもあります。

次の例は、背景の変換プロパティに関連するメソッドの使用方法を示しています。

```

// double OdTvGsViewGradientBackground::getHorizon(OdTvResult* rc = NULL) const
double dHorizon = pGradientBackground->getHorizon(&rc);

// double OdTvGsViewGradientBackground::getHeight(OdTvResult* rc = NULL) const
double dHeight = pGradientBackground->getHeight(&rc);

// double OdTvGsViewGradientBackground::getRotation(OdTvResult* rc = NULL) const
double dRotation = pGradientBackground->getRotation(&rc);


// OdTvResult OdTvGsViewGradientBackground::setHorizon(double dHorizon)
rc = pGradientBackground->setHorizon(0.33);

// OdTvResult OdTvGsViewGradientBackground::setHeight(double dHeight)
rc = pGradientBackground->setHeight(0.66);

// OdTvResult OdTvGsViewGradientBackground::setRotation(double dRotation)
rc = pGradientBackground->setRotation(45.0);

```

### 画像ビューの背景

画像背景は、ファイルから画像を表示する背景の一種です。画像背景は、再現しようとしているブループリントや図面のようなものの視覚的な参照が必要な場合に役立ちます。画像背景を作成するには、ここに記載されている手順に従いますが、最後のステップでcreateBackground()メソッドにOdTvGsViewBackgroundId::kSolidの代わりにOdTvGsViewBackgroundId::kImageの値を渡してください。

#### 画像背景の画像パスを管理する

画像背景を表示するには、画像を読み込むファイルパスを設定します。読み込むパスとファイル名（拡張子付き）を指定するには、setImageFilename() メソッドを使用します。画像を読み込むファイルパスは、getImageFilename() メソッドで取得することもできます。

```

// OdTvResult OdTvGsViewImageBackground::setImageFilename(const OdString& filename)
rc = pImageBackground->setImageFilename(OdString("D://example_files//ODA2.png"));

// OdString OdTvGsViewImageBackground::getImageFilename(OdTvResult* rc = NULL) const
OdString imageFileName = pImageBackground->getImageFilename(&rc);

```

#### 画像を画面に合わせる

背景画像は、表示される描画領域に直接マッピングされます。通常、背景として作成される画像は、デバイスウィンドウに完全に収まりません。スケール関連のメソッドを使用できますが、それらを非常に正確に扱う必要があり、通常、これらのメソッドで画像をデバイスウィンドウに完全に合わせることは困難です。代わりに、setFitToScreen() メソッドを使用して、画像をデバイスウィンドウに合わせて自動的にサイズ変更できます。ウィンドウに合わせる際にアスペクト比を変更しないようにしたい場合は、setMaintainAspectRatio() メソッドを使用することもできます。

![image fit](/files/inline-images/image%20fit.png)
```

// bool OdTvGsViewImageBackground::getFitToScreen(OdTvResult* rc = NULL) const
bool bFitToScreen = pImageBackground->getFitToScreen(&rc);

// OdTvResult OdTvGsViewImageBackground::setFitToScreen(bool bFitToScreen)
rc = pImageBackground->setFitToScreen(true);


// bool OdTvGsViewImageBackground::getMaintainAspectRatio(OdTvResult* rc = NULL) const
bool bKeepAspectRatio = pImageBackground->getMaintainAspectRatio(&rc);

// OdTvResult OdTvGsViewImageBackground::setMaintainAspectRatio(bool bMaintainAspectRatio)
rc = pImageBackground->setMaintainAspectRatio(true);

```

背景画像がデバイスウィンドウよりも小さいスペースを占める場合（通常、スケールが小さいか、画像自体が小さい場合）、画像をタイル表示するオプションがあります。これにより、背景がすべての方向に繰り返されます。繰り返し回数を調整するには、スケール関連のメソッドを使用し、オフセット関連のメソッドを使用してコピーの位置を微調整します。

![offset method](/files/inline-images/offset.png)
```

// bool OdTvGsViewImageBackground::getUseTiling(OdTvResult* rc = NULL) const
bool bUseTiling = pImageBackground->getUseTiling(&rc);

// OdTvResult OdTvGsViewImageBackground::setUseTiling(bool bUseTiling)
rc = pImageBackground->setUseTiling(true);

```

<a name="offset"> </a>

#### 画像背景のオフセットを管理する

デフォルトでは、画像背景は描画領域の中央に配置され、アンカーポイントは画像の中央にあります。画像背景は、X軸とY軸で個別にオフセットできます。getXOffset() および getYOffset() メソッドは、背景がオフセットされるピクセル数を返します。両方のメソッドが 0.0 の値を返す場合、背景は描画領域の中央に配置されます。setXOffset() および setYOffset() メソッドを使用すると、背景が中央からどれだけオフセットされるかを指定できます。

![offset](/files/inline-images/Image%20offset.png)
```

// double OdTvGsViewImageBackground::getXOffset(OdTvResult* rc = NULL) const
double dXOffset = pImageBackground->getXOffset(&rc);

// double OdTvGsViewImageBackground::getYOffset(OdTvResult* rc = NULL) const
double dYOffset = pImageBackground->getYOffset(&rc);

// OdTvResult OdTvGsViewImageBackground::setXOffset(double dXOffset)
rc = pImageBackground->setXOffset(0.0);

// OdTvResult OdTvGsViewImageBackground::setYOffset(double dYOffset)
rc = pImageBackground->setYOffset(200.0);

```

<a name="scale"></a>

#### 画像背景のスケールを管理する

背景画像は描画領域に収まらないことがよくあります。あるいは、小さすぎる場合もあるため、画像背景のスケールを調整する必要があるかもしれません。画像背景のスケールを調整するには、X軸とY軸それぞれに setXScale() および setYScale() メソッドを使用します。X軸とY軸の画像背景スケールを取得するには、getXScale() および getYScale() メソッドを使用します。画像背景のスケールは、両軸ともデフォルトで 1.0 です。

![image scale](/files/inline-images/image%20scale.png)
```

// double OdTvGsViewImageBackground::getXScale(OdTvResult* rc = NULL) const
double dXScale = pImageBackground->getXScale(&rc);

// double OdTvGsViewImageBackground::getYScale(OdTvResult* rc = NULL) const
double dYScale = pImageBackground->getYScale(&rc);

// OdTvResult OdTvGsViewImageBackground::setXScale(double dXScale)
rc = pImageBackground->setXScale(2.0);

// OdTvResult OdTvGsViewImageBackground::setYScale(double dYScale)
rc = pImageBackground->setYScale(2.0);

```

### 環境ビューの背景

環境背景は、静的な背景上にラスター画像があり、グラフィックスシーンにマテリアルの反射があるタイプの背景です。環境は立方体（CubeMap）または球体（SphereMap）にすることができます。

キューブマップは以下を使用して指定できます。

- 特定の .ocm ファイル（詳細については、[キューブマップの視覚化](https://docs.opendesign.com/tv/gi_raster_image_cube_maps.html) を参照）。
- ラスター画像。ラスター画像の高さは幅よりも大きく、辺の長さは均等なタイル（水平に2つ、垂直に3つ）に分割できる必要があります。ラスターが設定され、これらの条件が満たされない場合にのみ、球体マップが使用されます。

次のコードは、環境背景を作成し、このオブジェクトへのポインタを取得し、パラメータを設定する方法を示しています。OdTvDatabasePtr pDatabase は、Visualize データベースインスタンスへのポインタです。

```

OdTvResult rc;
OdTvGsViewBackgroundId backgroundId = pDatabase->createBackground("EnvironmentBackground0", OdTvGsViewBackgroundId::kEnvironment, &rc);
OdTvGsViewEnvironmentBackgroundPtr pBackground = backgroundId.openAsEnvironmentBackground(OdTv::kForWrite);
rc = pBackground->setEnvironmentImageFileName("D:\\Files\\VIS-2717\\FjaderholmarnaSphereMap.jpg");

pView->setBackground(backgroundId);

```

#### 環境背景の画像パスを管理する

画像背景を表示するには、画像を読み込むファイルパスを設定します。読み込むパスとファイル名（拡張子付き）を指定するには、OdTvGsViewEnvironmentBackground::setEnvironmentImageFileName メソッドを使用します。画像を読み込むファイルパスは、OdTvGsViewEnvironmentBackground::getEnvironmentImageFileName メソッドを使用して取得することもできます。

```

// OdTvResult OdTvGsViewEnvironmentBackground::setEnvironmentImageFileName(const OdString& sFileName)
rc = pBackground->setEnvironmentImageFileName("D:\\Files\\VIS-2717\\FjaderholmarnaSphereMap.jpg");

// OdString OdTvGsViewEnvironmentBackground::getEnvironmentImageFileName(OdTvResult* rc = NULL) const
OdString environmentFileName = pBackground->getEnvironmentImageFileName(&rc);
```

環境画像が設定されている場合、レンダラーは背景を表示できます。

#### 環境の経度と緯度を管理する

環境背景画像は両軸を中心に回転させることができます。背景の経度と緯度を設定するには、OdTvGsViewEnvironmentBackground::setLongitude および OdTvGsViewEnvironmentBackground::setLatitude メソッドを使用します。OdTvGsViewEnvironmentBackground クラスには、これらのパラメータを取得するためのゲッターもあります。これらのパラメータの範囲は無限ですが、表示される結果は \[-OdaPi .. +OdaPi\] の範囲内です。ここで、-OdaPi は一方向への180度回転、0 は回転なし、+OdaPi はもう一方向への180度回転を意味します。デフォルトでは、経度と緯度は0に設定されています。

```

// OdTvResult OdTvGsViewEnvironmentBackground::setLatitude(double dLatitude)
rc = pBackground->setLatitude(OdaPI2);

// OdTvResult OdTvGsViewEnvironmentBackground::setLongitude(double dLongitude)
rc = pBackground->setLongitude(OdaPI4);

```

| デフォルト | ![default](/files/inline-images/tv_view_background_env_default.png) |
| :---: | :---: |
| 経度 = 0.2 rad | ![longtitude](/files/inline-images/background%20longitude_02.png) |
| 緯度 = 0.2 rad | ![latitude](/files/inline-images/background%20latitude_02.png) |

詳細については、[ODA ドキュメント](https://docs.opendesign.com/tv/tv_working_with_attributes_view_backgrounds.html)を参照してください。

## 今すぐ始める

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

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