;座標文字列（MTEXT）の文字位置を「右基点」に変更する
;+++++++++++++
(defun C:CODE09 ( / Obj Ent TextObj )
;+++++++++++++
    (princ "\n座標文字列（MTEXT）を選択：")
    (setq Obj (ssget (list (cons 0 "MTEXT"))))
    (if (not(= Obj nil));;座標文字列（MTEXT）が選択されていたら・・・
        (progn
            (setq cnt 0)
            (setq num (sslength Obj))
            (alert  (strcat "\n選択数："  (rtos num) "\n")) 
            (while (< cnt num)
                (setq Ent (ssname Obj cnt))
                (setq TextObj  (entget Ent))
                (setq TextObj  (subst (cons 71 6) (assoc 71 TextObj ) TextObj ));アタッチされる点
                (entmod TextObj) 
                (setq cnt (1+ cnt))
            ) 
        );progn
        ;座標文字列（MTEXT）が選択されなかったら・・・
        (alert "選択エラー：座標文字列（MTEXT）が選択されていません") 
    );if
    (princ)
)





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






;選択した文字列の角度を指定した2点の角度に合わせる
;+++++++++++++
(defun C:CODE11 ( / Flg Obj Ent0 TextObj LineObj  θ)
;+++++++++++++
    (setq Flg 1);文字列（Text/Mtext）を選択してDXF図形情報をTextObjに登録
    (while Flg 
        (setq Obj (car (entsel "\n回転させる文字列（TEXT/MTEXT）を選択：")))
        (setq Ent0 (cdr(assoc 0 (entget Obj))))
        (if (or (= Ent0 "TEXT") (= Ent0 "MTEXT"));大文字必須
            (progn
                (setq Flg nil)
                (setq TextObj (entget Obj))
                (princ "\n") 	
            )
            (princ "\n選択された図形は文字列（TEXT/MTEXT）ではありません\n") 
        );if
    );while

    ;角度を指定してDXF図形情報をLineObjに登録 
    (setq Pt1 (getpoint "\n1点目を指定："))
    (setq Pt2 (getpoint "\n2点目を指定："))
    (setq Pt1 (trans Pt1  1 0));UCS座標からWCS座標に変換
    (setq Pt2 (trans Pt2  1 0));UCS座標からWCS座標に変換
    (setq θ (angle Pt1 Pt2));rad

    (if (and (> θ (/ PI 2))(<= θ PI));90°<θ<=180°
        (setq θ (+ θ PI)))
    (if (and (> θ PI)(< θ (* PI 1.5)));180°<θ<270°
        (setq θ (- θ PI)))

    ;TextObj 50 の情報（角度）を書き換え
    (setq TextObj (subst (cons 50 θ) (assoc 50 TextObj) TextObj))
    (entmod TextObj);TextObjのDXF図形情報書き換えて図形を修正

    (princ)
)





;座標値文字列アト付け測点名 追加登録
;+++++++++++++
(defun C:CODE12 (/ 測点名 Ent);
;+++++++++++++
    (setq 測点名 nil)
    (setq 測点名 (getstring "\n測点名："))
    (if (> (strlen 測点名) 0);
        (progn
            (setq Ent (entget (car (entsel "座標文字列を選択:")))) ;EntにDXF図形情報のリストを代入
            (if (= (cdr (assoc 0 ent)) "MTEXT") ;選択図形がマルチテキストかどうかチェック
                (progn ;図形がマルチテキストの時の処理
                    (Setq  Orgtxt (Cdr(Assoc 1 Ent)))
                    (Setq  Newtxt (Strcat 測点名 "\\P" Orgtxt))
                    (setq Ent ;書き直したDXF図形情報のリストをEntに入れ直し
                        (subst ;入れ替える
                            (cons 1 Newtxt) ; 新しい値
                            (assoc 1 Ent) ; 古い値
                            Ent) ;Entに入っているDXF図形情報のリストを
                    );setq
                    (entmod Ent) ;DXF図形情報を図形に反映
                );progn
                (alert "選択エラー：座標文字列を選択して下さい。") ;図形がマルチテキスト以外の時、メッセージボックスを表示;Else
            );if
        );progn
    );if
    (princ)
)



;座標値文字列測点名 修正変更
;+++++++++++++
(defun C:CODE13 (/ 測点名 Ent);
;+++++++++++++
    (setq 測点名 (getstring "\n変更後の測点名："))
    (if (> (strlen 測点名) 0);
        (progn
            (setq Ent (entget (car (entsel "座標文字列を選択:")))) ;EntにDXF図形情報のリストを代入
            (if (= (cdr (assoc 0 ent)) "MTEXT") ;選択図形がマルチテキストかどうかチェック
                (progn ;図形がマルチテキストの時の処理
                    (setq  Orgtxt (Cdr(Assoc 1 Ent)))
                    (setq MyNum (vl-string-search "\P" Orgtxt));旧測点名を検索
                    (setq  Orgtxt (substr Orgtxt MyNum))
                    (setq  Newtxt (Strcat 測点名  Orgtxt))
                    (setq Ent;書き直したDXF図形情報のリストをEntに入れ直し
                        (subst;入れ替える
                            (cons 1 Newtxt); 新しい値
                            (assoc 1 Ent); 古い値
                            Ent);Entに入っているDXF図形情報のリストを
                    );setq
                    (entmod Ent);DXF図形情報を図形に反映
                );progn
                (alert "選択エラー：座標文字列を選択して下さい。") ;図形がマルチテキスト以外の時、メッセージボックスを表示;Else
            );if
        );progn
    );if
    (princ)
)






