「Trans」の版間の差分
編集の要約なし |
細編集の要約なし |
||
(同じ利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
{{AutoLISP}} | |||
; 構文 | ; 構文 | ||
: (trans ''pt'' ''from'' ''to'' [''disp'']) | : (trans ''pt'' ''from'' ''to'' [''disp'']) | ||
5行目: | 6行目: | ||
; 機能 | ; 機能 | ||
: ある座標系から別の座標系に、点(または変位)を変換する。 | : ある座標系から別の座標系に、点(または変位)を変換する。 | ||
; 引数 | ; 引数 | ||
:* pt : 3D 点または 3D 変位(ベクトル)を表す 3 つの実数リスト。 | :* pt : 3D 点または 3D 変位(ベクトル)を表す 3 つの実数リスト。 | ||
:* from : pt 引数の座標系を表す整数コード、項目名、または 3D 押し出しベクトル。整数コードには、次の値の 1つを指定することができる。 | :* from : pt 引数の座標系を表す整数コード、項目名、または 3D 押し出しベクトル。整数コードには、次の値の 1つを指定することができる。 | ||
: | :** 0 ワールド座標系(WCS) | ||
: | :** 1 ユーザ座標系(現在の UCS) | ||
: | :** 2 コード 0(ゼロ)または 1 と組み合わせて使用した場合、現在のビューポートのディスプレイ座標系(DCS)を表す。コード 3 と組み合わせて使用した場合、現在のモデル空間ビューポートの DCSを表す。 | ||
: | :** 3 ペーパー空間 DCS(コード 2 との組み合わせだけで使用する) | ||
; | ; | ||
:* to : 関数が返す点の座標系を表す整数コード、項目名、または 3D 押し出しベクトル。 有効な整数コードのリストについては、from 引数を参照。 | :* to : 関数が返す点の座標系を表す整数コード、項目名、または 3D 押し出しベクトル。 有効な整数コードのリストについては、from 引数を参照。 | ||
26行目: | 28行目: | ||
; サンプル | ; サンプル | ||
: (setq pt1 (getpoint)) | <pre class="brush:autolisp;"> | ||
(setq pt1 (getpoint)) ;; >(6.85268 3.94705 0.0) | |||
(trans pt1 0 1) ;; > (-2.05459 -4.40897 6.23523) | |||
(trans pt1 0 1 T) ;; >(-4.36405 -5.28773 3.94124) | |||
; --- | |||
; 次の例では、UCS を、WCS の Z 軸を中心に反時計回りに 90 度回転させている。 | |||
(trans '(1.0 2.0 3.0) 0 1) ;; (2.0 -1.0 3.0) | |||
(trans '(1.0 2.0 3.0) 1 0) ;; (-2.0 1.0 3.0) | |||
</pre> | |||
: 座標系については、AutoCAD の『AutoLISP 開発者用ガイド』の「[[座標系の変換]]」に詳細な説明がある。AutoCADとIJCADで考え方は同じ。IntelliCAD 6.xベースでは同じ式で変換された座標が AutoCAD と IJCAD で異なる事があった。 | |||
: 文字の挿入点から(オブジェクト スナップを使用せずに) | <pre class="brush:autolisp;"> | ||
; 文字の挿入点から(オブジェクト スナップを使用せずに)線分を描くには、 | |||
; 文字オブジェクトの挿入点を文字オブジェクトの OCS から UCS に変換する。 | |||
(trans text-insert-pointtext-ename 1) | |||
; 上記の変換を行うことにより、結果を、始点を求めるプロンプトに渡すことができる。 | |||
; 一方、点(または変位)の値を entmod 関数に渡すには、その前にその図形の OCS に変換しなければならない。 | |||
; たとえば、UCS で (MOVEコマンドを使用せずに)円を(10,20,0)移動したい場合、 | |||
; 変位を UCS から円の OCS に変換する必要がある。 | |||
(setq circle-ename (car (entsel))) | |||
(trans '(10 20 0) 1 circle-ename t) | |||
> (-7.07107 21.2132 0.0) | |||
; ...結果の変位はWCSでの移動距離になるので、円の中心点に加える処理をする。 | |||
; (円の中心点(OCS)はWCSと同じ。) | |||
;--- | |||
; たとえば、ユーザが入力した点があり、線分のどちらの端がその点に近いかを調べる場合、 | |||
; ユーザが入力した点を UCS から DCS に変換する。 | |||
(trans user-point 1 2) | |||
; 次に、線分の端点を OCS から DCS に変換する。 | |||
(trans endpoint line-ename 2) | |||
; これによって、ユーザの点と線分の両端の間の距離を計算することが可能になり(Z 座標は無視)、 | |||
; どちらの端が近いかを判別できる。 | |||
</pre> | |||
2016年8月29日 (月) 11:05時点における最新版
- 構文
- (trans pt from to [disp])
- 機能
- ある座標系から別の座標系に、点(または変位)を変換する。
- 引数
-
- pt : 3D 点または 3D 変位(ベクトル)を表す 3 つの実数リスト。
- from : pt 引数の座標系を表す整数コード、項目名、または 3D 押し出しベクトル。整数コードには、次の値の 1つを指定することができる。
- 0 ワールド座標系(WCS)
- 1 ユーザ座標系(現在の UCS)
- 2 コード 0(ゼロ)または 1 と組み合わせて使用した場合、現在のビューポートのディスプレイ座標系(DCS)を表す。コード 3 と組み合わせて使用した場合、現在のモデル空間ビューポートの DCSを表す。
- 3 ペーパー空間 DCS(コード 2 との組み合わせだけで使用する)
-
- to : 関数が返す点の座標系を表す整数コード、項目名、または 3D 押し出しベクトル。 有効な整数コードのリストについては、from 引数を参照。
- disp : nil 以外の値を指定すると、pt 引数は点ではなく3D 変位として扱われる。
- from 引数 または to 引数に図形名を使用する場合、entnext、entlast、entsel、nentsel、ssname 関数が返すのと同じ形式の値を渡さなければならない。この形式を使用することによって、特定のオブジェクトのオブジェクト座標系(OCS)との間で点を変換できる。 (オブジェクトによっては、OCS と WCS が等しいものもあり、このようなオブジェクトでは、OCS と WCS の間の変換で演算は行われない。) 3D 押し出しベクトル (3 つの実数のリスト)でも、オブジェクトの OCS との間で変換できる。 しかし、OCS と WCS が等しいオブジェクトの場合はその限りではない。
- 戻り値
- 指定された to 座標系での 3D 点(または変位)。
- サンプル
(setq pt1 (getpoint)) ;; >(6.85268 3.94705 0.0) (trans pt1 0 1) ;; > (-2.05459 -4.40897 6.23523) (trans pt1 0 1 T) ;; >(-4.36405 -5.28773 3.94124) ; --- ; 次の例では、UCS を、WCS の Z 軸を中心に反時計回りに 90 度回転させている。 (trans '(1.0 2.0 3.0) 0 1) ;; (2.0 -1.0 3.0) (trans '(1.0 2.0 3.0) 1 0) ;; (-2.0 1.0 3.0)
- 座標系については、AutoCAD の『AutoLISP 開発者用ガイド』の「座標系の変換」に詳細な説明がある。AutoCADとIJCADで考え方は同じ。IntelliCAD 6.xベースでは同じ式で変換された座標が AutoCAD と IJCAD で異なる事があった。
; 文字の挿入点から(オブジェクト スナップを使用せずに)線分を描くには、 ; 文字オブジェクトの挿入点を文字オブジェクトの OCS から UCS に変換する。 (trans text-insert-pointtext-ename 1) ; 上記の変換を行うことにより、結果を、始点を求めるプロンプトに渡すことができる。 ; 一方、点(または変位)の値を entmod 関数に渡すには、その前にその図形の OCS に変換しなければならない。 ; たとえば、UCS で (MOVEコマンドを使用せずに)円を(10,20,0)移動したい場合、 ; 変位を UCS から円の OCS に変換する必要がある。 (setq circle-ename (car (entsel))) (trans '(10 20 0) 1 circle-ename t) > (-7.07107 21.2132 0.0) ; ...結果の変位はWCSでの移動距離になるので、円の中心点に加える処理をする。 ; (円の中心点(OCS)はWCSと同じ。) ;--- ; たとえば、ユーザが入力した点があり、線分のどちらの端がその点に近いかを調べる場合、 ; ユーザが入力した点を UCS から DCS に変換する。 (trans user-point 1 2) ; 次に、線分の端点を OCS から DCS に変換する。 (trans endpoint line-ename 2) ; これによって、ユーザの点と線分の両端の間の距離を計算することが可能になり(Z 座標は無視)、 ; どちらの端が近いかを判別できる。
- trans 関数は、2D 点を変換することもできる。 2D 点の変換は、Z 座標に適切な値を設定することによって行われる。 使用される Z 座標は、指定された from 座標系と値を点として変換するか変位として変換するかによって決定される。 値を変位として変換する場合、Z 座標は常に 0.0 になる。 値を点として変換する場合、Z 座標に設定する値は次の表に示すように決定される。
変換する 2D 点の Z の値 from Z に設定する値 WCS 0.0 UCS 現在の高度 OCS 0.0 DCS 現在の作図平面への投影 (UCS の XY 平面 + 現在の高度) PSDCS 現在の作図平面への投影 (UCS の XY 平面 + 現在の高度)