【iRIC v4】カラーマップ設定を使いこなそう

# はじめに
iRICのバージョンがv4になり、計算結果の可視化機能が大幅に強化されました。

この記事ではそのなかでもいくつかのカラーマップ機能について整理してみました。
カラーマップについてのマニュアルはこちらです。

https://iric-gui-user-manual.readthedocs.io/ja/v4_jp/02/04_color_function.html

# 概要

カラーマップ設定でまずユーザーがv3とv4で違いを感じるのは設定のダイアログだと思います。
比較してみるとv4ではv3から項目が増えたり、違うダイアログを開いて設定していた項目をひとつにまとめたのでとても大きくなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/03707310-55fc-939e-ebe2-9a6af1853a88.png)


項目が増えて難しく感じるかもしれませんが以前よりも感覚的に操作できるようになっています。
左側がカラーマップの表示に関する設定項目で、右側は凡例に関する項目です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/b04df42a-71ce-841e-28ee-7024275a472b.png)


# カラーマップの表示に関する設定（実数のスカラーの場合）

### 値と色の関係

`表示色`に表示されている`値と色の組み合わせ`の値についての項目です。

`値の範囲に合わせて自動調整`を選択すると、`値の範囲`で指定した範囲に合わせて`表示色`に表示されている`値の組み合わせ`の値が変化します。
この時、`値と色の組み合わせ`同士の値の間隔の比は維持されたままとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/2f58074f-f747-cfa0-4dc5-b4d20c8399da.png)


`手動で設定`を選択すると`表示色`の`値と色の組み合わせ`の値を直接好きな値に編集することができます。(値の範囲の項目は消えます。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/1c8bfae2-af7f-55b6-9830-3c6153623cc2.png)


:::note
一度、手動で値を設定して色と色の間隔を調整し、`値の範囲に合わせて自動調整`を選択することで間隔を維持したまま値の範囲を変更することができます。
これによって特定の値の区間の色の変化の密度を調整できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/299bec85-4058-4b89-331a-45ccea091cfd.png)
:::

### 値の範囲

`値の範囲`では`値と色の関係`で`値の範囲に合わせて自動調整`を選択している際に最大値最小値を指定できます。
`自動`にチェックを入れると各タイムステップの計算結果の最大値最小値を指定することができます。

各タイムステップの計算結果の最小値最大値に関係なく一定の範囲を指定したい場合は`自動`のチェックボックスを外します。

**値の範囲自動**
![image_02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/5a4571e6-3d5a-697a-d2fc-f9263dc3d2f7.gif)
**値の範囲固定**
![image_03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/871b996b-30da-eb0f-f165-ebe27dbf9c89.gif)



### 表示色

`表示色`の項目でカラーマップを構成する色の変化点と値を設定できます。

v3ではデフォルトで選択できるカラーマップはレインボーと白黒の2パターンのみで、手動で設定できるカラーマップも色が3色までしか選択できませんでした。
v4ではデフォルトで使用できるカラーマップが増えたとともに、ユーザーが手動で簡単にカラーマップを設定できるようになっています。

![2023-07-24_15h51_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/c5b81a2d-74c8-e6ad-c25b-8205f00e0048.png)


実際にカラーマップを編集してみましょう。デフォルトでは以下のようなカラーマップ設定になっていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/80fbc6dc-9182-00c3-29f2-bba098f2827d.png)

### 表示色の追加

v3では3色しか独自のカラーマップ設定で使用できませんでしたが、v4ではこの時点で5色も設定できています。ではこれに更に色を追加してみましょう。

`表示色`に表示されている`値と色の組み合わせ`のどれかを選択して`追加`をクリックすると新たな`値と色の組み合わせ`を追加することができます。
![image_01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/0edb7724-f9e9-a746-abbe-e80f01741591.gif)

::: note
追加される組み合わせは、`追加`を押した際に選択されていた組み合わせの下に挿入され、色と値は挿入された位置の上下の組み合わせで使用されている色と値を按分したものが使用されます。
:::

### 表示色の削除
追加の時と同様に`値と色の組み合わせ`を選択し、`削除`を押すと選択した`値と色の組み合わせ`を削除することができます。
shiftまたはctrlキーを押しながら選択することで、複数の組み合わせ削除することも可能です。(複数選択は連続した組み合わせのみ可能です。飛び石のように選択することは現在はできません。）

![image_04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/6273ff6a-17cb-87a7-b0b5-9a614e8b3440.gif)

### 色の反転

`色の反転`を押すと色の並びが反転します。
![image_05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/55140f25-c6cd-35b4-794e-83d4e5727eef.gif)

### 均等割

色の変化点の間隔を最大値と最小値の間で等間隔にします。
![image_06.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/cc36dfec-566e-bbfd-0dc1-79e6d2bf6538.gif)

### 色数の変更

`色数の変更`をクリックするとダイアログが現れ、表示色の数を変更できます。色数を増やした際には既存の色と色の間に按分された色が新しく追加されます。

![image_11.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/84b4dd9d-68a4-bd47-7315-758c4d2075ba.gif)


### 色の変更

`値と色の組み合わせ`の`色`の列のセルをクリックすると、色選択のダイアログが現れ、色の変更が行えます。
色は基本カラー48色から選択できるほか、カラーピッカーを使用して色を指定することができます。

![image_07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/fa29dccc-936f-be62-3366-ca74a6e07339.gif)

### 最小値以下/最大値以上を描画

`最小値以下を描画`、`最大値以上`を描画のチェックボックスを外すと、`表示色`で設定されている最大値、最小値の範囲外を描画しません。チェックを入れている場合、範囲外の数値は最大値または最小値と同じ色で描写されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/68cc2d4f-d4a2-4821-d420-6560ed829a0b.png)

