図面内の「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. 基本的な使い方
- LISPのロード
ARESのコマンドラインにLOADLISP(またはAPPLOAD)と入力し、保存したSumTextCreate.lspを読み込みます。 - コマンドの実行
コマンドラインにSUMTEXT(小文字の sumtext でも可)と入力してEnter。 - オブジェクトの選択
画面上の足し算したい数値(文字オブジェクト)を窓選択などでまとめて選択し、Enterを押します。文字以外のオブジェクトが混ざっていても自動で無視されます。 - 配置場所の指定
「合計値を配置する位置をクリックしてください:」と表示されるので、図面内の好きな場所をクリックします。 - 選択元の文字の「大きさ・画層・色・スタイル」をそのまま引き継いだ合計値テキストが自動で生成されます!
3. 次回から自動で起動させる方法(オプション設定)
毎回LISPを手動でロードするのは面倒ですよね。ARESのオプション画面から、起動時にこのプログラムを自動ロードする設定を行えば、いつでも一瞬で呼び出せます。
- コマンドラインに
OPTIONSと入力してオプション画面を開きます。 - 左側メニューから「アドイン」を選択します。
- 「新規」ボタンをクリックし、先ほど保存した
SumTextCreate.lspを選択して開きます。 - リストに追加されたのを確認し、「適用」>「OK」で閉じます。
これで、次回ARESを起動した直後から、いつでもコマンドラインに SUMTEXT と入力するだけでこの機能が使えるようになります!
まとめ
図面内の数量集計や寸法の合計など、地味に電卓を使う機会の多いCAD作業ですが、このLISPを使えばヒューマンエラーを防ぎつつ大幅な時短になります。ARESユーザーの方はぜひ試してみてください!