図面内の「100」や「250.5」といった複数のテキスト数値を、電卓を使わずに一瞬で合計して、しかも同じ見た目(画層や色)で配置したいと思ったことはありませんか?
今回は、ARES Commander(Standard含む)だけでなく、AutoCAD(汎用レギュラー版)でもそのまま使用できる、選択した文字の数値を足し算する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)
)
;; 【対策】あらゆる表記パターンのコマンド名にメイン処理を紐付ける
(defun c:sumtext () (my-sumtext-process))
(defun c:SUMTEXT () (my-sumtext-process))
(defun c:SumTextCreate () (my-sumtext-process))
2. 基本的な使い方
- LISPのロード
CADのコマンドラインにLOADLISP(またはAPPLOAD)と入力し、保存したSumTextCreate.lspを読み込みます。 - コマンドの実行
コマンドラインにSUMTEXTと入力してEnterを押します。 - オブジェクトの選択
画面上の足し算したい数値(文字オブジェクト)を窓選択などでまとめて選択し、Enterを押します。文字以外のオブジェクトが混ざっていても自動で無視されます。 - 配置場所の指定
「合計値を配置する位置をクリックしてください:」と表示されるので、図面内の好きな場所をクリックします。 - 選択元の文字の「大きさ・画層・色・スタイル」をそのまま引き継いだ合計値テキストが自動で生成されます!
3. 次回から自動で起動させる方法
毎回LISPを手動でロードするのは面倒ですよね。起動時にこのプログラムを自動ロードする設定を行えば、いつでも一瞬で呼び出せます。
ARES Commander / Standard の場合
- コマンドラインに
OPTIONSと入力してオプション画面を開きます。 - 左側メニューから「アドイン」を選択します。
- 「新規」ボタンをクリックし、保存した
SumTextCreate.lspを選択して開きます。 - リストに追加されたのを確認し、「適用」>「OK」で閉じます。
AutoCAD の場合
- コマンドラインに
APPLOADと入力して「アプリケーションロード」ダイアログを開きます。 - 右下にある「スタートアップ登録」の「内容」ボタンをクリックします。
- 「追加」ボタンから
SumTextCreate.lspを選択して登録します。
これで、次回CADを起動した直後から、いつでもコマンドラインに SUMTEXT と入力するだけでこの機能が使えるようになります!
まとめ
図面内の数量集計や寸法の合計など、地味に電卓を使う機会の多いCAD作業ですが、このLISPを使えばヒューマンエラーを防ぎつつ大幅な時短になります。
ARESユーザーの方はもちろん、AutoCADユーザーの方も完全に同じコードで動作しますので、ぜひ日々の業務に取り入れてみてください!