### 区間別モード
`区間別モードに切り替え`を押すと以下のようなダイアログが表示され、値の区間と対応する色を設定することでグラデーションではなく区間別に色を表示するコンターで表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/2f0aa84e-016b-2de8-8def-ff617774e665.png)

上記のダイアログでは`色の数`と`値の範囲`を指定することで最大値最小値の範囲内を当分割するような区間の値を自動で設定することができます。
区間の色については`区間別モードに切り替え`を押す際の`表示色`で設定されていた色から作成されたグラデーションを等分割した際の色が適用されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/45364f3c-1073-6e33-dc13-776ad96259a5.png)

指定した色の数で値の範囲を分割する際に小数点以下の値が長いまたは割り切れない値の場合は`オプション`の`小数点以下の桁数`を指定することで四捨五入することができます。

`ログスケール`にチェックを入れると以下のように区間ごとの値をログスケールで設定することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/ec14e160-8401-b51e-b533-2a5fb07bfabb.png)

OKを押して区間別モードに切り替わると設定画面は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/057fb590-91d6-d804-f636-d86f43f519ec.png)

`表示色`で`透明`にチェックを入れるとその区間の色は表示されません。
その他の項目はグラデーションモードと同じなので説明は割愛します。

`グラデーションモードに切り替え`を押すとグラデーションモードに戻ります。

:::note
小技として、グラデーションモードで大まかな色を設定し、区間別モードに切り替えの際に色の数を増やして、グラデーションモードに戻ることできれいなグラデーションを保持したまま一括で色を増やすことが出来ます。
:::

### コンター線の描画
`コンター線の描画`にチェックを入れると等高線のみを表示することができます。
隣の`線の幅`から等高線の幅を指定でき、等高線の値は`カラーマップの値を使用`を選択すると`表示色`の値が、`分割数を指定`を選択すると指定した分割数で最大最小の範囲を等分割した値が使用されます。
等高線の色は`表示色`で指定した色を基に設定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/58fa55a1-f50e-45b8-4ff6-66c1f95b7a29.png)

### 透過度
`半透明`にチェックを入れてスライダーから透過度を指定することで、カラーマップの透過度を指定できます。

:::note
透過度は調整したスカラーをオブジェクトブラウザで選択した状態で、ツールバーからも変更することができます。
ツールバーの透過度のスライダーはよく隠れているのでドラックで引っ張り出しましょう。
![image_10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/ff914cae-ea4a-220a-3c9d-076da6810499.gif)


:::

# 凡例に関する設定

### 表示
`表示`のチェックボックスにチェックが入っている時のみ凡例を表示します。

:::note
表示の有無、向きの切り替え等の一部の項目はスカラー設定画面を開かなくてもオブジェクトブラウザーで対象の属性を選択している時にツールバーに表れる項目からも変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/f347f3ac-dc2c-3153-a596-1b7174d2ca5a.png)

:::

### 向き
凡例のカラーバーの表示の向きを変更できます。
![image_08.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/e8fbc2a4-3949-4a96-38f2-79de63ce4f34.gif)

向き変更後の凡例のサイズは`サイズと位置`の`幅`と`高さ`の数値が入れ替わった値となっています。
なお切り替えの際の元の`幅`と`高さ`の関係が以下の場合は数値の入れ替わりは発生しません。
* 縦→横の際に元のサイズの関係が`幅`>`高さ`の場合
* 横→縦の際に元のサイズの関係が`高さ`>`幅`の場合

### タイトル
凡例のタイトルを設定できます。
**v4からは日本語のタイトルも設定できるようになりました。**
フォント設定からフォントからフォントの設定が行えます。

### ラベル表示

#### 形式
`形式`でラベルの表示形式を指定できます。形式の指定は書式指定子で行います。
使われるであろうフォーマット指定子の例を以下に示します。
なお、iRIC上では全体の最小桁数を数値より大きくすると右詰めではなく中央寄せで表示されます。

