AutoCADで数値の平均を自動計算!窓選択OKのLISP

LISP

AutoCADの図面内で数値を含むテキストの平均値を求めるのが面倒なことありませんか?

このLISPを使えば、数値を含むTEXTオブジェクトを選択するだけで、平均値を自動計算&配置できます!

🔧 スクリプトの特徴

AutoCAD標準の選択方式に対応!(個別選択・窓選択・交差選択OK)

選択した数値を含むTEXTの平均を自動計算

計算結果をそのまま図面上に配置(手入力不要!)

小数点以下の桁数を自由に指定可能

数値を含まないテキストは無視するので処理が止まらない!

元の設定を自動で戻すのでAutoCADの動作を乱さない

📌 使い方

  1. LISPをAutoCADにロード(APPLOAD コマンド)
  2. コマンドラインに AVG と入力
  3. 数値を含むTEXTオブジェクトを選択(個別・窓選択どちらでもOK)
  4. Enterキーで選択終了(自動計算が実行される)
  5. 小数点以下の桁数を指定(デフォルトは2桁)
  6. 配置位置をクリックすると、平均値がその場に配置される

🎁 ダウンロード

準備中!

📝LISP

(defun C:AVG ( / dimzin_def total count avg pt precision ss i ent ed val *cmdecho* )
  ;; 数値を含むTEXTオブジェクトから数値を取得
  (defun get-text-value (ed)
    (if (wcmatch (cdr (assoc 0 ed)) "*TEXT")
        (distof (cdr (assoc 1 ed)) 2)  ;; 数値変換
    )
  )

  (setq *cmdecho* (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)

  (setq dimzin_def (getvar "DIMZIN"))
  (setvar "DIMZIN" 0)

  ;; 数値の合計とカウントを初期化
  (setq total 0 count 0)

  ;; オブジェクト選択(標準選択方法対応)
  (setq ss (ssget '((0 . "*TEXT"))))  ;; TEXT系オブジェクトのみ選択

  (if ss
    (progn
      ;; 選択したオブジェクトを順番に処理
      (setq i 0)
      (while (< i (sslength ss))
        (setq ent (ssname ss i))
        (setq ed (entget ent))
        (setq val (get-text-value ed))

        ;; 数値のみ処理(文字列をスキップ)
        (if val
          (progn
            (setq total (+ total val))
            (setq count (1+ count))
          )
        )
        (setq i (1+ i))
      )

      ;; 平均値計算
      (if (> count 0)
        (progn
          (setq precision (getint "\n小数点以下の桁数を入力 <2>:"))
          (if (not precision) (setq precision 2))
          (setq avg (rtos (/ total count) 2 precision))

          ;; 配置位置を取得し、テキスト配置
          (setq pt (getpoint "\n配置する位置を指示:"))
          (command "._TEXT" pt "" "" avg)

          (princ (strcat "\n平均値: " avg))
        )
        (princ "\n有効な数値が選択されませんでした。")
      )
    )
    (princ "\nオブジェクトが選択されませんでした。")
  )

  ;; 設定を元に戻す
  (setvar "DIMZIN" dimzin_def)
  (setvar "CMDECHO" *cmdecho*)

  (princ)
)

このLISPを使えば、図面内の数値の平均を手間なく一瞬で求められます!

ぜひ活用してみてください✨

コメント

タイトルとURLをコピーしました