Q4:文字を配筋図用に修正する/MTextToText


このマクロでできること
※フォーラムエイトのソフトで作成したCADを加工するためのマクロです

| 処理 | 内容 |
| -- | ----------------------------------------------------------------------------- |
| ① | 指定範囲の **MText** を取得 |
| ② | **Text に変換**(文字スタイルは `"STANDARD"`) |
| ③ | 高さ変換:<br>• 344 → 251(幅係数1.0)<br>• 172 → 201(幅係数0.7)<br>• その他 → 高さそのまま(幅係数1.0) |
| ④ | 高さ344→251 に変換したテキストだけ **Y方向に30移動** |
| ⑤ | 元の MText は削除 |


■autocadをマクロで実行させるコマンドです
 マクロは、メニュー>管理>ユーザーインターフェース(コマンド:CUI)を入力

  ^C^C(load "MTextToText.lsp") (c:MTextToText)

■テキスト変更(MTextToText.lsp)

(defun c:MTextToTextStandardHeightFixMove ( / pt1 pt2 ss i ent obj inspt contents height newheight widthfactor layer newinspt )
(prompt "\n範囲選択:1つ目の点を指定してください:")
(setq pt1 (getpoint))
(prompt "\n範囲選択:反対側の点を指定してください:")
(setq pt2 (getcorner pt1))
(setq ss (ssget "W" pt1 pt2 '((0 . "MTEXT")))) ; MTEXTのみ選択

(if ss
(progn
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq obj (vlax-ename->vla-object ent))
(setq inspt (vlax-get obj 'InsertionPoint)) ; (x y z)
(setq contents (vlax-get obj 'TextString))
(setq height (vlax-get obj 'Height))
(setq layer (vlax-get obj 'Layer))

;; 初期値(変換なし)
(setq newheight height)
(setq widthfactor 1.0)
(setq newinspt inspt)

;; 条件別変換
(cond
((= (fix height) 344)
(setq newheight 251)
(setq widthfactor 1.0)
;; Y方向に30移動(座標は (x y z))
(setq newinspt (list (car inspt) (+ (cadr inspt) 30.0) (caddr inspt)))
)
((= (fix height) 172)
(setq newheight 201)
(setq widthfactor 0.7)
;; 座標は移動しない
)
)

;; TEXTエンティティ作成
(entmake
(list
(cons 0 "TEXT")
(cons 10 newinspt)
(cons 40 newheight)
(cons 1 contents)
(cons 7 "STANDARD")
(cons 41 widthfactor)
(cons 8 layer)
)
)

;; 元のMText削除
(entdel ent)
(setq i (1+ i))
)
(prompt (strcat "\n" (itoa (sslength ss)) " 個のMTextをTextに変換・修正しました。"))
)
(prompt "\n指定範囲にMTextがありません。")
)
(princ)
)



直接実行する場合
上記コードを MTextToText.lsp に保存←保存箇所は以下※1)
AutoCADで APPLOAD → MTextToText.lsp を読み込む
コマンドラインに:
MTextToText
として実行
図面上で2点を指定(範囲選択)
指定条件で変換&Y方向30移動(251に変更されたテキストのみ)

注意点 高さが 小数(例:343.5) の場合、整数で判定しているため誤差に注意。
"STANDARD" スタイルが存在していないと作成に失敗します。
事前に STYLE コマンドで確認してください。

※1)
C:\Users\user\AppData\Roaming\Autodesk\AutoCAD 2024\R24.3\jpn\Support