・ 変換マトリックス(4x4)で点を変換する

変換マトリックスを使って、点座標を変換するのは、座標系を変えたり、ネストされたオブジェクトのWCSでの位置を得るのに有効です。
その際 (nentsel) が返す変換マトリックスは特別で 3x4 ですから、あらかじめ 4x4 に変換が必要です。

;///////////////////////////////////////////////////////////////////////////////
;INSERT図形にネストされた線分の始点と終点をWCSで取得する 
;///////////////////////////////////////////////////////////////////////////////
(defun Jo_trans_line( / ent en ed et mat pt_l
                     Jof_mat_3to4 Jof_trans Jof_del_last Jof_ch_3dpt )

;*******************************************************************************
;サブルーチン 4x3のマトリックスを4x4に変換 ;
  (defun Jof_mat_3to4 ( mat / a b i mat_col x 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
    )

;*******************************************************************************
;サブルーチン マトリックス変換 ;
  (defun Jof_trans ( pt mat / x )
    (setq pt (append pt '(1.0)))
    (mapcar '(lambda (x) (apply '+ (mapcar '* pt x))) mat)
    )

;*******************************************************************************
;サブルーチン リストの最後の要素を削除 ; 
  (defun Jof_del_last (lst)
    (reverse (cdr (reverse lst)))
    ) 

;*******************************************************************************
; サブルーチン 点座標リストの変換 3D_point ;
  (defun Jof_ch_3dpt( ed mat no_l / x pt_l i )
    (setq pt_l (mapcar '(lambda (x) (cdr (assoc x ed))) no_l))
    (setq pt_l (mapcar '(lambda (x) (Jof_del_last (Jof_trans x mat))) pt_l))
    )

;*******************************************************************************
; メインルーチン (Jo_trans_line) ;
  (while (not ent)
    (setq ent (nentsel "\ネストされた線分を選択 :"))
    (if (= 4 (length ent))
      (progn
        (setq en (car ent))
        (setq mat (Jof_mat_3to4 (caddr ent)));4x4のマトリックスに変換 ;
        (setq et (cdr (assoc 0 (setq ed (entget en)))))
        (if (= et "LINE")
          (setq pt_l (Jof_ch_3dpt ed mat '(10 11)))
          (princ "\n線分を選んでね")
          )
        )
      (princ "\nブロック図形を選んでね")
      )
    )
  (if pt_l
    (progn
      (princ "\n始点:")
      (princ (car pt_l))
      (princ "\n / 終点:")
      (princ (cadr pt_l))
      )
    )
  (princ)
  )

参考文献: http://www1.harenet.ne.jp/~hanafusa/memo/matrix.htm