Ten skrypt pozwala łatwo sumować elementy na rysunku.

 

Suma tekstów

 

Polecenie do uruchomienia skryptu LISP: SumaTekstow

 

Kod źródłowy z opisem

 

;;; Sumowanie wartości tekstów
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: SumaTekstow
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/213-sumowanie-wartosc-tekstow.html
(vl-load-com)
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD*))
(setq *Model* (vla-get-Modelspace *Rysunek* ))
(defun sel2list (selset / OutList ileelementow i)
;----------------------------------------------------------
; funkcja zamienia zbiór wskazań na listę obiektów
; Argumenty: zbiór wskazań (selectionset)
; Wynik: lista obiektów
;----------------------------------------------------------
(setq ileelementow(sslength selset) )
(setq i 0 )
(repeat ileelementow
(setq OutList (append OutList (list (vlax-ename->vla-object(ssname selset i) ) )))
(setq i (1+ i ))
)
OutList
)
(defun SplitString (Stri Limiter / Poz OutList)
;----------------------------------------------------------
; funkcja Dzieli napis na listę słów
; Argumenty: Stri - Napis zmienna typu string
; Limiter - zmienna typu string, określająca znak rozdzielający np spacja
; Wynik: lista stringów
;----------------------------------------------------------
(setq Poz(vl-string-search Limiter Stri))
(while Poz
(progn
(setq OutList (append OutList (list(substr Stri 1 Poz))))
(setq Stri (substr Stri (+ 2 Poz)))
(setq Poz(vl-string-search Limiter Stri))
)
)
(setq OutList (append OutList (list Stri)))
OutList
)
(defun SelectTexts ( / wybrane OutList)
;----------------------------------------------------------
; funkcja prosi Użytkownika o wskazanie tekstów jedno i wielowierszowych
; Argumenty: brak
; Wynik: Lista obiektów
; nil jeśli nic nie wskazano
;----------------------------------------------------------
(setq wybrane (ssget (list(cons -4 "<or") (cons 0 "TEXT") (cons 0 "MTEXT" ) (cons 0 "DIMENSION" ) (cons -4 "or>"))))
(setq OutList (sel2list wybrane))
)
(defun ObliczSumeTekstow (InList / Suma Tresc)
;----------------------------------------------------------
; funkcja Odczytuje wartość liczbową z tekstów
; Argumenty: lista obiektów tekstów
; Wynik: wartość rzeczywista reprezentująca sumę wartości z tekstów.
;----------------------------------------------------------
(setq Suma 0 )
(foreach % InList
(setq %(entget(vlax-vla-object->ename %)))
(cond
((=(cdr (assoc 0 %)) "TEXT") (progn
(setq Tresc(cdr(assoc 1 %)))
(setq Slowa (SplitString Tresc " "))
(foreach Slowo Slowa
(setq Suma (+ Suma (atof Slowo))) ; jeśli jest treść nieliczbowa przekształci się na 0, spacje na początku i końcu są automatycznie usuwane.
)
))
((=(cdr (assoc 0 %)) "DIMENSION") (progn
(setq Tresc(cdr(assoc 42 %)))
(setq Suma (+ Suma Tresc))
))
)
)
Suma
)
(defun C:SumaTekstow ( / )
;----------------------------------------------------------
; funkcja wyświetla sumę wartości wpisanych w tekstach jedno- i wielowierszowych
; Argumenty:
; Wynik:
;----------------------------------------------------------
(setq Wybrane (SelectTexts ))
(setq Suma (ObliczSumeTekstow Wybrane))
(print Suma )
)

 

Wykonanie w ZWCAD 2023

suma wartosci tekstow

 

Wykonanie w ZWCAD 2015

LISP SumaTekstow 2015

 

Wykonanie w ZWCAD Classic

LISP SumaTekstow Classic