Menu

AutoLISP automatyzuje AutoCAD, przykład: Koniec ręcznego liczenia sumy powierzchni!

Dzięki AutoLISP takie narzędzie jak AutoCAD może zyskać nowe funkcje! Przykładowo: zliczanie sumy powierzchni wielu obiektów. Koniec ręcznego liczenia na kalkulatorze!


Automatyzacja AutoCAD – dlaczego warto?

Program AutoCAD i AutoCAD LT w sekcji Właściwości (ppm na dany obiekt) automatycznie oblicza obszar Polilinii, wieloboku i okręgu. Co w sytuacji, gdy potrzebujesz obliczyć sumę tych powierzchni?

Nie udało mi się znaleźć takiej wbudowanej funkcji w programie, ale na szczęście AutoCAD i od wersji 2024 AutoCAD LT obsługują funkcje programistyczne.

Niedawno opisywaliśmy jakie są programistyczne możliwości w AutoCAD i AutoCAD LTdla 2 wariantów:
1. Programowanie AutoCAD (VBA) – Poziom I – stacjonarnie
2. Programowanie AutoCAD (VBA) – Poziom I – online na żywo 

Jest to świetny przykład, by wykorzystać już stworzony AutoLISP!


Jak wczytać AutoLISP do AutoCAD?

Krok 1.Skopiuj go z naszej strony (kod znajduje się na końcu artykułu) i zapisz w notatniku z rozszerzeniem .lsp

Krok 2.Przejdź w programie AutoCAD / AutoCAD LT 2024 do zakładki zarządzaj i wybierz „wczytaj aplikację”.

Krok 3.Wczytaj AutoLISP.


Jak działa ten przykładowy AutoLISP dla AutoCAD?

W kodzie (nie jesteśmy jego autorem*) zdefiniowano nową funkcję „Tarea”.

Działa ona na 2 sposoby:

Sposób 1.Zaznacz obiekty, które mają być uwzględnione w zliczeniu sum powierzchni, a następnie w wierszu polecania wpisz „tarea”. Również w wierszu polecenia zostanie wyświetlony wynik.

Sposób 2.W wiersz polecenia wpisz „tarea”, a następnie zaznacz obiekty, które mają być uwzględnione w zliczeniu sum powierzchni.

automatyczne zliczanie pól w AutoCAD

KOD DO SKOPIOWANIA AutoLISP:

;;———————=={ Total Area }==———————;;
;; ;;
;; Displays the total area of selected objects at the ;;
;; command line. The precision of the printed result is ;;
;; dependent on the setting of the LUPREC system variable. ;;
;;————————————————————;;
;; Author: Lee Mac, Copyright © 2013 – www.lee-mac.com ;;
;;————————————————————;;

(defun c:tarea ( / a i s )
(if (setq s
(ssget
'(   (0 . „CIRCLE,ELLIPSE,*POLYLINE,SPLINE”)
(-4 . „<NOT”)
(-4 . „<AND”)
(0 . „POLYLINE”) (-4 . „&”) (70 . 80)
(-4 . „AND>”)
(-4 . „NOT>”)
)
)
)
(progn
(setq a 0.0)
(repeat (setq i (sslength s))
(setq a (+ a (vlax-curve-getarea (ssname s (setq i (1- i))))))
)
(princ „\nTotal Area: „)
(princ (rtoc a 15))
)
)
(princ)
)
(vl-load-com) (princ)
(defun rtoc ( n p / d i l x )
(setq d (getvar 'dimzin))
(setvar 'dimzin 0)
(setq l (vl-string->list (rtos (abs n) 2 p))
x (cond ((cdr (member 46 (reverse l)))) ((reverse l)))
i 0
)
(setvar 'dimzin d)
(vl-list->string
(append (if (minusp n) '(45))
(reverse
(apply 'append
(mapcar
'(lambda ( a b )
(if (and (zerop (rem (setq i (1+ i)) 3)) b)
(list a 44)
(list a)
)
)
x (append (cdr x) '(nil))
)
)
)
(member 46 l)
)
)
)
*Źródło kodu: https://www.cadtutor.net/forum/topic/66788-multiple-polyline-area-sum/



Autor: Jakub Piwowar | PCC Polska