```
%[全体の最小桁数].[小数点以下の桁数]型        # 書式指定子の構造[]内は省略可

# 値が1234.5678の場合の例

# 浮動小数点表記
1234.5678        # %.4f
1234.568         # %.3f

1234.5678        # %8.4f
1234.5678        # %9.4f
 1234.5678       # %10.4f
  1234.5678      # %11.4f

# 指数表記
1.2346e+03           # %.4e
1.2345678e+03        # %.7e
1.23456780e+03       # %.8e

1.2346e+03           # %9.4e
1.2346e+03           # %10.4e
 1.2346e+03          # %11.4e
  1.2346e+03         # %12.4e

#有効桁数を指定して四捨五入処理後の精度および値に応じて浮動小数点表示と指数表記をわける
1234.6               # %.5g
1234                 # %.4g
1.23                 # %.3g
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/283e87bc-806e-e226-1f0c-6b2c8e985091.png)

#### ラベルの数
凡例に表示するラベルの数を指定します。
自動のチェックボックスにチェックを入れている場合は`表示色`で設定されている`値と色の組み合わせ`の数が適用されます。

#### フォント設定
フォントの設定が行なえます。

### 表示色
タイトルの文字色、ラベルの文字色、凡例の背景色と透過度を指定できます。
`枠線を描画`にチェックを入れると凡例の範囲に枠線を表示します。枠線の色は背景色の非透過の色になります。

### サイズと位置
凡例のサイズと位置を指定できます。

#### 位置
描画範囲の4隅+上下左右の辺の中心の合計8箇所からの距離を描画範囲の高さと幅の割合で指定できます。

`位置`で4隅を指定した場合、以下の画像のように描画範囲の選択したの4隅と凡例の選択した4隅の距離で位置を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/75163e9c-0b89-767f-f409-fc9118884f4a.png)

上下左右の辺を指定した場合、凡例の縦軸または横軸の位置は選択した描画範囲の辺の中心と凡例の中心が一致するように固定され、上下または左右のみに移動できるようになります。凡例の位置は描画範囲と凡例の選択した辺同士の距離で指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/b0a06106-1488-7443-042a-74f13acdfc83.png)


iRIC v4ではスカラーの設定画面が開いている状態で可視化ウィンドウをアクティブにして操作することが可能になっているため、以下のアニメーションのように設定画面を開きながら凡例の位置はマウスで移動することも可能です。
マウスで位置を指定した際には`位置`で指定する箇所からの距離が最小になるように自動で選択箇所が変わります。
また、マウスで変更した位置は設定画面の数値と同期しているため大まかな位置をマウスで定めて細か調整は設定画面から数値で行うということも可能です。

![image_09.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/014d56ea-2f02-8168-ef19-b67bc7a2776d.gif)

#### サイズ
凡例のサイズを指定します。タイトルやラベルがはみ出してしまう場合はここでサイズを調整してください。凡例の向きを変更すると、横表示の場合は幅が、縦表示の場合は高さがもう一方より大きくなるように値が自動で入れ替わります。

サイズに関しても位置と同様に設定画面を開いた状態で可視化画面にてマウスで変更することが可能です。

#### 自動サイズ
チェックを入れると凡例のサイズをいい感じに自動調整してくれます。

### バーの幅
縦表示の際の凡例内のカラーバーの幅を指定できます。
`自動`にチェックを入れると凡例のサイズに合わせた幅に設定されます。

縦表示の場合タイトルやラベルの長さに合わせて幅を広くすると、カラーバーがとても太くなってしまうので手動でカラーバーの幅を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/00885833-0554-16fd-e7f8-382a37af8bb8.png)

### 整列
凡例範囲内でのタイトル、カラーバーの整列のしかたを指定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/2e6e0969-7353-1f27-9ae9-2c9f418de605.png)

# インポート・エクスポート
iRIC v4で追加された新機能です。

iRIC v4では表示色の設定や凡例の設定をまとめて保存したカラーマップの **設定ファイル(\*.cmsetting)** を使用することで設定の入出力が容易に行えるようになっています。
また、プリセットとしていくつかの設定ファイルが同梱されているのでそれらをインポートすることで様々な表示を簡単に切り替えられます。

### インポート(標準設定から選択)
設定画面の`インポート`を押すと、以下のようなダイアログが現れます。`標準設定`のフォルダツリーから設定ファイルを選択し、`OK`を押すと設定を読み込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/55375353-f91d-22e9-3083-700fc37cdb4d.png)

#### 標準設定
iRICをインストールしたフォルダ（標準は`c:/Users/ユーザー名/iRIC_v4`）の下の`colormaps`フォルダと`private/colormaps`フォルダの下のサブフォルダと設定ファイル(\*.cmsetting)の一覧がツリーで表示されます。

`iRIC_v4/colormaps`にはインストール時にデフォルトで同梱される設定ファイル群が入っています。
`iRIC_v4/private/colormaps`はユーザーが作成した設定ファイルを配置するフォルダです。インストールした段階では`iRIC_v4/private`に`colormaps`フォルダは作成されていないので各自作成して下さい。

このフォルダツリーからインポートしたい設定ファイルを選択することができます。

#### インポートする属性
設定ファイルからインポートしたい情報を選択することができます。
インポートしたい情報にチェックを入れて下さい。

#### プレビュー
`標準設定`で選択した設定ファイルから`インポートする属性`で選択した属性をインポートする際の凡例の様子をプレビューできます。

### インポート(ファイルを選択)
カラーマップ設定のインポートダイアログの`モード`で`ファイルを選択`を選択すると以下の画面に切り替わります。

`ファイル`で設定ファイルのパスを指定するか、`...`ボタンを押してファイル選択ダイアログで設定ファイルを選択して`OK`を押すと設定を読み込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/1200634c-9245-ee2c-5608-9ba6bfcf0474.png)

:::note
標準でインストールされる設定ファイルの他にも様々なカラーマップをiRIC HPで公開しています。

https://i-ric.org/download/colormapsettingfiles/
:::

### エクスポート
カラーマップの設定画面で設定した内容を設定ファイルとしてエクスポートできます。
`エクスポート`を押すと出力先を指定するダイアログが現れるので保存先とファイル名を指定します。

この時、`iRIC_v4/private/colormaps`以下に保存しておくと、インポート時の一覧に表示されるので便利です。

# 【番外編】デフォルトのカラーマップを変更する

iRICでは何の設定もせず計算結果を表示した際のカラーマップは虹色の設定になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/edc9c84c-ab3c-c766-ac8b-280459f9ac98.png)

使いたいフォントが決まっていたり、凡例の横表示にしたりと、違うカラーマップ設定がお気に入りの人は毎回設定を変えるのが手間だと思います。
なのでデフォルトのカラーマップ設定を変更する方法を整理します。

まず、iRIC v4でデフォルトとして読み込まれるカラーマップの設定は`iRIC_v4/colormaps/default.cmsetting`となっています。
直接この設定ファイルを上書きしてもよいのですが、iRIC v4では`iRIC_v4/private/colormaps`にも`default.cmsetting`がある場合にはこちらを優先的に使用するようになっています。

なので、自分好みに設定したカラーマップの設定を`iRIC_v4/private/colormaps`に`default.cmsetting`というなまえでエクスポートしてあげることで、本来の`default.cmsetting`を変更せずにデフォルトのカラーマップ設定を変更することができます。

デフォルト設定の変更後に反映されていない場合は、可視化ウィンドウを開き直すかファイル名が間違っていないかを確認してください。

# 【番外編2】カラーマップの設定ファイルの中身

カラーマップの設定ファイル(\*.cmsetting)はXML形式のテキストデータです。
なのでiRIC上で設定を変更してエクスポートをし直さなくてもテキストデータを直接いじることで内容を変更することができます。

設定ファイルの例を以下に示します。
おそらく開いた状態では改行されていませんが、見やすさの為に改行しています。

```xml:グラデーションモードの場合
<?xml version="1.0" encoding="UTF-8"?>
    <ColorMapSetting 
    transitionMode="0" 
    valueMode="1" 
    autoValueRange="true" 
    minValue="0" 
    maxValue="1" 
    fillUppeer="true" 
    fillLower="true" 
    colorTableMinValue="0" 
    visible="true" 
    direction="1" 
    barAutoWidth="false" 
    barWidth="30" 
    barAlign="1" 
    title="node_scalar_r1" 
    autoNumberOfLabels="true" 
    numberOfLabels="2" 
    labelSkipRate="1" 
    labelFormat="%5.2f" 
    titleFont="Century Gothic,14,-1,5,50,0,0,0,0,0,Regular" 
    labelFont="Century Gothic,14,-1,5,50,0,0,0,0,0,Regular" 
    titleColor="#000000" 
    labelColor="#000000" 
    backgroundColor="#ffffff" 
    backgroundOpacityEnabled="true" 
    backgroundOpacityPercent="20" 
    showBorder="true" 
    position="7" 
    horizontalMarginRatio="0" 
    verticalMarginRatio="0.1" 
    autoSize="false" 
    width="300" 
    height="200">
        <Item value="0" color="#0000ff" transparent="false"/>
        <Item value="0.25" color="#00ffff" transparent="false"/>
        <Item value="0.5" color="#00ff00" transparent="false"/>
        <Item value="0.75" color="#ffff00" transparent="false"/>
        <Item value="1" color="#ff0000" transparent="false"/>
