(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 2015+LISP Kreskowanie 2015

* Lisp nie jest kompatybilny z ZWCAD Classic