・ 長さ寸法(平行寸法/回転寸法)の測定値を取得する
長さ寸法の測定値は、グループコード42を調べればわかります。
しかし、この値は丸められていて正確ではないようです。
これは、誤りでした。
エンティティーデータの数値は丸められて表示されますが、内部的には十分に信頼できる制度で保持されています。(2005/06/04修正)
必要ないけど、定義点から再度取得してみました・・・・(^^ゞ
平行寸法は、定義点1と定義点2の距離を取得すればよいのですが、回転寸法はかなり面倒・・・・(~_~;)
DXF13→DXF14のベクトルを、寸法線の方向ベクトルに正射影して、その長さを取得します。

(defun Jo_dim_len ( / )
;**********************************************************************************;
;サブルーチン (選択した寸法の計測値);
(defun Jof_dim_dist ( v_0 e_13 e_14 / )
(Jof_v_len (Jof_v_orth v_0 (mapcar '- e_14 e_13)))
)
;************************************************************************************;
;サブルーチン ベクトルの長さを返す
(defun Jof_v_len (
v;ベクトル;
/ )
(sqrt (apply '+ (mapcar '(lambda (x) (expt x 2)) v)))
)
;************************************************************************************;
;サブルーチン ベクトルの内積(inner product)
; 2ベクトルが直交する場合 0 となる
(defun Jof_v_inp (
v1;ベクトル;
v2;ベクトル;
/ )
(apply '+ (mapcar '* v1 v2))
)
;************************************************************************************;
;サブルーチン 正射影ベクトルを返す
; v2のv1への正射影ベクトルを取得
(defun Jof_v_orth(
v1;ベクトル;
v2;ベクトル;
/ v3 )
(setq v3 (/ (Jof_v_inp v1 v2) (expt (Jof_v_len v1) 2)))
(mapcar '(lambda (x) (* v3 x)) v1)
)
;**********************************************************************************;
;サブルーチン (選択した寸法の寸法線の方向ベクトル);
(defun Jof_v_0 ( ed / e_13 e_14 e_50 e_14a e_14b)
(setq e_13 (cdr (assoc 13 ed)))
(setq e_14 (cdr (assoc 14 ed)))
(setq e_50 (cdr (assoc 50 ed)))
(if (= 1 (logand (cdr (assoc 70 ed)) 1)) ;平行寸法なら ;
(mapcar '- e_14 e_13)
(progn
(setq e_14a (polar e_14 e_50 1))
(setq e_14b (polar e_14 e_50 -1))
(if (> (distance e_13 e_14a)(distance e_13 e_14b))
(polar '(0 0 0) e_50 1)
(polar '(0 0 0) e_50 -1)
)
)
)
)
;**********************************************************************************;
;メインルーチン
(setq ed (entget (car (entsel "\n長さ寸法を選択"))))
(setq d_len (Jof_dim_dist (Jof_v_0 ed) (cdr (assoc 13 ed)) (cdr (assoc 14 ed))))
(princ (strcat "\n長さは" (rtos d_len)))
(princ)
)