fc2ブログ

CODE10:選択した文字列の角度を選択した線分の角度に合わせる

2023年05月14日
AutoLISP サンプルコード公開Gallery

;選択した文字列の角度を線分の角度に合わせる
;+++++++++++++
(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)
)


 AutoLispサンプルコードプログラム 一覧(インデックス)

 AutoLispサンプルコードプログラム 【概説】

AutoLispサンプルコードプログラム
関連記事
スポンサーサイト



Gallery担当:山野 ロザリア平久郎
Posted by Gallery担当:山野 ロザリア平久郎