🕌

AutoCADで集計する(コード1)

に公開

集計するストーリー

簡単にいえば、集計する文字を選択→全部合計処理→描き出す  こんな感じです。
もう少し詳細に考えると

1.選択する文字
文字を選択 選択する文字には、記号「A=」とか「L=」とかあったりするかな?
また、「m2」とか「m」とかの単位があるかな?って事が気になる
もしあったら、その記号や単位を削除する手間が沢山かかるよね!

2.選択の仕方
選択は、1個づつか? いっぺんに選択するか? いっぺんに選択できる方が楽

3.描き出す場所
描き出す時に、クリックして場所を指定しなくっちゃ!

1.選択する文字

選択する文字から頭に記号が付いていたら削除する設定

  ;-----------------------------------記号を入力

(setq aa (getstring "\n 先頭の記号を入力(記号なしはEnter): "))
(if (= aa "")
  (setq aa "") ; 記号なし
  (setq aa (strcat aa "=")) ; 入力された記号に "=" を付加
)

先頭の記号「A=」なら「A」を入力 無い時は、そのままエンター
strcatで Aと=を合わせて「A=」にしてくれます

(defun remove-units (txt units)
  (if (and txt (listp units))
    (progn
      (foreach u units
        (if (and (stringp u) (stringp txt))
          (setq txt (vl-string-right-trim u txt))
        )
      )
      txt
    )
    "" ; txtがnilなら空文字を返す
  )
)

defun remove-units で、単位を削除させる関数にします

2.選択の仕方 処理します

  ;-----------------------------------選択セット取得
  (setq ss (ssget '((0 . "*TEXT"))))
  (princ "\n 集計する数値を選択...")
  (setq i 0)
  (if ss
    (progn
      (princ "\n 合計は...")
      (repeat (sslength ss)
        (setq ename (ssname ss i))
        (setq elist (entget ename))
        (setq txt (cdr (assoc 1 elist)))
        (setq tsz (cdr (assoc 40 elist)))
        (setq layn (cdr (assoc 8 elist)))
        (setq ttypen (cdr (assoc 7 elist)))
  ;-----------------------------------記号と単位の削除
        (setq txt (vl-string-left-trim aa txt))
        (setq txt (remove-units txt unitList))
  ;-----------------------------------数値変換と集計
        (if (= i 0)
          (setq stxt (atof txt))
          (setq stxt (+ stxt (atof txt)))
        )
        (setq i (+ i 1))
      )
    )
  )

選択セットにいれて、文字から 記号と単位を(remove-units関数を使って)削除 数値に変換して集計

3.描き出す場所

  ;-----------------------------------結果描画
  (setq lay (getvar "clayer"))
  (command-s "._-LAYER" "_S" layn "")
  (setq ttype (getvar "TEXTSTYLE"))
  (setvar "TEXTSTYLE" ttypen)
  (setq stxt (rtos stxt 2 3))
  (setq p1 (getpoint "\n 集計結果の描出し点をクリック!:"))
  (setq scol (getvar "cecolor"))
  (if (or (= scol 256) (= scol 0)) (setq scol "BYLAYER"))
  (command "._TEXT" "J" "L" p1 tsz "0" stxt)
  (command "._-LAYER" "_S" lay "")
  (setvar "TEXTSTYLE" ttype)
  (redraw)

まーま いろいろやっちゃいましたー
これがあれば、動画のような集計ができるようになるがよー
ほいたらねー

Discussion