ステップ別 X-Y 分布画像出力(Value をカラーマップ表示)¶
目的¶
プロジェクトフォルダ / CSVフォルダ / .ipro を入力として、各ステップの (X/Y) 平面上の Value 分布を画像として出力する。
- Value はユーザが変数(列)を選択する
- X/Y は固定(CGNS の座標を使用)
- 矩形領域で切り抜き(ROI)した範囲のみを出力する
- 全ステップ分の画像を作成し、ステップごとに比較できるようにする
スコープ¶
対象¶
- 入力: プロジェクトフォルダ / CSVフォルダ(
Result_*.csv)/.ipro - 出力: 画像ファイル(PNG を想定、拡張子は将来追加可能)
- 表示: Matplotlib によるカラーマップ表示(pcolormesh)+ カラーバー
非対象(当面)¶
- 境界データの可視化
- アニメーション(GIF/MP4)出力(将来検討)
入力¶
1) 入力ファイル¶
- ランチャーで選択された入力パスを対象とする
- プロジェクトフォルダの場合: 内部の CGNS を読み込む
result/Solution*.cgnがある場合は 1ファイル=1ステップ として扱う- それ以外は
Case1.cgnを使用する(将来オプション化予定)
- CSVフォルダの場合:
Result_*.csvを読み込む .iproの場合: 内部を一時展開してプロジェクトフォルダとして扱う
1-1) CSVフォルダ入力の前提¶
- 1ステップ =
Result_*.csv1ファイル - CSV は iRIC 互換フォーマット(先頭2行:
iRIC output t = ...とimax,jmax)を想定 - ステップ番号はファイル名(
Result_{n}.csv)から取得し、取得できない場合はソート順で連番とする
2) 変数(Value)¶
- ユーザが選択した 1 変数を Value として使用
- 前提: CGNS/CSV から生成する DataFrame に列として存在すること
- 例:
ZB,ZS,HS,U,Vなど
3) 切り抜き領域(ROI)¶
回転可能な矩形領域を (X/Y) の座標で指定する。
- 入力形式:
- 画面上の回転矩形をドラッグして指定(長辺/短辺ハンドルでサイズ変更・回転)
- 数値入力(
Cx/Cy/W/H/Angle) - 最小サイズ: 推定した格子間隔(
base_dx/base_dy)を下限とする
4) プレビュー対象ステップ¶
プレビュー表示に使うステップを選択できるようにする。
- 既定:
step=1(FlowSolutionPointers の 1 始まり) - UI(案):
stepを Spinbox/Slider で指定 - 補足: 出力は全ステップ分作成するため、プレビューは「設定確認用」として 1 ステップのみ表示する
出力¶
出力先¶
- ランチャーで指定された出力フォルダ配下
- 例:
output/xy_value_map_<value>/のように、変数ごとにサブフォルダを作成
出力ファイル¶
- ステップごとに 1 枚の画像を出力する
- 例:
step_0001.pngstep_0002.png- ...
- 画像内に含める要素は出力オプションで制御する
- タイトル文字列 / 目盛り / 枠線 / カラーバー / カラーバー名
- タイトル文字列・カラーバー名は空文字なら非表示
表示仕様(プロット)¶
- 描画(既定): 構造格子(I/J)を補間で細分化し、回転後の座標で
matplotlib.axes.Axes.pcolormesh(..., shading="gouraud")を描画 - 回転: ROI 中心を基準に座標を逆回転し、ROI がまっすぐになる向きで表示する
- 解像度: 倍率で指定し、基準間隔(推定した隣接距離)を倍率で割って
dx/dyを決める - 補間: SciPy の
ndimage.zoomにより X/Y/Value を I/J 方向に補間する - 座標系: ROI ローカル座標で表示し、回転後 ROI の左下を
(0, 0)とする(プレビュー/出力共通) - ROI 外混入対策: ROI 外は重み0として補間し、ROI 外の値が混ざらないようにする(NaN で除外)
- タイトル: 出力オプションで指定した文字列をそのまま表示(空文字なら非表示)
- カラーバー:
make_axes_locatableを優先し、失敗時はfig.colorbarにフォールバック - 形状(縦横比)の保持:
ax.set_aspect("equal", adjustable="box")を基本とし、距離のスケールが歪まないようにする- ROI の
xlim/ylimは固定して、ステップごとにオートスケールで形が変わらないようにする figsizeは固定値(既定: 6x4 in)をベースにし、出力はbbox_inches="tight"+pad_inchesでトリミングする- 出力倍率はプレビューのサイズを基準に dpi をスケールする
- 色(見た目):
- カラーマップは「最小/最大の2色」「虹色(iRIC風)」「色相回転」から選択する
- 最小/最大の2色は線形グラデーション(
LinearSegmentedColormap.from_list(...)) - 虹色(iRIC風)は最小/最大色の指定を使用しない
- スケール(色に割り当てる値の範囲):
global(既定): 回転/解像度を反映した ROI 内の全ステップ min/max で固定manual: ユーザがvmin/vmaxを指定- ROI 切り抜き:
- ROI 外は NaN として透明表示(
cmap.set_bad) - 画像は ROI の幅/高さの矩形として出力される
期待するユーザフロー(GUI)¶
1) ランチャーで入力(プロジェクトフォルダ/CSVフォルダ/.ipro)と出力フォルダを選択
2) 本機能を起動
3) Value 変数を選択
4) ROI(回転矩形)を指定(編集キャンバスでドラッグ or 数値入力)
5) プレビュー対象ステップを選択
6) 色/スケールを指定
- カラーマップ(最小/最大の2色 / 虹色(iRIC風) / 色相回転)
- スケール: 自動(全ステップ)/手動(数値入力)
- 手動の場合は 表示下限/表示上限 を指定
7) 表示オプションを指定
- 目盛り / 枠線 / カラーバー
- タイトル文字列 / カラーバー名(空文字なら非表示)
8) フォントサイズを指定
9) 出力オプションを指定
- 余白(in) / 出力倍率 / 出力ステップ(開始/終了/間引き)
10) 解像度倍率を指定
11) 実行 → 指定ステップ分の画像を出力(「現在のステップを出力」でプレビュー中の step だけ出力)
12) 完了ダイアログで出力先フォルダを案内
プレビュー仕様(UI/挙動)¶
プレビューは「ユーザが指定した ROI/変数/色/スケールが意図通りか」を確認するための表示とする。
- 画面構成
- 左側に設定パネル、右側に プレビュー(上) と 編集キャンバス(下) を配置
- 編集キャンバスは全体+10%余白を初期表示し、
Ctrl+スクロールでズーム - ROI は回転矩形として表示し、長辺/短辺ハンドルでサイズ変更、回転ハンドルで角度変更を行う
- 底辺が分かるように ROI の底辺ラインを強調表示する
- 編集キャンバスは目盛りやタイトルを表示せず、プレビューと同じ高さで表示する
- 編集キャンバスはキャンバス全域を操作領域として扱い、余白も含めて ROI 操作ができる
- 数値入力(
Cx/Cy/W/H/Angle)とドラッグ操作は相互に同期する - プレビューで表示する内容
- 選択した 1 ステップ分の ROI ローカル座標の pcolormesh + カラーバー
- タイトルは出力オプションの文字列を表示(空文字なら非表示)
- 出力オプション(目盛り/枠線/カラーバー/タイトル/フォントサイズ/カラーバー名/余白(in)/出力倍率)をプレビューと出力で共通に適用する
bbox_inches="tight"相当の出力範囲を破線で表示する- ROI 未確定時は「ROI 確定待ち」の空プレビューを表示する
- 即時反映(必須)
- Value 変数変更 → 即座に再描画
- ROI 変更 → リリース時に再描画(ドラッグ中は ROI のみ更新)
- 最小/最大色変更 → 即座に再描画
- 解像度倍率変更 → 即座に再描画
- スケール変更:
manual: vmin/vmax 入力を即反映- vmin/vmax はレンジスライダーでも操作でき、範囲は 全ステップの min/max に固定する
- レンジスライダーは 比率(0-1) を保持し、範囲が変わっても相対位置を維持する
globalスケールが未計算の間はレンジスライダーを無効化するglobal: ROI 内の全ステップを通した min/max を再計算して反映- 計算はバックグラウンドで行い、計算中はステータス表示を行う
- 計算完了前は「暫定」として現在ステップの min/max で描画する
- プレビュー軽量化(現状)
- ROI ドラッグ中のみ解像度を落とし、推定点数が 60,000 を超える場合は
dx/dyを自動調整する - 編集キャンバスの背景は最大 40,000 点まで間引いて表示する
- 画像出力時は指定解像度で描画する(プレビューと出力を分ける)
現状の実装¶
- GUI:
iRIC_DataScope/xy_value_map/gui.py - 左側に設定パネル、右側にプレビュー(上)/編集キャンバス(下)を配置
- 編集キャンバスは全体表示+10%余白を固定し、
Ctrl+スクロールでズーム - ROI は回転矩形として表示し、長辺/短辺ハンドルでサイズ変更、回転ハンドルで角度変更
- ROI 底辺ラインを強調表示して向きを明示
- 編集キャンバスは目盛り・タイトルを表示せず、プレビューと同じ高さで表示する
- 編集キャンバスの背景はラスタ化した値マップを表示し、ROI 操作中の再描画を抑えて軽量化
- 編集キャンバスの背景はグレースケールで描画し、プレビューとは見た目で区別する
- 編集キャンバスの色スケールは ROI に依存せず、全体の min/max(1ステップ・間引き)で固定
- カラーマップは「最小/最大の2色」「虹色(iRIC風)」「色相回転」を選択可能
- 虹色(iRIC風)は最小/最大色の指定を使用せず、UI上も無効化する
manualの vmin/vmax はレンジスライダーで調整でき、範囲は ROI 内・全ステップの自動計算値に固定- プレビュー/出力は ROI ローカル座標で描画し、左下を
(0, 0)とする - 編集キャンバスには step/value/scale/zoom のオーバーレイを表示する(日本語)
- 操作ヒント(移動/回転/拡縮/ズーム)を編集キャンバスに日本語で表示する
- 編集キャンバスには格子領域の外周ラインを描画し、形状が分かるようにする
- ROI/変数/色/スケール/step の変更はプレビューに反映(ROI ドラッグはリリース時のみ、他は200ms デバウンス)
- 解像度倍率の基準となる
dx/dyは 1 ステップ目の格子隣接距離の中央値から推定 globalスケールは ROI 確定後のみバックグラウンド計算し、計算中はステータスを表示- ROI 未確定時はプレビューを「ROI 確定待ち」として表示する
- プレビューは出力と同じ描画処理を使用し、
figsize(6x4 in)+pad_inchesを枠内に収まるよう縮小表示する - プレビューには
bbox_inches="tight"相当の範囲を破線で表示する - ROI ドラッグ中は解像度を下げて軽量化し、リリース後に指定解像度で描画する
- タイトル文字列/カラーバー名は空文字で非表示(タイトル表示のチェックはなし)
- 目盛り/枠線/カラーバー/フォントサイズ/余白(in)/出力倍率は出力オプションで制御する
- 出力ステップは範囲スライダー+開始/終了入力で指定し、範囲外は正規化する
- データ取得:
iRIC_DataScope/common/iric_data_source.py DataSourceが プロジェクトフォルダ / CSVフォルダ(必要なら.ipro)を統一的に扱うresult/Solution*.cgnがある場合は系列として扱い、無ければCase1.cgnを使用する.iproは内部の CGNS を一時ディレクトリへ展開し、セッション中は使い回す- CGNS 読み込みは
iRIC_DataScope/common/cgns_reader.py(resolve_case_cgn,iter_iric_step_frames)を利用 - CSVフォルダは
Result_*.csvを走査し、必要列のみpandas.read_csv(usecols=...)で読み込む - 当面は「ノード座標系(X/Y と同 shape の変数)」のみを扱う
- 画像出力:
iRIC_DataScope/xy_value_map/main.py globalは ROI 内の全ステップを 1 回走査して min/max を決め、全ステップで同一スケールに固定- ROI 角度と
dx/dyを反映した I/J 補間結果を出力する - ROI 内が空のステップはスキップし、ログに残す
- 進捗は GUI の進捗ウィンドウで表示し、完了/失敗はダイアログで通知
- 出力オプションにより目盛り/枠線/カラーバーを切り替え、タイトルは文字列指定(空で非表示)
依存ライブラリ¶
matplotlib(必須)- 画像出力/プレビューに使用
- PyInstaller では環境により
--collect-data matplotlib等の追加が必要になる場合がある scipy(補間用)ndimage.zoomを使用(I/J 補間とマスク重み付け)
エラーと扱い¶
- Value 列が存在しない
- エラーダイアログで通知し、実行中止
- ROI 内に点が存在しない
- プレビューは「ROI 内に点がありません」を表示
- 全ステップ出力では該当ステップをスキップし、ログに残す
- このステップのみ出力ではエラーとして扱う
- 出力先に書き込めない
- エラーダイアログで通知
globalスケール計算に失敗- エラーダイアログで通知し、計算を中断する
受け入れ条件(最低限)¶
- プロジェクトフォルダ / CSVフォルダ /
.iproを入力にして全ステップ分の画像が出力される - ROI 指定が反映され、画像が切り抜き範囲のみで生成される
- Value がカラーマップで表現され、カラーバーが表示される
- 最小/最大色がユーザ指定に従って反映される
- ROI 角度(ROI 中心)と
dx/dyが出力に反映される