</ColorMapSetting>
```

基本的な構造としては`ColorMapSetting`要素が`色と値の関係`や`凡例設定`等の諸々の内容で、`ColorMapSetting`の子要素として`Item`が`表示色`に追加されている値と色の組み合わせの内容となっています。`Item`は表示色テーブルの色と値の組み合わせの数だけ追加されます。

複数のカラーマップを編集したい時はiRIC上で編集してから保存するよりテキストエディタや簡単なプログラムで一括で設定してあげると早いです。

`ColorMapSetting`要素の属性は以下の通りです。

| 要素 | 内容 | 値 |
|:-|:-|:-|
| transitionMode  | カラーマップ表示のモード  | 0:グラデーションモード <br> 1:区間別モード  |
| valueMode  | 値と色の関係  | 0:手動で設定  <br> 1:値の範囲に合わせて自動調整  |
| autoValueRange  | 値の範囲の自動設定  | true:する<br> false:しない |
| minValue | 値の範囲の最小値 |実数 |
| maxValue | 値の範囲の最大値 |実数 |
| fillUppeer | 最小値以上を描画| true:する<br> false:しない|
| fillLower | 最小値以下を描画| true:する<br> false:しない|
| colorTableMinValue |transitionMode=1(区間別モード)の時の表示色テーブルの一番下の行の最小値の値| 実数|
| visible |凡例の表示 |true:する<br> false:しない |
| direction |凡例の向き |0:横 <br> 1:縦 |
| barAutoWidth |凡例のカラーバーの幅の自動調整 |true:する<br> false:しない |
| barWidth | 凡例のカラーバーの幅 |整数 |
| barAlign | 凡例の整列|0:左寄せ <br> 1:中央寄せ <br> 2:右寄せ|
| title | 凡例のタイトル| 文字列 |
| autoNumberOfLabels | ラベルの数の自動設定 |true:する<br> false:しない |
| numberOfLabels | ラベルの数<br>設定ファイルで指定した値+2個のラベルが表示される<br>グラデーションモードで使用 |整数 |
| labelSkipRate | ラベルの間引き<br>指定した値おきにラベルが表示される<br>区間別モードで使用 |整数 |
| labelFormat | ラベルの表示形式| 書式指定子 |
| titleFont | 凡例タイトルのフォント|例：Century Gothic,14,-1,5,50,0,0,0,0,0,Regular |
| labelFont | ラベルのフォント|例：Century Gothic,14,-1,5,50,0,0,0,0,0,Regular |
| titleColor |凡例タイトルの文字色 |カラーコード(HEX) |
| labelColor |ラベルの文字色 |カラーコード(HEX) |
| backgroundColor | 凡例の背景色 |カラーコード(HEX) |
| backgroundOpacityEnabled |凡例の背景色の透過 |true:する<br> false:しない |
| backgroundOpacityPercent |凡例の背景色の透過率 |整数 |
| showBorder |凡例の枠線の描画 |true:する<br> false:しない |
| position|凡例の位置 | 0:上<br>1:下<br>2:左<br>3:右<br>4:左上<br>5:右上<br>6:左下<br>7:右下|
| horizontalMarginRatio|基準からの水平距離(%) |実数|
| verticalMarginRatio|基準からの垂直距離(%)|実数|
| autoSize|凡例サイズを自動調整するか | true:する<br> false:しない|
| width|凡例の幅 | 整数|
| height|凡例の高さ | 整数|

`Item`の属性は以下のとおりです。
| 要素 | 内容 | 値 |
|:-|:-|:-|
| value  | グラデーションモードの場合の`値`列の値<br>区間別モードの場合の`最大値`の値  |実数 |
| color  | 値に対応する色  | カラーコード(HEX)  |
| transparent  | 色を透明にするか<br>※区間別モード時に使用される値です。  | true:する<br> false:しない |

### colorTableMinValueとvalueの値について
`colorTableMinValue`と`value`は表示色テーブルの色に対応した値の属性となりますが、`valueMode`(`値と色の関係`)が`0:手動で設定`か`1:値の範囲に合わせて自動調整`かで扱いが異なります。
以下のような設定の場合の値の扱いを整理します。

**区間別モードの場合**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/c0273e01-6846-21f2-6fcd-219900a98544.png)
**グラデーションモードの場合**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/8065bd83-2096-85c2-145a-ac4b20a59aa9.png)

`0:手動で設定`の場合、設定ファイル(\*.cmsetting)上での`colorTableMinValue`と`value`の値は上記画像で入力されているものがそのまま入力されます。

```xml
# グラデーションモードの場合
<ColorMapSetting
transitionMode="0" 
valueMode="0" 
minValue="5" 
maxValue="10"
colorTableMinValue="5">
    <Item value="5" color="#0000ff" transparent="false"/>
    <Item value="6.25" color="#00ffff" transparent="false"/>
    <Item value="7.5" color="#00ff00" transparent="false"/>
    <Item value="8.75" color="#ffff00" transparent="false"/>
    <Item value="10" color="#ff0000" transparent="false"/>
