linkcad.controller
上位レベルの変換ワークフローコントローラーです。linkcad.conv を直接扱う代わりに、変換ウィザードの完全な状態機械(形式選択、オプション設定、読み込み、ツール適用、書き出し)が必要なときに使用します。
from linkcad.v1.controller import ( ConversionController, ConversionState, ControllerEvent, IControllerListener, ProgressInfo,)クラス
ConversionController
LinkCAD の変換ウィザードで使われる多段階の変換ワークフローを統括します。
from linkcad.v1.controller import ConversionController
ctrl = ConversionController()ConversionController.import_format = "GDSII"ConversionController.export_format = "DXF"ctrl.selected_input_files = ["/data/design.gds"]ConversionController.output_file = "/data/design.dxf"
ctrl.start_read()dwg = ctrl.current_drawingif dwg is None: raise RuntimeError("Import produced no drawing")
ctrl.start_write()print(ctrl.current_state)形式の選択と出力パスはエンジン側のプロセス全体で共有される状態なので、import_format、export_format、output_file は静的プロパティです。クラスに対して代入してください。インスタンス経由での読み取りも可能で、同じ値が得られます。
| プロパティ / メソッド | 説明 |
|---|---|
ConversionController() | 新しいコントローラーインスタンスを作成します |
ConversionController.import_format / .export_format | 形式名(例: "GDSII")。静的、代入可能 |
ConversionController.output_file | 出力ファイルパス。静的、代入可能 |
ctrl.selected_input_files | 入力ファイルパスのリスト。代入可能 |
ctrl.set_import_options(options_json) / ctrl.set_export_options(options_json) | JSON 文字列としてオプションを適用します |
ctrl.tools_enabled | 読み込みと書き出しの間にツールを実行するかどうか。代入可能 |
ctrl.configure_tools(tools_config) | ツール段階を JSON で構成します |
ctrl.batch_mode | バッチ変換モード。代入可能 |
ctrl.start_read() | 入力ファイルの読み込みを開始します |
ctrl.start_write() | 出力ファイルの書き出しを開始します |
ctrl.start_batch() | バッチ変換を開始します |
ctrl.finish_operation(success) | 現在の操作を完了として記録します |
ctrl.cancel_current_operation() | 実行中の操作をキャンセルします |
ctrl.operation_in_progress | 操作の実行中は True |
ctrl.next() / ctrl.back() / ctrl.reset() | ワークフローの状態を移動します |
ctrl.can_go_next / ctrl.can_go_back | 移動が可能かどうか |
ctrl.current_state | 現在の ConversionState |
ctrl.current_drawing | 読み込まれた Drawing、または None |
ctrl.current_progress | 現在の ProgressInfo |
ctrl.import_log | インポートログ(IEventLogReader) |
ctrl.export_log | エクスポートログ(IEventLog) |
ctrl.conversions | 基盤となる Conversions コレクション——linkcad.conv を参照 |
ctrl.add_listener(listener) / ctrl.remove_listener(listener) | IControllerListener の登録/解除 |
set_import_options() と set_export_options() はメソッドのままです。コントローラーは JSON をそのままプラグインへ渡し、読み返せるものを何も保持しません。ゲッターのないプロパティはプロパティではありません。
ConversionState
変換ウィザードの各ページを表す列挙型です。
| 値 | 説明 |
|---|---|
ConversionState.Begin | 初期状態 |
ConversionState.SelectFormat | インポート/エクスポート形式の選択 |
ConversionState.ImportOptions | インポートオプションのページ |
ConversionState.ExportOptionsPre | 読み込み前に表示されるエクスポートオプション |
ConversionState.ReadFile | 入力ファイルの読み込み |
ConversionState.ApplyTools | ジオメトリツールの適用 |
ConversionState.ReadLog | インポートログの確認 |
ConversionState.OpenPolys | 開いたポリラインの処理 |
ConversionState.BatchTools | バッチ実行向けのツール設定 |
ConversionState.Structure | セル/レイヤー構造のページ |
ConversionState.ExportOptionsPost | 読み込み後に表示されるエクスポートオプション |
ConversionState.SelectBatchFiles | バッチファイルの選択 |
ConversionState.ConvertBatchFiles | バッチ変換の実行中 |
ConversionState.WriteFile | 出力ファイルの書き出し |
ConversionState.WriteLog | エクスポートログの確認 |
ConversionState.Summary | サマリーページ |
ConversionState.End | ワークフロー完了 |
ControllerEvent
コントローラーが発する通知の列挙型です。
| 値 | 説明 |
|---|---|
ControllerEvent.StateChanged | ワークフローの状態が変わりました |
ControllerEvent.PageActivated | ウィザードのページがアクティブになりました |
ControllerEvent.ProgressUpdated | 進捗情報が変化しました |
ControllerEvent.LogUpdated | ログにエントリが追加されました |
ControllerEvent.DrawingChanged | 現在の図面が置き換えられました |
ControllerEvent.OperationFinished | 操作が完了しました |
ControllerEvent.OperationCancelled | 操作がキャンセルされました |
ControllerEvent.ErrorOccurred | エラーが報告されました |
ProgressInfo
ctrl.current_progress が返す進捗のスナップショットです。
| プロパティ | 説明 |
|---|---|
percentage | 進捗率(0-100) |
current_operation | 現在のステップの説明 |
current_file | 処理中のファイル |
current_file_index | 現在のファイルのインデックス |
total_files | ジョブ内のファイル数 |
IControllerListener
コントローラーの通知を受け取るには、これを継承します。すべてのメソッドをオーバーライドする必要があります。
from linkcad.v1.controller import ConversionController, IControllerListener
class Watcher(IControllerListener): def on_state_changed(self, new_state): print(f"state: {new_state}") def on_page_activated(self, page): pass def on_progress_updated(self, progress): print(f"{progress.percentage}%") def on_log_updated(self): pass def on_drawing_about_to_be_cleared(self, drawing): pass def on_drawing_changed(self, drawing): pass def on_operation_finished(self, success): print(f"finished: {success}") def on_operation_cancelled(self): pass def on_error_occurred(self, message): print(f"error: {message}")
ctrl = ConversionController()watcher = Watcher()ctrl.add_listener(watcher)| メソッド | 呼ばれるタイミング |
|---|---|
on_state_changed(new_state) | ワークフローの状態が変わったとき |
on_page_activated(page) | ウィザードのページがアクティブになったとき |
on_progress_updated(progress) | 進捗が更新されたとき |
on_log_updated() | ログが更新されたとき |
on_drawing_about_to_be_cleared(drawing) | 現在の図面が破棄される直前 |
on_drawing_changed(drawing) | 図面が変わったとき |
on_operation_finished(success) | 操作が完了したとき |
on_operation_cancelled() | 操作がキャンセルされたとき |
on_error_occurred(message) | エラーが発生したとき |