座標の変換
AutoLISP での座標系変換
AutoLISP で座標変換する際は、trans 関数を用いて、1 つの座標系から別の座標系に点または変位を変換する。 この関数には、点引数 pt を指定し、pt は 3D 点、または 3D 変位ベクトルのどちらかと解釈され、それらは変位引数 disp によって区別される。 pt を変位ベクトルとして扱う場合、 disp 引数は 0(ゼロ)以外でなくてはならず、そうでない場合、 pt は点として扱われる。 from 引数は pt を表す座標系を指定し、 to 引数は必要な座標を指定する。
trans 関数の構文は、次のとおり。
(trans pt from to [disp])
from 引数と to 引数には、次の座標系を指定することができる。
座標系 | 内容 | |
---|---|---|
WCS | ワールド座標系。これは基準となる座標系。その他のすべての座標系は、決して変わることのない WCS を基準にして定義される。WCS を基準にして計測した値は、他の座標系が変更されても一定。 | |
UCS | ユーザ座標系。これは作業座標系。 ユーザは図面の作成作業を簡単にするために UCS を指定する。AutoLISP のルーチンや外部関数から返される点など、CAD のコマンドに渡されるすべての点は、現在の UCS における点(ただし、ユーザがコマンド プロンプトで頭に * を付けた場合は除く)。アプリケーションが CAD のコマンドに WCS、OCS、または DCS の座標を送る場合は、まず trans 関数を呼び出して座標を UCS に変換する必要がある。 | |
OCS | オブジェクト座標系。entget が返す点の値は、オブジェクトそのものを基準にした座標系で表される。通常、これらの点はオブジェクトの用途に応じて WCS、現在の UCS、または現在の DCS に変換される。逆に、entmod や entmake 関数を使用してデータベースに書き込む場合は、その前に点を OCS に変換しなければならない。OCSは、図形座標系(ECS)とも呼ばれる。 | |
DCS | ディスプレイ座標系。表示前にオブジェクトを変換する先の座標系。DCS の原点は CAD のシステム変数 TARGET に格納されている点で、その Z 軸は視線方向。言い換えれば、ビューポートは常にその DCS のプラン ビューということになる。これらの座標を使用すると、CAD ユーザに対する表示位置を決めることができる。from と to の整数コードが 2 と 3 の場合(順序はどちらでもよい)、2 は現在のモデル空間のビューポートを表し、3 はペーパー空間の DCS(PSDCS)を表す。コード 2 を 3 以外の整数コードと一緒に使用すると(または座標系を指定する別の方法を使用すると)、ペーパー空間であれモデル空間であれ、現在の空間の DCS を表すものと仮定される。もう 1 つの引数も、現在の空間における座標系を表すものとみなされる。 | |
PSDCS | ペーパー空間 DCS。この座標系は、現在アクティブなモデル空間のビューポートの DCS との間だけで変換される。 これは基本的に 2D 変換で、 disp 引数が 0(ゼロ)の場合、X と Y の各座標の尺度は常に変更、オフセットされる。Z 座標の尺度は変更されるが、変換されることはない。したがって、Z 座標を使用すると、2 種類の座標系の間の尺度係数を検出できる。PSDCS (整数コード 2)は現在のモデル空間のビューポートだけに変換できる。 from 引数が 3 の場合、to 引数は 2 でなくてはならず、その逆も同じ。 |
- from と to 引数には両方とも、次の方法で座標系を指定できる。
- WCS、現在の UCS、または(現在のビューポートかペーパー空間の)現在の DCS を指定する整数コードとして。
- 図面名または選択セット関数の 1 つによって返される図面名として。これにより、名前の付いたオブジェクトの OCS が指定される。OCS と WCS が同じ場合は、OCS と WCS 間の変換は等値演算になる。
- 3D 押し出しベクトルとして。押し出しベクトルは常にワールド座標で表され、押し出しベクトルの (0,0,1) は WCS そのものを示す。
次の表に、 to 引数と from 引数に使用できる有効な整数コードを示す。
座標系コード
- コード : 座標系
- 0(ゼロ) : ワールド(WCS)
- 1 :ユーザ(現在の UCS)
- 2 :ディスプレイ。コード 0(ゼロ)または 1 と組み合わせて使用する場合、現在のビューポートの DCS、コード 3 と組み合わせて使用する場合、現在のモデル空間ビューポートの DCS
- 3 :ペーパー空間 DCS、PSDCS(コード 2 専用)
次の例は、点を WCS から現在の UCS に変換する。
(setq pt '(1.0 2.0 3.0)) (setq cs_from 0) ; WCS (setq cs_to 1) ; UCS (trans pt cs_from cs_to 0) ; disp = 0 は、pt がポイントであることを示す。