</ColorMapSetting>

# 区間別モードの場合
<ColorMapSetting
transitionMode="1" 
valueMode="0" 
minValue="5" 
maxValue="10"
colorTableMinValue="5" >
    <Item value="6" color="#0000ff" transparent="false"/>
    <Item value="7" color="#00ffff" transparent="false"/>
    <Item value="8" color="#00ff00" transparent="false"/>
    <Item value="9" color="#ffff00" transparent="false"/>
    <Item value="10" color="#ff0000" transparent="false"/>
</ColorMapSetting>

# ※関係ない属性は省略しています。
```

`1:値の範囲に合わせて自動調整`の場合、設定ファイル(\*.cmsetting)上ではそのままの値は入力されず、値が最小値から最大値の範囲のどこに位置するかを0～1の割合で入力されます。
そのため設定ファイル上での`colorTableMinValue`と`value`の値は以下のようになります。
なお、`minValue`と`maxValue`は`valueMode`(`値と色の関係`)にかかわらずそのままの値が入ります。

```xml
# グラデーションモードの場合
<ColorMapSetting 
transitionMode="0" 
valueMode="1" 
minValue="5" 
maxValue="10"
colorTableMinValue="0" >
    <Item value="0" color="#0000ff" transparent="false"/>
    <Item value="0.25" color="#00ffff" transparent="false"/>
    <Item value="0.5" color="#00ff00" transparent="false"/>
    <Item value="0.75" color="#ffff00" transparent="false"/>
    <Item value="1" color="#ff0000" transparent="false"/>
