【ARES 2027 / AutoCAD両対応】簡易注釈(TEXT)をマルチテキスト(MTEXT)に一括変換するLISP

CADで図面を編集しているとき、「簡易注釈(TEXT)でバラバラに書かれた文字を、一発でマルチテキスト(MTEXT)に変換したい!」と思ったことはありませんか?

AutoCADであれば標準の TXT2MTXT コマンドで一発ですが、低コストな ARES Standard にはそのコマンド(XtraTools機能)が搭載されていません。

さらに、ARESで文字変換LISPを自作しようとすると、内部ローダーの相性によって「最初の引用符がありません」というエラーが出たり、変換時に標準の「左揃え」の文字が右下に吹き飛んでズレたり、自動ロード時にコマンドが認識されなくなったりする巨大な罠が立ちはだかります。

今回は、これらの特有の罠をすべて力技でねじ伏せ、ユーザー検証によって完璧な動作が確認された「完全版の一括変換LISPコード」を公開します。なお、このコードは独自バグの少ないAutoCAD環境でもそのまま、全く同じように動作します!


互換性抜群:ARES & AutoCAD 最適化 LISPコード

以下のコードを丸ごとコピーして、メモ帳などに貼り付け、ファイル名を Startup.lsp として保存してください。


;; メイン処理の関数定義
(defun my-txtomtext-process ()
  (setq ss (ssget '((0 . "TEXT"))))
  (if ss
    (progn
      (setvar "CMDECHO" 0)
      (setq i 0)
      (repeat (sslength ss)
        (setq ename (ssname ss i))
        (setq dxf (entget ename))
        (setq txt (cdr (assoc 1 dxf)))
        (setq ht  (cdr (assoc 40 dxf)))
        (setq lay (cdr (assoc 8 dxf)))
        (setq rot (cdr (assoc 50 dxf)))
        (setq rot (/ (* rot 180.0) pi))
        
        (setq h72 (if (cdr (assoc 72 dxf)) (cdr (assoc 72 dxf)) 0)
              v73 (if (cdr (assoc 73 dxf)) (cdr (assoc 73 dxf)) 0))
              
        (if (and (= h72 0) (= v73 0))
          (setq m71 1 pnt (cdr (assoc 10 dxf)))
          (setq pnt (cdr (assoc 11 dxf))
                m71 (cond
                      ((= v73 3) (cond ((= h72 0) 1) ((= h72 1) 2) (t 3)))
                      ((= v73 2) (cond ((= h72 0) 4) ((= h72 1) 5) (t 6)))
                      ((= v73 1) (cond ((= h72 0) 7) ((= h72 1) 8) (t 9)))
                      (t (cond ((= h72 1) 8) ((= h72 2) 9)
                               ((= h72 3) 5) ((= h72 4) 5) (t 9))))))
        
        (command "._-MTEXT" pnt "H" ht "R" rot "W" 0 txt "")
        
        (setq ent (entget (entlast)))
        (setq ent (subst (cons 8 lay) (assoc 8 ent) ent))
        
        (if (and (= h72 0) (= v73 0)) (setq m71 7))
        
        (if (assoc 71 ent)
          (setq ent (subst (cons 71 m71) (assoc 71 ent) ent))
          (setq ent (append ent (list (cons 71 m71))))
        )
        (entmod ent)
        
        (entdel ename)
        (setq i (1+ i))
      )
      (setvar "CMDECHO" 1)
      (princ "\nConverted ")
      (princ i)
    )
  )
  (princ)
)

;; 【ARES対策】あらゆる表記パターンのコマンド名にメイン処理を紐付ける
(defun c:txtomtext () (my-txtomtext-process))
(defun c:TXTOMTEXT () (my-txtomtext-process))
(defun c:TxtToMtext () (my-txtomtext-process))

各CADでの自動ロード(スタートアップ)登録手順

ARES 2027(Standard / Commander)の場合

ARES 2027の「オプション」画面から、最も直感的にスタートアップへ登録する手順です。

  1. 保存した Startup.lsp ファイルを、パソコン内の分かりやすい場所(例:C:\AutoLISP\Startup.lsp など、半角英数字のみのパス)に置いておきます。
  2. ARES 2027を起動し、コマンドラインに OP(または OPTIONS)と入力して Enter キーを押します。
  3. 「オプション」ダイアログの左側メニューから 「システム オプション」 をクリックします。
  4. 右側リストの一番上にある 「アドイン(Add-ins)」 の左側にある [ + ] マークをクリックして展開します。
  5. 展開された中にある 「スタートアップ(Startup)」(または「LISP」)の項目を選択します。
  6. ダイアログの右側にある 「追加(Add...)」 ボタンをクリックします。
  7. ファイル選択画面になるので、用意した Startup.lsp を選択し、「開く」をクリックします。
  8. 画面下部の 「適用」 を押してから 「OK」 をクリックして閉じます。
  9. ARESを完全に再起動します。

AutoCAD / AutoCAD LT(LISP対応版)の場合

AutoCAD標準のスタートアップ機能を使って自動ロードさせます。

  1. AutoCADを起動し、コマンドラインに APPLOAD と入力して Enter。
  2. ダイアログ右下にある「スタートアップ登録」の項目にある 「コンテンツ」 ボタンをクリック。
  3. 「追加」ボタンを押し、保存した Startup.lsp を選択して登録。
  4. ダイアログをすべて閉じれば登録完了です。

使い方

  1. CADを起動し、図面を開きます。(手動でのロード作業は一切不要です)
  2. コマンドラインに、以下のいずれかのコマンドを入力して Enter。
    txtomtext / TXTOMTEXT / TxtToMtext
  3. カーソルが四角い選択モードに切り替わるので、変換したい文字を一括選択して Enter。
  4. 元の文字が消去され、画層・文字高・角度・位置合わせが綺麗に維持されたマルチテキストに一瞬で置き換わります!