========================================================================
リファクタリング計画 (Refactoring Plan)
========================================================================
0. 方針 (Policy)
------------------------------------------------------------------------
・処理の変更は一切行わない.構造の整理のみを目的とする.
・各フェーズ完了後に必ずテストを実施し,動作が変わっていないことを確認してから次へ進む.
・テストの具体的な手順は `TEST_01_テスト仕様.txt` を参照する.
1. 現状の問題点 (Current Issues)
------------------------------------------------------------------------
`CameraBase.cs` に以下の責務が集中している.
・カメラ制御の抽象定義(Connect/Disconnect/Shot)
・チャート検出(ArUco マーカー検出,ホモグラフィ計算,マスク生成)
・色補正処理(TCC行列計算,多項式拡張,画像変換)
・ファイル I/O(CSV読み書き,保存フォルダ生成,撮影情報出力)
・サウンド再生
2. 目標とするディレクトリ構成 (Target Structure)
------------------------------------------------------------------------
TIASshot/
├── Cameras/ ← カメラ制御(CameraBase, IScam, Lucam)
├── ChartDetection/ ← チャート検出(CameraBaseから分離)
├── ColorCorrection/ ← 色補正・TCC計算(CameraBaseから分離)
├── UI/ ← フォーム(Form1, PreviewMonitor)
├── Config.cs ← 設定ファイル読み込み(変更なし)
├── LightSource.cs ← 光源制御(変更なし)
└── Program.cs ← エントリポイント(変更なし)
3. フェーズ構成 (Phases)
------------------------------------------------------------------------
3-1. フェーズ1: フォルダ整理とファイル移動
■ 作業内容
・以下のフォルダを作成し,既存ファイルを移動する.
- `Cameras/` ← CameraBase.cs, IScam.cs, Lucam.cs
- `UI/` ← Form1.cs, Form1.Designer.cs, Form1.resx,
PreviewMonitor.cs, PreviewMonitor.Designer.cs, PreviewMonitor.resx
・名前空間(namespace)はそのまま `TIASshot` で統一する.
・ファイルの中身は変更しない.
■ テスト
・ビルドが成功することを確認する.
・アプリが起動し,カメラが接続されることを確認する(手動).
3-2. フェーズ2: 色補正処理の分離
■ 作業内容
・`ColorCorrection/` フォルダを作成する.
・CameraBase から以下を新クラス `ColorCorrector` に切り出す.
- フィールド: `TCC_SRGB`, `TCC_XYZ`, `ChannelList`, `ExtendChannels`, `UpdateRate`
- メソッド: `ExtendMat`, `CalcConvertMatrix`, `ConvertColor`, `ConvertImage`
- メソッド: `CalcTcc`(チャート RGB 値の受け取りと行列計算・保存を担当)
・CameraBase は `ColorCorrector` を保持し,処理を委譲する.
■ テスト
・ビルドが成功することを確認する.
・回帰テスト: 同一入力画像から算出した変換行列が,リファクタリング前と一致することを確認する.
- 具体的な手順は `TEST_01_テスト仕様.txt` の「2. 回帰テスト」を参照する.
3-3. フェーズ3: チャート検出処理の分離
■ 作業内容
・`ChartDetection/` フォルダを作成する.
・CameraBase から以下を新クラス `ChartDetector` に切り出す.
- フィールド: `ARDict`, `PointsDst40`, `PointsDst41`, `_detectionCount`, `_lastPosition`
- メソッド: `DetectChart`
- 出力: チャートマスクリスト(`List<Mat>`)を戻り値または引数で渡す
・CameraBase は `ChartDetector` を保持し,処理を委譲する.
■ テスト
・ビルドが成功することを確認する.
・回帰テスト: 保存済みの実画像を入力として,チャートマスクの位置が一致することを確認する.
- 具体的な手順は `TEST_01_テスト仕様.txt` の「3. チャート検出テスト」を参照する.
3-4. フェーズ4: ファイル I/O・サウンドの分離
■ 作業内容
・CameraBase から以下をユーティリティクラスとして切り出す(配置先は `Cameras/` または新フォルダ).
- `LoadMatFromCsv`, `SaveMatToCsv`
- `SetSaveFolder`, `WriteInfo`
- `EventSound`
■ テスト
・ビルドが成功することを確認する.
・撮影からファイル保存までの一連の動作を手動で確認する.
・保存された CSV・画像の内容がリファクタリング前と一致することを確認する.
4. 共通ルール (Common Rules)
------------------------------------------------------------------------
・各フェーズは独立したブランチではなく,`refactor/code-cleanup` ブランチ上で順に進める.
・フェーズ完了ごとにコミットする.コミットメッセージは `[clean]` タグを使用する.
- 例: `[clean] 色補正処理を ColorCorrector クラスに分離`
・テストが通らない場合は,次のフェーズに進まない.