</ColorMapSetting>

# 区間別モードの場合
<ColorMapSetting
transitionMode="1" 
valueMode="1" 
minValue="5" 
maxValue="10"
colorTableMinValue="0">
    <Item value="0.2" color="#0000ff" transparent="false"/>
    <Item value="0.4" color="#00ffff" transparent="false"/>
    <Item value="0.6" color="#00ff00" transparent="false"/>
    <Item value="0.8" color="#ffff00" transparent="false"/>
    <Item value="1" color="#ff0000" transparent="false"/>
</ColorMapSetting>

```

### ColorMapSettingの属性が指定されてない場合の処理
設定ファイルのバージョンが古かったり意図して削除されていたりで`ColorMapSetting`要素の属性が指定されていなかった場合、インポートの際には指定されていない属性はデフォルトの値が適用されます。

デフォルトの値は以下で指定されています。

#### カラーマップの表示に関わる属性値
カラーマップの表示に関わる属性値のデフォルトは以下で指定されています。
デフォルト値が設定されていないので基本的に0が入ります。

https://github.com/i-RIC/prepost-gui/blob/develop_v4/libs/guicore/scalarstocolors/colormapsettingcontainer.cpp

```cpp:colormapsettingcontainer.cpp
ColorMapSettingContainer::ColorMapSettingContainer() :
	CompositeContainer({&transitionMode, &valueMode, &autoValueRange, &minValue, &maxValue, &fillUpper, &fillLower, &colorTableMinValue, &legend}),
	transitionMode {"transitionMode"},
	valueMode {"valueMode"},
	autoValueRange {"autoValueRange"},
	minValue {"minValue"},
	maxValue {"maxValue"},
	fillUpper {"fillUppeer"},
	fillLower {"fillLower"},
	colorTableMinValue {"colorTableMinValue"},
	legend {}

```

#### 凡例に関わる属性値

凡例に関わる属性値のデフォルトは以下で指定されています。
カラーマップの表示に関わる属性値とは違いデフォルトの値が指定されているため設定ファイルでの指定がない場合、この値が使用されます。

https://github.com/i-RIC/prepost-gui/blob/develop_v4/libs/guicore/scalarstocolors/colormaplegendsettingcontainer.cpp

```cpp:colormaplegendsettingcontainer.cpp
ColorMapLegendSettingContainer::ColorMapLegendSettingContainer() :
	CompositeContainer({&visible, &direction, &barAutoWidth, &barWidth, &barAlign, &title, &autoNumberOfLabels, &numberOfLabels, &labelSkipRate, &labelFormat, &titleFont, &labelFont,　&titleColor, &labelColor, &backgroundColor, &backgroundOpacity, &showBorder, &imageSetting}),
	visible {"visible", true},
	direction {"direction", Direction::Vertical},
	barAutoWidth {"barAutoWidth", false},
	barWidth {"barWidth", 30},
	barAlign {"barAlign", BarAlign::Center},
	title {"title"},
	autoNumberOfLabels {"autoNumberOfLabels", true},
	numberOfLabels {"numberOfLabels"},
	labelSkipRate {"labelSkipRate", 1},
	labelFormat {"labelFormat", "%5.2f"},
	titleFont {"titleFont", QFont("MS UI Gothic", 14)},
	labelFont {"labelFont", QFont("MS UI Gothic", 11)},
	titleColor {"titleColor", Qt::black},
	labelColor {"labelColor", Qt::black},
	backgroundColor {"backgroundColor", Qt::white},
	backgroundOpacity {"backgroundOpacity", 20},
	showBorder {"showBorder", true},
	imageSetting {},
	m_colorMapSetting {nullptr},
	m_delegateMode {false},
	m_imageBuilder {new ImageBuilder {this}}
