CODE10:選択した文字列の角度を選択した線分の角度に合わせる
2023年05月14日
;選択した文字列の角度を線分の角度に合わせる;+++++++++++++(defun C:CODE10 ( / Flg Obj Ent0 TextObj LineObj Lst x10 y10 x11 y11 dx dy θ);+++++++++++++ (princ "\n文字列を選択:") (setq Obj (ssget '((0 . "TEXT,MTEXT")))) (if (not(= Obj nil));文字列(TEXT/MTEXT)が選択されたら・・・ (progn (setq cnt 0) (setq num (sslength Obj)) (setq Obj2 (car (entsel "\n角度参照する線分(LINE)を選択:"))) (if (not(= Obj2 nil));Obj2が選択されていたら・・・ (progn (setq Ent0 (cdr(assoc 0 (entget Obj2)))) (if (= Ent0 "LINE") ;大文字必須 (progn (setq LineObj (entget Obj2)) (setq Lst (assoc 10 LineObj));始点情報List (setq x10 (nth 1 Lst) y10 (nth 2 Lst)) (setq Lst (assoc 11 LineObj));終点情報List (setq x11 (nth 1 Lst) y11 (nth 2 Lst)) (setq dx (- x11 x10) dy (- y11 y10)) (setq θ (atan dy dx));rad (if (> θ (/ PI 2));+90° (setq θ (- θ PI))) (if (< θ (/ PI -2));-90° (setq θ (+ θ PI))) (while (< cnt num) (setq Ent (ssname Obj cnt)) (setq TextObj (entget Ent)) ;TextObj 50 の情報(角度)を書き換え (setq TextObj (subst (cons 50 θ) (assoc 50 TextObj) TextObj)) (entmod TextObj);TextObjのDXF図形情報書き換え (setq cnt (1+ cnt)) );while );progn (princ "\n選択エラー:線分(LINE)ではありません\n") );if );progn );if );progn (alert "選択エラー:文字列(TEXT/MTEXT)が選択されていません") );if (princ))