【ARES Commander/Standard】複数の文字から数値を自動で足し算して配置する便利なLISPプログラム

図面内の「100」や「250.5」といった複数のテキスト数値を、電卓を使わずに一瞬で合計して、しかも同じ見た目(画層や色)で配置したいと思ったことはありませんか?

今回は、ARES Commander(Standard含む)で選択した文字の数値を足し算し、元の文字の「文字高さ」「画層(レイヤー)」「色」「文字スタイル」を完全に引き継いだまま、クリックした位置に合計値を新規作成するAutoLISPプログラムをご紹介します。ARES特有の「コマンドが認識されないエラー」や「文字コードによるエラー」を徹底的に回避したクリーンなコードです!

1. LISPプログラムコード

まずは以下のコードをすべてコピーして、メモ帳などに貼り付けてください。ファイル名は「SumTextCreate.lsp」として保存します。

;; メイン処理の関数定義
(defun my-sumtext-process ()
  (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  (if ss
    (progn
      (setq total 0.0)
      (setq i 0)
      (setq txtHgt (getvar "TEXTSIZE"))
      (setq txtLay (getvar "CLAYER"))
      (setq txtCol 256)
      (setq txtSty (getvar "TEXTSTYLE"))
      
      (while (< i (sslength ss))
        (setq ent (entget (ssname ss i)))
        (setq str (cdr (assoc 1 ent)))
        (setq val (distof str))
        (if val
          (progn
            (setq total (+ total val))
            (if (assoc 40 ent) (setq txtHgt (cdr (assoc 40 ent))))
            (if (assoc 8 ent) (setq txtLay (cdr (assoc 8 ent))))
            (if (assoc 7 ent) (setq txtSty (cdr (assoc 7 ent))))
            (if (assoc 62 ent)
              (setq txtCol (cdr (assoc 62 ent)))
              (setq txtCol 256)
            )
          )
        )
        (setq i (1+ i))
      )
      
      (setq pt (getpoint "\n合計値を配置する位置をクリックしてください: "))
      (if pt
        (progn
          (setq finalCol (list 
            '(0 . "TEXT")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
            (cons 10 pt)
            (cons 40 txtHgt)
            (cons 8 txtLay)
            (cons 7 txtSty)
            (cons 1 (rtos total 2))
            '(50 . 0.0)
          ))
          (if (/= txtCol 256)
            (setq finalCol (append finalCol (list (cons 62 txtCol))))
          )
          (entmake finalCol)
          (princ "\n合計値のテキストを作成しました。")
        )
      )
    )
  )
  (princ)
)

;; あらゆる表記パターンのコマンド名にメイン処理を紐付ける(ARESエラー対策)
(defun c:sumtext () (my-sumtext-process))
(defun c:SUMTEXT () (my-sumtext-process))
(defun c:SumTextCreate () (my-sumtext-process))

2. 基本的な使い方

  1. LISPのロード
    ARESのコマンドラインに LOADLISP(または APPLOAD)と入力し、保存した SumTextCreate.lsp を読み込みます。
  2. コマンドの実行
    コマンドラインに SUMTEXT(小文字の sumtext でも可)と入力してEnter。
  3. オブジェクトの選択
    画面上の足し算したい数値(文字オブジェクト)を窓選択などでまとめて選択し、Enterを押します。文字以外のオブジェクトが混ざっていても自動で無視されます。
  4. 配置場所の指定
    「合計値を配置する位置をクリックしてください:」と表示されるので、図面内の好きな場所をクリックします。
  5. 選択元の文字の「大きさ・画層・色・スタイル」をそのまま引き継いだ合計値テキストが自動で生成されます!

3. 次回から自動で起動させる方法(オプション設定)

毎回LISPを手動でロードするのは面倒ですよね。ARESのオプション画面から、起動時にこのプログラムを自動ロードする設定を行えば、いつでも一瞬で呼び出せます。

  1. コマンドラインに OPTIONS と入力してオプション画面を開きます。
  2. 左側メニューから「アドイン」を選択します。
  3. 「新規」ボタンをクリックし、先ほど保存した SumTextCreate.lsp を選択して開きます。
  4. リストに追加されたのを確認し、「適用」>「OK」で閉じます。

これで、次回ARESを起動した直後から、いつでもコマンドラインに SUMTEXT と入力するだけでこの機能が使えるようになります!

まとめ

図面内の数量集計や寸法の合計など、地味に電卓を使う機会の多いCAD作業ですが、このLISPを使えばヒューマンエラーを防ぎつつ大幅な時短になります。ARESユーザーの方はぜひ試してみてください!