・ 窓選択の範囲を取得する

Lispの中で、ユーザーに窓選択で、範囲を指定してもらうことがあります。

(setq pt1 (getpoint "1点目を指示"))
(setq pt3 (getcorner pt1  "\n対角点を指示"))

といった感じで、2点を取得しますが、UCSが傾いていたりすると選択窓の4点を計算で求めるのは困難です。
窓選択や (getcorner) では、UCSの傾きに関係なく、画面上での水平・垂直方向の窓で範囲を指定するためです。

そこで、いったん、取得した点をディスプレイの座標系(DCS)に変換し、計算して4点を求め、再度UCSの座標(必要ならWCSの座標)に戻す必要があります

(setq pt1 (getpoint "1点目を指示"))
(setq pt3 (getcorner pt1 "\n対角点を指示"))
(setq pt1_d (trans pt1 1 2)) ;UCS座標からDCS座標に変換
(setq pt3_d (trans pt3 1 2)) ;UCS座標からDCS座標に変換
(setq pt2 (trans (list (car pt3_d) (cadr pt1_d) (caddr pt1_d)) 2 1)) ;DCS座標からUCS座標に変換
(setq pt4 (trans (list (car pt1_d) (cadr pt3_d) (caddr pt1_d)) 2 1)) ;DCS座標からUCS座標に変換