```

https://github.com/i-RIC/prepost-gui/blob/develop_v4/libs/misc/opacitycontainer.cpp

```cpp:opacitycontainer.cpp
OpacityContainer::OpacityContainer(const QString& name, int defaultVal) :
	CompositeContainer({&enabled, &percent}),
	enabled {"enabled", true},
	percent {"percent", defaultVal}
{
	addPrefix(name);
}
```


https://github.com/i-RIC/prepost-gui/blob/adcc4886e45269e0fc1e3f2b56f889fe177b169a/libs/guicore/image/imagesettingcontainer.cpp

```cpp:imagesettingcontainer.cpp
ImageSettingContainer::ImageSettingContainer() :
	CompositeContainer({&position, &horizontalMargin, &verticalMargin, &autoSize, &width, &height}),
	position {"position", Position::TopLeft},
	horizontalMargin {"horizontalMarginRatio", 0},
	verticalMargin {"verticalMarginRatio", 0},
	autoSize {"autoSize", false},
	width {"width", 100},
	height {"height", 100},
	m_actor {nullptr},
	m_imageBuilder {nullptr},
	m_controller {new Controller {this}},
	m_negativePositionForbidden {false},
	m_autoSizeForced {false},
	m_setting {this}
```

#### 整数値のスカラーのカラーマップに関わるデフォルト値
今回、この記事では整数値のスカラーの話題は割愛していましたが、メモとして書いておきます。
以下のファイルに記載されています。

https://github.com/i-RIC/prepost-gui/blob/develop_v4/libs/guicore/scalarstocolors/colormapenumeratelegendsettingcontainer.cpp


```cpp:colormapenumeratelegendsettingcontainer.cpp
ColorMapEnumerateLegendSettingContainer::ColorMapEnumerateLegendSettingContainer() :
	CompositeContainer({&visible, &direction, &barAutoWidth, &barWidth, &barAlign, &title, &titleFont, &labelFont, &titleColor, &labelColor, &backgroundColor, &backgroundOpacity, &showBorder, &imageSetting}),
	visible {"visible", true},
	direction {"direction", Direction::Vertical},
	barAutoWidth {"barAutoWidth", false},
	barWidth {"barWidth", 30},
	barAlign {"barAlign", BarAlign::Center},
	title {"title"},
	titleFont {"titleFont", QFont("MS UI Gothic", 14)},
	labelFont {"labelFont", QFont("MS UI Gothic", 11)},
	titleColor {"titleColor", Qt::black},
	labelColor {"labelColor", Qt::black},
	backgroundColor {"backgroundColor", Qt::white},
	backgroundOpacity {"backgroundOpacity", 20},
	showBorder {"showBorder", true},
	imageSetting {},
	m_colorMapSetting {nullptr},
	m_delegateMode {false},
	m_imageBuilder {new ImageBuilder {this}}

```


#### 実際に属性を指定しないとどうなるか

iRICのデフォルトのカラーマップ設定に属性を全く指定しない設定ファイルをインポートしてみます。

デフォルト設定はこんなかんじです。
スカラーは最小値0m最大値12mの標高です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/85d6485e-0898-e864-2279-aa4766327ac9.png)

デフォルト設定をエクスポートするとこんな感じになっています。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<ColorMapSetting 
transitionMode="0" 
valueMode="1" 
autoValueRange="true" 
minValue="0" 
maxValue="12" 
fillUppeer="true" 
fillLower="true" 
colorTableMinValue="0" 
visible="true" 
direction="1" 
barAutoWidth="false" 
barWidth="30" 
barAlign="1" 
title="Elevation(m)" 
autoNumberOfLabels="true" 
numberOfLabels="2" 
labelFormat="%5.2f" 
titleFont="Century Gothic,14,-1,5,50,0,0,0,0,0,Regular" 
labelFont="Century Gothic,14,-1,5,50,0,0,0,0,0,Regular" 
titleColor="#000000" 
labelColor="#000000" 
backgroundColor="#ffffff" 
backgroundOpacityEnabled="true" 
backgroundOpacityPercent="20" 
showBorder="true" 
position="7" 
horizontalMarginRatio="0" 
verticalMarginRatio="0.1" 
width="300" 
height="200">
    <Item value="0" color="#0000ff" transparent="false"/>
    <Item value="0.25" color="#00ffff" transparent="false"/>
    <Item value="0.5" color="#00ff00" transparent="false"/>
    <Item value="0.75" color="#ffff00" transparent="false"/>
    <Item value="1" color="#ff0000" transparent="false"/>
</ColorMapSetting>
```

上記の設定ファイルの`ColorMapSetting`要素の属性を全部削除して保存します。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<ColorMapSetting>
    <Item value="0" color="#0000ff" transparent="false"/>
    <Item value="0.25" color="#00ffff" transparent="false"/>
    <Item value="0.5" color="#00ff00" transparent="false"/>
    <Item value="0.75" color="#ffff00" transparent="false"/>
    <Item value="1" color="#ff0000" transparent="false"/>
