座標系と図面データベース

UCS

変換マトリックスを用いれば、UCS などといった AutoCAD の座標系も表すことが可能です。

現在の UCS を表す変換マトリックスを得る関数は以下のように作ることができます。まず、UCS の原点や X 軸 Y 軸はシステム変数 UCSXDIR、UCSYDIR、UCSORG を調べることによって情報を得ることができます。Z 軸は外積を用いて UCS-Normal 関数で得られます。また UCS-Matrix 関数が現在の UCS を表す変換マトリックスを返します。

(defun UCS-Normal ()
  (3DVector:CrossProduct (getvar "UCSXDIR") (getvar "UCSYDIR"))
)

(defun UCS-Matrix ()
  (make-transformation-matrix
    (getvar "UCSORG")
    (getvar "UCSXDIR")
    (getvar "UCSYDIR")
    )
)

システム変数 UCSORG

タイプ: 3D点 保存先: 図面 初期値: 0.0,0.0,0.0

現在のユーザー座標系 (UCS) の原点が格納されます。座標は、ワールド座標系 (WCS) を使用して格納されます。

システム変数 UCSXDIR

タイプ: 3D点 保存先: 図面 初期値: 1.0,0.0,0.0

現在のユーザー座標系 (UCS) の X 方向が格納されます。方向は、ワールド座標系 (WCS) を使用して格納されます。

システム変数 UCSYDIR

タイプ: 3D点 保存先: 図面 初期値: 0.0,1.0,0.0

現在のユーザー座標系 (UCS) の Y 方向が格納されます。方向は、ワールド座標系 (WCS )を使用して格納されます。

関数の実行結果は以下のようになります。

まずは、UCS が WCS と一致している場合です。

_$ (UCS-Matrix)⏎
((1.0 0.0 0.0 0.0) (0.0 1.0 0.0 0.0) (0.0 0.0 1.0 0.0) (0.0 0.0 0.0 1.0))

【コマンドライン】操作で UCS の原点を 100,200,300 へ移動した後に Z 軸を軸に 45 度回転させた UCS の変換マトリックスは以下の通りです。

_$ (UCS-Matrix) ⏎
((0.707107 -0.707107 0.0 100.0) (0.707107 0.707107 0.0 200.0) (0.0 0.0 1.0 300.0) (0.0 0.0 0.0 1.0))

【コマンドライン】で UCS を操作するために入力する値は、現在の UCS 上と解釈されますので注意してください。つまり、上の例では原点移動してから回転をしていますが、回転を行い次に原点移動を行うと結果は異なります。

ここで得られる UCS 変換マトリックスに UCS の座標を掛けると、WCS の座標が得られ、trans 関数と同じことができます。

なお、現在を含む UCS の情報は、AutoCAD のダイアログから確認できます。UCSMAN コマンドで表示されるダイアログで、任意の座標系を選んでから【詳細】ボタンを押します。

autocad ucsman