注釈コマンド
このページでは、cad-viewer における注釈コマンドの実装方法を、コマンド層と UI インタラクション層の両方を含めて紹介します。
この設計は、システム変数、現在のレイヤ、エンティティ描画スタイルといった AutoCAD に似た概念に密接に従っています。
概要
cad-viewer の注釈(注釈円、矩形、雲形矩形、スケッチなど)は、次のように実装されています。
- 共通の基底クラスから派生した専用のコマンド
- 専用の注釈レイヤ上に動的に作成されるエンティティ
- レイヤスタイルではなくシステム変数によって制御される描画スタイル
- コマンド実行中にシステム変数を変更する一時的な UI ツールバー
このアプローチにより、次のことが保証されます。
- すべての注釈コマンドで一貫した動作
- すべての注釈の簡単な表示/非表示
- AutoCAD スタイルのワークフローになじみがあること
コマンド部分
基本コマンドクラス
すべての注釈関連コマンドは、同じ基底クラスを継承します。
この基底クラスは、次のような共通の動作を一元化します。
- 注釈レイヤの管理
- システム変数のバックアップと復元
- コマンドのライフサイクル処理(開始 / 終了 / キャンセル)
AcApBaseRevCmd を継承することで、すべての注釈コマンドが同じ実行パターンとシステム変数の動作に従います。
注釈レイヤの管理
すべての注釈エンティティは、専用の注釈レイヤ上に作成されます。このレイヤは:
- 存在しない場合は動的に作成される
- 注釈コマンドの実行中にのみ使用される
内部的には、これはシステム変数を操作することで実現されています。
clayer(現在のレイヤ)
ワークフロー
注釈エンティティを作成する前に:
clayerの元の値が保存されるclayerが注釈レイヤに切り替えられる
注釈エンティティが作成される
コマンドの終了後(またはキャンセル後):
clayerが元の値に復元される
これにより、次のことが保証されます。
- 注釈が常に正しいレイヤに配置される
- ユーザーのレイヤ状態が恒久的に変更されない
注釈の表示 / 非表示
注釈の非表示または表示は、次のようにシンプルに実装されています。
- 注釈レイヤを非表示または表示する
エンティティごとの可視性ロジックは必要ありません。
これにより、注釈の可視性管理が効率的かつ一貫したものになります。
エンティティ描画スタイルの解決
注釈エンティティは、その外観にレイヤスタイルを使用しません。
代わりに、描画スタイルは次のようなシステム変数から解決されます。
cecolor— 現在のエンティティの色celweight— 現在のエンティティの線幅
この設計により、次のことが可能になります。
- 各注釈が作成時の視覚スタイルを保持する
- レイヤスタイルの変更が既存の注釈に影響しない
UI 部分
エンティティ描画スタイルツールバー
注釈エンティティを作成する際に、次の UI コンポーネントが表示されます。
動作
ビューアの上部中央に表示される
ユーザーが次のものを変更できる
- 色
- 線幅
- その他のエンティティ描画スタイル
このツールバーはファイル名の表示と重なるため:
- ツールバーが表示されている間はファイル名が一時的に非表示になる
システム変数のバインディング
MlEntityDrawStyleToolbar でのユーザー操作は、次のようなシステム変数を直接変更します。
cecolorcelweight
これらのシステム変数は、注釈エンティティの作成時に使用され、次のことを保証します。
- ユーザーがツールバーで見たものと、描画されるものが一致する
- 注釈の動作が AutoCAD スタイルのワークフローと一貫している
システム変数の復元
注釈コマンドが終了した後(成功したかどうかに関わらず):
- 変更されたシステム変数(
cecolor、celweightなど)が元の値に復元される
これにより、次のことが保証されます。
- 注釈コマンドがグローバルな図面状態に恒久的な影響を与えない
- ユーザーが注釈コマンドと通常の作図コマンドを安全に切り替えられる
まとめ
cad-viewer の注釈システムは、3 つの主要な考え方を中心に構築されています。
コマンドの継承
- すべての注釈コマンドが共通の基底実装を共有する
レイヤベースの構成
- すべての注釈が動的に管理される注釈レイヤ上に存在する
システム変数駆動のスタイル
- 描画スタイルはレイヤスタイルではなく、システム変数を介して制御される
このアーキテクチャにより、次のことが提供されます。
- 予測可能なコマンド動作
- 簡単な注釈管理
- なじみのある CAD ライクなユーザー体験