Deep Sky Memories

横浜の空で撮影した星たちの思い出

Galaxy Annotator v0.9 (スタイル設定機能強化版)をリリースしました

銀河専用アノテーションツール Galaxy Annotator について、当初から要望がありながら先延ばしになっていたスタイル設定機能の強化を一通り実装したバーション(v0.9)をリリースしました。

スクリプトの修正は galaxy-annotator.py のみです。

機能強化の内容ですが、まず style.jsonSVG 1.1 でスタイルシートに書ける設定(スタイルプロパティ)は、JSON の文法でですが、原則何でも指定できるようになりました。文字の透明度、文字の装飾、点線の設定等々。スタイルの文法チェックは一部を除いて行っておらずほぼ素通しですので、書き間違いにはご注意ください。*1


もう一つの機能強化は、個別の銀河毎のスタイル設定機能です。galaxies.json の銀河オブジェクト内に style.json と同じ書式でスタイル設定を記述すると、それがその銀河だけに優先して適用されるスタイル設定になります。

大きな銀河のラベルは大きな文字にしたい、銀河が密な領域で個々の銀河のラベルの配置(後述)を変えてラベルの衝突を避けたい、等の場合に手動になりますが galaxies.json の方で調整ができるようになりました。

もう一つの機能強化は、ラベルの配置設定機能です。marker のスタイル設定の label-position と label-vertical-align でラベルの配置を指定できるようになりました。百聞は一見に如かず、ということでこんな感じになります。

https://rna.sakura.ne.jp/share/galann/label-position-all.jpg

https://rna.sakura.ne.jp/share/galann/label-vertical-align-all.jpg

これをうまく使うとラベルの衝突や大きな銀河でラベルが銀河から離れすぎる問題にある程度対処できると思います。詳しい仕様は添付文書の「ラベルのレイアウト」を参照してください(リンク先は最新版)。

マーカーの大きさを自動調整する機能も追加しました。マーカーの大きさは size で視直径の何倍にするかを、min-r で最小の半径を設定できるのですが、小さな銀河に合わせて大きめの size を指定すると、写真の主題になる大きな銀河ではマーカーが大きくなりすぎる問題がありました。

銀河の大きさに合わせて size を賢く自動調整していい感じの大きさにしたいところですが、設定パラメータが分かりやすいように新たな設定項目 min-size, min-size-r を追加して、以下のような単純なルールで調整するようにしました。

  • min-size はマーカーの倍率の最小値。
  • マーカーの倍率は銀河の(長)半径に応じて、半径 min-r で size 倍、半径 min-size-r で min-size 倍になるようリニアに変化する。
  • min-size プロパティと min-size-r を省略した場合は銀河の半径によらず常に倍率ば size 倍。

最後にちょっとした機能追加ですが、desc のスタイルに line-height を追加しました。1.05 とか指定すると行の高さが 5% アップします。フォントによって行間が詰まり過ぎる場合に使ってください。

以上色々仕様が拡張しましたが、デフォルトでは今までと同じスタイル設定になるようにしたつもりです。バージョン 1.0 未満のベータ版みたいなものなので、互換性の維持は必ずしも約束できませんが、あまりに変なところがあったら直すかもしれません。

全部で700行にも満たない小さなスクリプトですが、かなり仕様が複雑になってきたので、なぐり書き状態のままでは品質の維持が難しくなってきました。ラベル配置のあたりは設定の組み合わせが45通りあってテストが大変でした… しばらくはモジュール化や自動テストの追加といった作業が続くと思います。

v1.0 に向けた目標ですが、コマンドの実行方法をもう少し簡略化する方法を考えたいと思います。導入方法についてはだいこもんさん(id:snct-astro)の記事のおかげで少しはわかりやすくなったとは思うのですが、*2

https://snct-astro.hatenadiary.jp/entry/2021/05/29/010041

本格的に色々試そうとすると、今は個々のコマンドの引数が多くて中間生成物の依存関係も把握しておく必要があり、なかなか扱いづらい面があります。

依存関係のある生成物をまとめて記述したプロジェクトファイルを用意すれば後は設定変更に合わせて必要な処理だけ再実行して最終生成物が自動的に更新される、みたいなことができれば、と思っています。このへんができると GUI 化も視野に入ってくるのですが…

あと、銀河以外の天体のアノテーションについても考えていますが、HyperLeda とは別のデータベースに対応する必要があるため、これはもう少し先になると思います。

*1:なお、SVG のショートハンドプロパティ(複数のプロパティをまとめて記述できるプロパティ)の font プロパティについては、描画には反映されますが、ラベルのレイアウトが崩れます。これはレイアウトのために font-size プロパティを使用するのですが、font プロパティから font-size 値を抽出していないからです。これは当面制限事項とさせてください。

*2:どうもありがとうございます。