経緯
OpenModelicaで1Dシミュレーションをはじめた.
さっそくモデルを自作し,アイコンを作成しようとした.annotation セクションに直接記述するか,OpenModelicaのGUIであるOMEdit(OpenModelica Connection Editor)でアイコンを編集することができる.ただし編集機能の自由度が低いので,ちょっと複雑な画像編集には苦労する.
なにかいい方法はないものかと調べると "MoNK" なるツールを見つけた.
まだ使い始めの段階ではあるけれど,日本語の解説が見当たらなかったので備忘録がてら記事を書くことにした.
MoNK
- ベクター画像編集ソフトウェアInkscapeの拡張機能.
- Inkscape の SVG 画像から Modelica の annotation 文字列を生成する.
- 名称は "A MOdelica iNKscape extension" より.
- 詳細はGitHubのリポジトリを参照のこと.
インストール方法
PCにPythonがインストールされていれば,GitHub から setup.py をダウンロード.つぎのコマンドでインストールされる(と思うが未確認).
python setup.py install_ink
またはこちらからスクリプトファイル(たとえば "MoNK-0.2.0.zip")をダウンロードして解凍し,中身を Inkscape の拡張機能フォルダに置く方法もある.Windows の場合はつぎのフォルダになる.
%userprofile%\AppData\Roaming\inkscape\extensions
インストールができていれば,名前を付けて保存のファイルの種類に "Modelica annotaion (*.mo)" が追加される.
使い方
Inkscapeでつぎのような図形を作成する.
名前を付けて保存から "Modelica annotaion (*.mo)" を選択して保存.
つぎのダイアログが開く.とくに問題がなければ,そのまま "OK" を選択.Modelica annotation ファイルが出力される.
Modelica annotation ファイルをテキストエディタで開くと,下記の annotation 文字列が表示される.
model ModelName
annotation(
Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = false), graphics = {Rectangle(origin = {-100, 100}, lineThickness = 1.5, extent = {{50, 0}, {150, -200}}, radius = 50), Line(origin = {-100, 100}, points = {{50, -100}, {150, -100}}, thickness = 2), Polygon(origin = {-100, 100}, lineThickness = 2.16, points = {{111.42, -80.14}, {100, -99.92}, {88.58, -80.14}, {111.42, -80.14}})}));
end ModelName;
OMEdit から対象のModelicaクラスのテキストビューを開く.annotation セクションにこの文字列を貼り付ける.
アイコンビューを開くと下図がアイコンとして表示される.
注意点
- Modelica annotation ファイルは InkScape で読み込めない.再編集が必要になった場合に備えて別途 Inkscape SVG ファイルとして保存しておく.
- 完全に互換性があるわけではない.どの要素を変換できるかはGitHubの "Features" 参照のこと.
- Modelica annotation ファイルを OMEdit で開くと annotation 文字列が書き換わって図形が崩れる.テキストエディタで開いて annotation 文字列を OMEdit のテキストビューに貼り付けたほうが無難.
補足
環境
- OS は Windows10 を使用.
- OpenModelica は v1.18.0-dev.beta1(64-bit) を使用.
- Inkscape は Inkscape 1.1.1 (3bf5ae0d25, 2021-09-20) を使用.
- MoNK は v0.2.0 を使用.
MoVE
- MoNKと同じく Modelica の annotation 文字列を生成する画像編集ソフトらしい.
- Mac でしか動かない?
- 開発終了して MoNK に引き継がれたらしい.
- 詳細はGitHubのリポジトリを参照のこと.