Newer
Older
TIASShot / docs / 04_TECH / TECH_01_クラス設計.txt
========================================================================
クラス設計 (Class Design)
========================================================================

1. クラス一覧 (Class Overview)
------------------------------------------------------------------------

■ CameraBase(抽象基底クラス)
    ・ファイル: `CameraBase.cs`
    ・カメラに共通する処理をまとめた抽象クラス.
    ・IScam・Lucam の両方が継承する.

■ IScam
    ・ファイル: `IScam.cs`
    ・ImagingSource カメラ(DFK33UX178,DFK23UX249)の実装.
    ・IC Imaging Control SDK(`TIS.Imaging`)を使用する.

■ Lucam
    ・ファイル: `Lucam.cs`
    ・Lumenera カメラ(Lw110)の実装.
    ・Lumenera SDK(`lumenera.api.dll`)を使用する.

■ Form1
    ・ファイル: `Form1.cs`
    ・メインウィンドウ.UI イベントの受け取りとカメラ・光源の操作を担う.

■ PreviewMonitor
    ・ファイル: `PreviewMonitor.cs`
    ・サブモニタへのプレビュー表示フォーム.

■ Config(静的クラス)
    ・ファイル: `Config.cs`
    ・`config.xml` の読み込みユーティリティ.
    ・XPath を使って文字列・整数・浮動小数点数の値を取得する.

■ LightSource
    ・ファイル: `LightSource.cs`
    ・シリアル通信(USB-シリアル変換)による光源の ON/OFF 制御.


2. 継承関係 (Inheritance)
------------------------------------------------------------------------

    CameraBase(抽象)
    ├── IScam       ← ImagingSource カメラ
    └── Lucam       ← Lumenera カメラ


3. CameraBase の主なメンバ (CameraBase Members)
------------------------------------------------------------------------

3-1. 抽象メソッド(派生クラスで実装する)
    ・`Connect() : bool`: カメラに接続する
    ・`Disconnect()`: カメラを切断する
    ・`Shot(numImages, interval)`: 撮影処理

3-2. 公開メソッド
    ・`ShotOne()`: 1枚撮影
    ・`ShotMulti()`: 連続撮影

3-3. 保護メソッド(派生クラスから呼ぶ)
    ・`BootCheck() : bool`: 起動時の前提条件チェック(設定・TCC参照ファイル)
    ・`DetectChart(img)`: ArUco マーカーによるチャート検出
    ・`CalcTcc(img)`: TCC 変換行列の計算・保存
    ・`ConvertImage(src, conv) : Mat`: 画像の色変換
    ・`SaveThread(numImages)`: 画像保存スレッド処理
    ・`GetRatio(value, target) : float`: ゲイン更新比率の計算

3-4. 主なフィールド
    ・`_calibrating`: キャリブレーション残りフレーム数(0 で完了)
    ・`_calibrated`: キャリブレーション完了フラグ
    ・`_chartMasks`: 24色票の ROI マスクリスト
    ・`_convRGB2SRGB`: 次元数をキーとした RGB→sRGB 変換行列の辞書
    ・`_roi`: ROI 矩形(IScam のみ使用)
    ・`_shots`: 撮影済み画像バッファ


4. Form1 とカメラの関係 (Form1 and Camera)
------------------------------------------------------------------------
・Form1 は `CameraBase` 型の `_camera` フィールドを持つ.
・起動時に Lucam → IScam の順で接続を試みる(詳細は `TECH_02` 参照).
・UI スレッドとカメラスレッドをまたぐメソッド(`ShowMessage`,`EnableShots` 等)は
  `InvokeRequired` を確認してスレッドセーフに呼び出す.