・ (nentsel) で取得した変換マトリックスを4x3から4x4に変換する
(nentsel)
はブロック図形にネストされた構成要素を選択した場合、4つの要素を含むリストを返します。
その内、3番目のリストが変換マトリックスです。
これを、計算しやすい、(nentselp)が返す 4x4
の変換マトリックスに変換するには、行と列を入れ替えて(0.0
0.0 0.0 1.0)を追加します。
;//////////////////////////////////////////////////////////////////////////////////////;
;Jo_nent_mat.lsp nentselで選択したINSERT図形のマトリックスを4x4のマトリックスに変換
;
;
By Kamijo 2003/03/26 ;
;//////////////////////////////////////////////////////////////////////////////////////;
(defun Jo_nent_mat ( / ent mat Jof_mat_3to4)
;サブルーチン 4x3のマトリックスを4x4に変換 ;
(defun Jof_mat_3to4 ( mat / a b i mat_col mat4)
(setq mat (mapcar '(lambda (a b) (append a (list b))) mat '(0.0 0.0 0.0 1.0)))
(setq i 0)
(repeat (length mat)
(setq mat_col (list (mapcar '(lambda (x) (nth i x)) mat)))
(setq mat4 (append mat4 mat_col))
(setq i (1+ i))
)
mat4
)
;メインルーチン ;
(setq ent (nentsel "\nブロック図形を選択:"))
(if (/= 4 (length ent))
(progn
(princ "\nブロック図形は選択されませんでした")
(exit)
)
)
(setq mat (caddr ent))
(setq mat (Jof_mat_3to4 mat))
(princ "\n4x4の変換マトリックス")
(mapcar 'print mat)
(princ)
)
参考文献: http://www1.harenet.ne.jp/~hanafusa/memo/matrix.htm