「Mitaka」星座ひとつひとつの表示設定を個別に切り替えるためのカスタマイズ

## はじめに

本記事では、 **4次元デジタル宇宙ビューワー「Mitaka」** （開発：国立天文台4次元デジタル宇宙プロジェクト）において、星座名・星座絵・星座線・境界線の表示のオン/オフを、星座ひとつひとつに対して切り替えるためのカスタマイズ方法を記載します。

:::note warn
本記事は「Mitaka」開発元（国立天文台4次元デジタル宇宙プロジェクト）とは独立に作成したものです。本記事の内容に関する開発元へのお問い合わせはお控えください。
:::

4次元デジタル宇宙ビューワー「Mitaka」は、天文学研究の最新結果が可視化されたソフトウェアです。 **フリーソフト** のため、誰でも無料でダウンロードすることができます（2024/12/31現在、Windows版のみ）。

https://4d2u.nao.ac.jp/mitaka/

地球から見た星座を表示する機能もあるため、近年では **星空観察会などのイベントでの解説や擬似プラネタリウム** のように利用されることもあります。

:::note warn
利用においては、必ず[利用規定](https://4d2u.nao.ac.jp/policy/)をお読みください。特に、個人・教育機関以外での利用には利用申請が必要です。
:::

なお、「Mitaka」を使ってみたいと思われた方に向けた「初心者ガイド」なるものを独自に作成していますので、そちらもぜひご覧ください。

<iframe width="560" height="315" src="https://www.youtube.com/embed/RC5Qu2NOAaU?si=m2T-LxByoLIp6ckf" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


## やりたいこと

**「星座名・星座絵・星座線・境界線の表示のオン/オフを、星座ひとつひとつに対して切り替える」** ことが目標です。特に星座の解説や擬似プラネタリウムを行う際に、このような操作ができると嬉しい場面が多いです。これができると、例えばこのようなことが可能になります↓
 
（2:14〜 オリオン座のみの星座線を表示しています[^sample_video]）

<iframe width="560" height="315" src="https://www.youtube.com/embed/HCYKFRg_LJM?si=3dPXIRP987EPE-Ia&amp;start=130" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

[^sample_video]: 動画内ではバージョン1.7.0より前のバージョンを使用しています。本記事ではバージョン1.7.0以降のバージョンで同様の操作を再現することを目指します。

## カスタマイズについて（バージョン1.7.0以降をダウンロードしてください！）

デフォルトでは星座ひとつひとつに対する表示設定の切り替えを行うことができないため、Mitakaの **カスタマイズ** を行う必要があります。 **カスタマイズ** はMitakaのバージョン1.6.0から搭載された機能で、これを使えばさらに自由度の高い操作を行うことができるようになります。

:::note warn
バージョン1.7.0以降とそれ以前のバージョンとでは、Mitaka内での「星座」の扱いが変わっています[^v170]。本記事の操作をする場合は、 **バージョン1.7.0以降** のMitakaを使用してください。基本的には最新バージョン（2024/12/31現在、バージョン1.7.4a）をダウンロードすることを推奨します。
:::


[^v170]: バージョン1.7.0以降は「キーグループ」というまとまりで星座やアステリズムなどが制御されています（おそらく、アステリズムの表示が可能になった影響）。そのため、キーグループ `CNST_SELECT` に対する操作 `ToggleKeyGroup(CNST_SELECT, CNST_Ori)` によって星座の「選択状態」を操作します。なお、それ以前のバージョンでは星座の「選択状態」を直接操作するコマンド `SelectionToggle(CNST_Ori)` などにより本記事の内容を実現できます。

なお、Mitakaの **カスタマイズ** に関する詳細は、Mitakaの公式マニュアル（ソフトフェアと同梱）・[@aDAVISkさんの記事](https://qiita.com/aDAVISk/items/00647a7b7530a4c31878)・[日本天文教育普及研究会 Mitakaによる天文教育/普及WG](https://tenkyo.net/category/wg/mitaka/)が作成したマニュアルなどをご参照ください。

https://qiita.com/aDAVISk/items/00647a7b7530a4c31878

https://tenkyo.net/category/wg/mitaka/

## カスタマイズしよう

以下、「Mitaka」のアプリケーションである `mitaka.exe` が含まれているフォルダ（ディレクトリ）のことを `mitaka/` と表現します。

例えば、バージョン1.7.4aの「Mitaka」の場合、 `.../mitaka174a/mitaka/mitaka.exe` のことを `mitaka/mitaka.exe` と表現します。

### [1] 星座の「選択状態」を反転するコマンドセット

Mitakaで使えるコマンドは、 `mitaka/programs/` 内に格納されています。まず、コマンドを入力するためのファイルとして、 `mitaka/programs/` 内に新たな **.mcdファイル** を作成します。ここでは、 `mitaka/programs/ricot_commands.mcd` とします[^mcdfile][^mcdcopy]。ファイル名は他の名前でも構いません（ `my_commands.mcd` など）が、後で使用するので記録しておきましょう。

[^mcdfile]: Mitakaにデフォルトで搭載されているコマンドは、 `mitaka/programs/default_commands.mcd` 内に記載されています。このファイル内に新たなコマンドを追加することもできますが、デフォルトのコマンドとオリジナルのコマンドを区別するため、別のファイルを作ることを推奨します。
[^mcdcopy]: `default_commands.mcd` を複製し、名前を変更すると確実に.mcdファイルを作成できます。

:::note warn
.mcdファイルは「メモ帳」などのテキストエディタで開き、編集することができます。ファイルの拡張子が **「.txt」ではなく** 「.mcd」となるように注意してください。
:::

:::note warn
以下の設定ファイルでは、文字列以外は全て **半角文字** で記述してください。また、ファイルのエンコードは **UTF-8** （ユニコード形式）を使用してください。
:::


では、試しに「オリオン座のみの表示設定を変える」ためのコマンドを作成してみましょう。先ほど作成した `mitaka/programs/ricot_commands.mcd` に、以下を入力します。

```mitaka/programs/ricot_commands.mcd
DefCommandSet[tglOri]
  KeyString(tglOri)
  KeyString[ja, ja_ruby](オリオン)
  ToggleKeyGroup(CNST_SELECT, CNST_Ori)
```
- `DefCommandSet[***]`：コマンドセット（一連のコマンド）を定義するための文。 `[***]` の部分には好きな名前を付けられます。ここでは `tglOri` としました[^tglOri]。
- `KeyString(***)`：メニュー上での表示を指定するコマンド。ここでは `tglOri` としたため、メニュー上で「tglOri」と表示されます。（コマンドセット名と同じである必要はありません）
- `KeyString[~~~](***)`： **言語ごとの** メニュー上での表記を指定するコマンド。言語は `[~~~]` の部分で指定でき、日本語は `ja` 、日本語（ルビあり）は `ja_ruby` となります。
- `ToggleKeyGroup(~~~, ***)`： **キーグループ`~~~`内の、キー`***`の登録状態を反転する（オン/オフを切り替える）** というコマンド。
    - `CNST_SELECT` ：「『選択状態』にある星座」を表すキーグループ。
    -  `CNST_Ori` ：「オリオン座」を表すオブジェクトキー[^CNST_key]。

[^tglOri]:「tgl」は「toggle」を、「Ori」はオリオン座の略符を意図しています。
[^CNST_key]: 星座のオブジェクトキーは `CNST_(アルファベット3文字の星座の略符)` で与えられます（公式マニュアルより）。星座の略符は[国際天文学連合のウェブサイト](https://www.iau.org/public/themes/constellations/)をご参照ください。 

:::note info
 **オリオン座の「選択状態」を反転するコマンドセット `tglOri`** を作成しました。
:::

星座の「選択状態」とはいったい何でしょうか？

Mitakaのメニュー内 `表示設定 > 星座` には `選択された星座のみ（プラネタリウムモード）` という項目があります。これは、**「選択状態」にある星座のみの表示設定（星座名・星座線・星座絵・境界線）を切り替える** という意味の項目となっています。
例えば、もし「選択状態」にある星座がオリオン座のみの場合、「選択された星座のみ（プラネタリウムモード）」をオンにすれば、 **オリオン座のみの表示設定（星座名・星座線・星座絵・境界線）を切り替える** ことが可能になります。

つまり、「選択された星座のみ（プラネタリウムモード）」をオンにしておき、 **星座ひとつひとつの「選択状態」を反転する（オン/オフを切り替える）** ことで、擬似的に **星座ひとつひとつの表示設定を変更しているように見せる** ことができるのです[^selection_keygroup]。
オリオン座の場合は、先ほど作成した `tglOri` によって、オリオン座の「選択状態」を反転することが可能になる、つまり **オリオン座の表示設定を変更する（ように見せる）** ことが可能になります。

[^selection_keygroup]: 実際には「『選択状態』にあるかどうか」は、「星座の『選択状態』を表すキーグループ `CNST_SELECT` に星座のオブジェクトキーが含まれているかどうか」で判断されます。なお、バージョン1.7.0より前のバージョンではキーグループを扱うことなく、星座の「選択状態」を直接変更していました。

### [2] 全ての星座の「選択状態」を制御

次に、 **全ての星座の「選択状態」をオフにするコマンドセット** を作成しましょう。
キーグループをクリアする（登録されている全てのキーを削除する）コマンドは `ClearKeyGroup(***)` です。これを踏まえ、先ほどと同じファイル内に以下を入力します。

```mitaka/programs/ricot_commands.mcd
DefCommandSet[REMOVE_ALL_CONSTELLATION]
    KeyString(REMOVE_ALL_CONSTELLATION)
    KeyString[ja, ja_ruby](全ての星座を選択解除)
    ClearKeyGroup(CNST_SELECT)
```

このコマンドセット `REMOVE_ALL_CONSTELLATION` を使えば、全ての星座の「選択状態」をオフにする、つまり **全ての星座の表示設定をオフにする** （ように見せる）ことが可能になります。

:::note info
 **全ての星座の「選択状態」をオフにするコマンドセット `REMOVE_ALL_CONSTELLATION`** を作成しました。
:::

このコマンドセットは、便利のために作成したという理由もあります。一方、どうやらデフォルトでは **オリオン座・おおいぬ座・ケンタウルス座の「選択状態」がオンになっているようです** 。よって、指定した星座のみの表示設定を変更したい場合は、この「全ての星座の『選択状態』をオフにする」操作が必要になります[^default_selection]。そのためにこのコマンドセットを作成したという意図もあります。

[^default_selection]: 天体の「選択状態」を表すファイル `mitaka/programs/selection.dat` を見ると、 `CNST_Ori`・`CNST_UMa`（これはおおぐま座）・`CNST_Cen` の3つが記述されています。試しにこれらの記述を変更してみたところ、初期状態の星座の「選択状態」は特に変化がありませんでした。どうやら別の要因により、初期状態の星座の「選択状態」（オリオン座・おおいぬ座・ケンタウルス座）が決められているようです。

### [3] 作成したファイルをMitakaに読み込ませる

ここまで、新しく作成したコマンドセットを  `mitaka/programs/ricot_commands.mcd` 内に記述しました。次に、このファイルをMitakaに読み込ませる設定が必要です。ここでは、 `mitaka/programs/default_program.prg` に **以下を追加する** ことでそれを可能にします[^program]。

```mitaka/programs/default_program.prg
...
COMMAND_DEF_FILE:    default_commands.mcd
COMMAND_DEF_FILE:    default_presets.mcd
COMMAND_DEF_FILE:    ricot_commands.mcd  // <-- この文を追加します
...
```
:::note warn
「この文を追加します」と記載している文のみを追加します。`//`・`<--`は分かりやすくするための記号です。つまり、追加する文は「 `COMMAND_DEF_FILE: ricot_commands.mcd` 」のみです。
`COMMAND_DEF_FILE: default_commands.mcd`・`COMMAND_DEF_FILE: default_presets.mcd` はデフォルトで記述されています。
以下、同様に記載します。
:::

[^program]: 本来は、番組リストファイル `mitaka/programs/programs.dat` に登録されている番組情報ファイル  `mitaka/programs/default_program.prg` が読み込まれているため、情報を整理するという視点では「 `ricot_program.prg` のようなファイルを別に作成して読み込ませる」という流れが適切であるとも思えます。その一方、ここでは  `ricot_commands.mcd` ファイルを別途作成しているため、 `default_program.prg` を直接編集してもほとんど混乱することはないであろう、と判断した上での操作を行っています。

:::note info
コマンドセットを記述したファイル `mitaka/programs/ricot_commands.mcd` を **読み込ませるための設定** を、`mitaka/programs/default_program.prg` 内に追加しました。
:::


### [4] メニューにコマンドを実行する項目を追加

新たに作成したコマンドセットを実行するために、Mitakaのメニュー上に項目を作成します。Mitakaのメニューの内容は `mitaka/programs/menu_def.txt` に記述されているので、 **このファイル内に** 記述を追加します。

まず、 **`[MENU_ROOT]` の項目の中に** 以下を追加します。
```mitaka/programs/menu_def.txt
[MENU_ROOT]
...
CHILD_MENU:	MENU_PRESET
CHILD_MENU:	MENU_SYSTEM
CHILD_MENU: MENU_CNST_ricot // <-- この文を追加します
...
```

次に、 **新しい項目として（ファイルの一番下などに）** 以下を全て追加します。
```mitaka/programs/menu_def.txt
[MENU_CNST_ricot]
ITEM_COMMAND: tglOri
ITEM_COMMAND: REMOVE_ALL_CONSTELLATION
```
- `CHILD_MENU: ***`：子メニューを呼び出すためのキー。 `***`には子メニュー名を記載します。子メニューはファイル内の別箇所に `[***]` として記述します。
- `ITEM_COMMAND: ***`：指定したコマンドを実行するキー。

これにより、まず親メニュー（メニューを開いたとき最初に現れるメニュー）内に子メニュー `MENU_CNST_ricot` を追加し、その子メニュー内で先ほど作成したコマンドセット `tglOri`・`REMOVE_ALL_CONSTELLATION`をそれぞれ実行するための項目を追加しました。

:::note info
`mitaka/programs/menu_def.txt` を編集することで、 **新たに作成したコマンドセットを実行するための項目** を追加しました。
:::

### [5] メニューの表記設定（任意）

上記のメニューの設定により、コマンドを実行できるようになりました。追加の設定として、 **子メニュー `MENU_CNST_ricot` の日本語表記** を設定しましょう（ `tglOri`・`REMOVE_ALL_CONSTELLATION` の日本語表記はそれぞれ設定済み ）。

Mitakaの言語情報は、 `mitaka/locale/` 内に格納されています。日本語表記を設定するためのファイルとして、 `mitaka/locale/ja/` 内に **新たな** .txtファイルを作成します。ここでは、 `mitaka/locale/ja/ja_ricot_strings.txt` とします。ファイル名は他の名前でも構いません。

:::note warn
`mitaka/locale/ja/` 内の既存のファイルを改変することは、利用条件では認められていません。
:::

まず、このファイル内に、子メニュー `MENU_CNST_ricot` の日本語表記を設定するための文を追加しましょう。

```mitaka/locale/ja/ja_ricot_strings.txt
MENU_CNST_ricot: 星座設定
```

これにより、子メニュー `MENU_CNST_ricot` の日本語表記を `星座設定` にする設定ができます。

次に、この設定をMitakaに読み込ませましょう。ここでは、`mitaka/locale/Japanese.lng` に **以下を追加する** ことでそれを可能にします[^dot]。

```mitaka/locale/Japanese.lng
...
STRINGS:    ./ja/ja_splash_strings.txt
STRINGS:    ./ja/ja_place_names.txt
STRINGS:    ./ja/ja_ricot_strings.txt  // <-- この文を追加します
...
```

[^dot]: `./` とは、「現在のファイル（ディレクトリ）」を指します。この場合は、 `mitaka/locale` を指すことになります。

:::note info
子メニュー `MENU_CNST_ricot` の **日本語表記を設定したファイル `mitaka/locale/ja/ja_ricot_strings.txt` を作成** し、それを **読み込ませるための設定を `mitaka/locale/Japanese.lng` 内に追加** しました。
:::

なお、日本語（ルビあり）の設定は `mitaka/locale/Japanese_ruby.lng` に対して同様の操作を行えばOKです。 ルビありの日本語表記は、例えば `{国立天文台|こくりつてんもんだい}` のように設定します。デフォルトで保存されている .txtファイルもご参照ください。

## Mitakaで見てみよう

では、ここまでのカスタマイズをMitaka上で見てみましょう！通常通り、 `mitaka/mitaka.exe` を起動して、設定通りのメニューが表示され、コマンドを実行できれば成功です。 **メニュー内 `表示設定 > 星座 > 選択された星座のみ（プラネタリウムモード）` をオンにする** ことを忘れずに！なお、「選択された星座のみ（プラネタリウムモード）」をオンにするコマンドもあるため[^cnst_select]、それをコマンドセットに組み込むことも可能です。

[^cnst_select]: 「選択された星座のみ（プラネタリウムモード）」はMitaka内では「スイッチ」として組み込まれており、 `CONSTELLATION_SELECT_PLNT` で表現されています。スイッチをオンにするコマンド `SwitchOn` を使い、 `SwitchOn(CONSTELLATION_SELECT_PLNT)` と記述すれば「選択された星座のみ（プラネタリウムモード）」をオンにする操作が可能です。なお、デフォルトのメニューで既に組み込まれている `ITEM_SWITCH: MENU_SW_CONSTELLATION_SELECT_PLANETARIUM` をメニュー上に記述すれば、自作のメニュー内に同項目を設置することも可能です。

![Mitaka_sample_ricot](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971542/ab30d5e2-c561-906b-21d9-0c492ace3fa8.png)
上記の画像では、星座名・星座線・星座絵を表示させ、「すべての星座を選択解除」を行った後にオリオン座のみを表示させています。

:::note info
**星座名・星座絵・星座線・境界線の表示のオン/オフを、星座ひとつひとつに対して切り替える** ことが可能になりました。
:::

:::note warn
想定通りの操作ができない場合は、設定のどこかで不具合がある可能性が高いです。その場合は（やや大変ですが）それぞれの操作を丁寧に見返しましょう。
:::


## まとめ

本記事では、 **星座名・星座絵・星座線・境界線の表示のオン/オフを、星座ひとつひとつに対して切り替える** ために以下のカスタマイズを行いました。

- **オリオン座の「選択状態」を反転する** コマンドセットを作成
- **全ての星座の「選択状態」をオフにする** コマンドセットを作成
- コマンドセットを記述したファイルを **Mitakaに読み込ませる** ための記述を追加
- **メニューからコマンドセットを実行する** ための記述を追加
- メニューの日本語表記を設定（任意）

これらを応用すれば、さらに使いやすく自由にMitakaをカスタマイズすることが可能になります。例えば、特に使う星座のみをピックアップしておくこともできますし、「夏の星座」「冬の星座」などに分類しておくこともできます。

:::note info
Mitakaを活用した様々な天文教育普及活動が展開されることを期待しています！
:::