Tym skryptem mozna bardzo łatwo stworzyć kreskowanie dowolnego elementu.

 

Tworzenie kreskowania

 

Polecenie do uruchomienia skryptu LISP: Kreskowanie

 

Kod źródłowy z opisem

 

;;; Tworzenie kreskowania
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: Kreskowanie
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/265-tworzenie-kreskowania.html
(vl-load-com)
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD* ))
(setq *Model* (vla-get-Modelspace *Rysunek* ))
(defun XEntSel (tex / SelObj Sel)
(setq Sel(vl-catch-all-apply 'entsel (list tex))) ; prosi Użytkownika o wybranie jednego obiektu
; jeśli wystąpi błąd w czasie wybierania, np Użytkownik anuluje polecenie, zdażenie takie zostanie
; przechwycone i pozwoli na dalsze działanie programu
(if Sel (progn
(if (vl-catch-all-error-p Sel) ; zwraca t, jeśli wystąpiło przerwanie
(progn
(prompt (vl-catch-all-error-message Sel)) ; wyświetla komunikat błędu
(setq SelObj nil )
)
(progn
(setq SelObj (vlax-ename->vla-object(car Sel))) ; zamienia wybrany obiekt typu entity na obiekt
)
)
))
SelObj
)
(defun C:Kreskowanie ( / )
; 0. wybieramy obiekt do zakreskowania
(setq Wybrany (XEntSel "Wskaż element do zakreskowania" )) ; funkcja zdefiniowana powyżej
; 1. Tworzymy obiekt kreskowanie,
(setq NewHatch (vlax-invoke-method *Model* 'addHatch zcHatchPatternTypePreDefined "ANSI31" t) )
; w tej chwili nie posiada jeszcze granic, nie da się go zobaczyć na ekranie ale można go zaznaczyć
; np. przez CTRL+A
; patrz ->2.
; 1.1 przygotownie obiektu do dodania jako granica kreskowania.
; 1.1.1 Utworzenie safearray
(setq OutLoop (vlax-make-safearray vlax-vbobject '(0 . 0) )) ;'(0 . 0) to indeksy początkowy i końcowy
; w "liście" safearray funkcja XEntel pozwoli wybrać tylko jeden element więc końcowy indeks jest równy
; początkowemu czyli 0.
; 1.1.2 wypełnienie safearray listą elementów W tym przypadku program pozwoli wybrać tylko jeden element
(vlax-safearray-fill OutLoop (list Wybrany ))
; 2. dodajemy granicę kreskowania.
(vlax-invoke-method NewHatch 'AppendOuterLoop OutLoop )
; Jako granicę nie możemy podać obiektu do kreskowania, ani listy takich obiektów. Jako parametr funkcji
; musi byc użyte lista/obiekt w postaci safearray. musimy więc wcześniej przygotować safearray (punkt 1.1)
; Kreskowanie jest utworzone poprawnie. nie jest jednak jeszcze wyświetlane.
; 3. obliczanie kreskowania. Jest to końcowa fukncja konieczna do poprawnego działania kreskowania. Po jej
; wykonaniu kreskowanie powinno być widoczne.
(vlax-invoke-method NewHatch 'Evaluate )
(princ )
)

 

Wykonanie w ZWCAD 2023

tworzenie kreskowania

 

Wykonanie w ZWCAD 2015

LISP Kreskowanie 2015

* Lisp nie jest kompatybilny z ZWCAD Classic