</ColorMapSetting>
```

属性を全て削除した設定ファイルをインポートすると以下のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/3bcc9d75-8943-2a1d-241d-f8ff69843125.png)

インポート後の設定をエクスポートするとこんなかんじです。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<ColorMapSetting 
transitionMode="0" 
valueMode="0" 
autoValueRange="false" 
minValue="0" 
maxValue="0" 
fillUppeer="false" 
fillLower="false" 
colorTableMinValue="0" 
visible="true" 
direction="1" 
barAutoWidth="false" 
barWidth="30" 
barAlign="1" 
title="" 
autoNumberOfLabels="true" 
numberOfLabels="0" 
labelFormat="%5.2f" 
titleFont="MS UI Gothic,14,-1,5,50,0,0,0,0,0" 
labelFont="MS UI Gothic,11,-1,5,50,0,0,0,0,0" 
titleColor="#000000" 
labelColor="#000000" 
backgroundColor="#ffffff" 
backgroundOpacityEnabled="true" 
backgroundOpacityPercent="20" 
showBorder="true" 
position="4" 
horizontalMarginRatio="0" 
verticalMarginRatio="0" 
width="100" 
height="100">
    <Item value="0" color="#0000ff" transparent="false"/>
    <Item value="0.25" color="#00ffff" transparent="false"/>
    <Item value="0.5" color="#00ff00" transparent="false"/>
    <Item value="0.75" color="#ffff00" transparent="false"/>
    <Item value="1" color="#ff0000" transparent="false"/>
</ColorMapSetting>
```

以下にインポート前後の設定の比較画像を示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/fa89bfa9-18e0-f05d-c6fa-13fb2f291119.png)

元々の設定では`valueMode`(`値と色の関係`)が`1:値の範囲に合わせて自動調整`だったので`Item`の`value`が、0～1の割合で設定されていましたが、`valueMode`を指定しなかったことで`0:手動で設定`に設定され、指定していた割合がそのまま数値として扱われてしまっていたりしますね。
その他にも`fillUpper`や`fillLower`などもやはり0が指定されています。
`title`については消えていますね。

こんな感じで属性値を指定しないと予期せぬ事が起きるかもしれませんのでできるだけ**属性はちゃんと指定しましょう** 。

それか指定していない属性についてはインポート時に読み込まないようにしましょう。
例えば凡例の表示に関する属性だけ指定した設定ファイルを作成して、インポート時に凡例の設定のみインポートするようにチェックボックスで指定するといったかたちです。

#### デフォルト値一覧

それでも、「指定したい値とデフォルトの値が一緒で指定するだけ無駄なのでしたくない」という方もいるかもしれないので、設定ファイルで指定する形式でデフォルトの値を整理しました。
[上記](#カラーマップの表示に関わる属性値)で紹介したデフォルト値はC++での指定形式なので、設定ファイル(XML形式での値です)。

| 要素 | 内容 | デフォルト値 |
|:-|:-|:-|
| transitionMode  | カラーマップ表示のモード  | 0:グラデーションモード|
| valueMode  | 値と色の関係  | 0:手動で設定|
| autoValueRange  | 値の範囲の自動設定  |false:しない |
| minValue | 値の範囲の最小値 |0|
| maxValue | 値の範囲の最大値 |0|
| fillUppeer | 最小値以上を描画|false:しない|
| fillLower | 最小値以下を描画| false:しない|
| colorTableMinValue |transitionMode=1(区間別モード)の時の表示色テーブルの一番下の行の最小値の値|0|
| visible |凡例の表示 |true:する|
| direction |凡例の向き |1:縦 |
| barAutoWidth |凡例のカラーバーの幅の自動調整 |false:しない |
| barWidth | 凡例のカラーバーの幅 |30 |
| barAlign | 凡例の整列|1:中央寄せ|
| title | 凡例のタイトル| "" |
| autoNumberOfLabels | ラベルの数の自動設定 |true:する|
| numberOfLabels | ラベルの数<br>設定ファイルで指定した値+2個のラベルが表示される |0 |
| labelSkipRate | ラベルの間引き<br>指定した値おきにラベルが表示される<br>区間別モードで使用 |1 |
| labelFormat | ラベルの表示形式| "%5.2f" |
| titleFont | 凡例タイトルのフォント|"MS UI Gothic,14,-1,5,50,0,0,0,0,0"|
| labelFont | ラベルのフォント|"MS UI Gothic,11,-1,5,50,0,0,0,0,0"|
| titleColor |凡例タイトルの文字色 |#000000 |
| labelColor |ラベルの文字色 |#000000 |
| backgroundColor | 凡例の背景色 |#ffffff |
| backgroundOpacityEnabled |凡例の背景色の透過 |true:する|
| backgroundOpacityPercent |凡例の背景色の透過率 |20 |
| showBorder |凡例の枠線の描画 |true:する<br> false:しない |
| position|凡例の位置 | 4:左上|
| horizontalMarginRatio|基準からの水平距離(%) | 0.0|
| verticalMarginRatio|基準からの垂直距離(%)  |0.0|
| autoSize|凡例サイズを自動調整するか | false:しない|
| width|凡例の幅 | 100|
| height|凡例の高さ | 100|

`Item`の属性は以下のとおりです。
| 要素 | 内容 | デフォルト値 |
|:-|:-|:-|
| value  | グラデーションモードの場合の`値`列の値<br>区間別モードの場合の`最大値`の値  |0.00 |
| color  | 値に対応する色  | #000000 |
| transparent  | 色を透明にするか<br>※区間別モード時に使用される値です。  |false:しない |