W ZWCAD w wersjach wcześniejszych niż ZWCAD+ 2014 funkcja pedit pozwalała na wskazanie okręgu i zamieniała go automatycznie na polilinię. W wersji 2014 zaznaczenie okręgu nie jest możliwe, ograniczenie to zostało wprowadzone dla uzyskania zgodności z AutoCADem, gdzie w obecnej wersji działa to właśnie w ten sposób.
Jeśli potrzebowalibyśmy jednak fukcji działającej analogicznie, czyli zamieniającej okrąg na polilinię, można to zrobić przy użyciu następującej procedury:

 

(vl-load-com)

(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD* ))
(setq *Model* (vla-get-Modelspace *Rysunek* ))

; funkcje zamieniające współrzędne odczytane z obiektu na listę liczb i odwrotnie, listę liczb na współrzędne które można przypisać do obiektu

(defun v2l (var)(vlax-safearray->list(vlax-variant-value var)))
(defun l2v (Lpts / )
(vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length Lpts)))) Lpts ))
)

;funkcja prosząca Użytkownika o wskazanie obiektu, pozwalajaca na wskazanie jedynie okręgu

(defun SelectCircle ( / kolko EOL)
(setq EOL nil)
(while (not EOL) ; Pętla w tym miejscu jest po to, że jeśli użytkownik nie trafi wskaźnikiem myszy w obiekt określonego typu czyli wybierze inny obiekt, który zostanie odfiltrowany, lub trafi w puste miejsce w rysunku, to program poprosi go ponownie o wskazanie obiektu
(setq kolko(vl-catch-all-apply 'ssget (list ":S" (list (cons 0 "CIRCLE") ))))
; funkcja prosząca Użytkowników o wskazanie obiektów to ssget jako paramerty możemy użyć:
; :S funkcja pozwala na wskazanie pojedynczego obiektu, nie jest możliwe zaznaczanie wielu obiektów
; drugi parametr to filtr w którym możemy określić właściwości obiektu/obiektów jakie mogą być zaznaczone. W tym przypadku ograniczamy jedynie typ obiektu - okrąg, ale możliwie jest również ograniczenie pod wzglądem promienia, koloru, warstwy i wszystkich innych właściwości. Ograniczenia takie mogą być nawet łączone, np: "czerwone łuki o promieniu większym niż x oraz polilinie o powierzchni większej niż y". pozwoli Użytkownikowi na wskazanie lub samoczynnie wybierze z rysunku wszystkie elementy o podanych parametrach.

(if (vl-catch-all-error-p kolko) ; obsługa sytuacji wyjątkowych konieczne jest to np w przypadku, gdy użytkownik zamiast wskazać okrąg wciśnie na klawiaturze przycisk [ESC]
(progn
(setq EOL t )
)
(progn
(if kolko
(progn
(setq kolko (vlax-ename->vla-object (ssname kolko 0))) ;Funkcja ssget zwraca Zawsze obiekt typu SelectionSet W tym przypadku potrzebujemy pojedynczy obiekt, więc w tym miejscu wybieramy obiekt z SelectionSet
(setq EOL t )
)
)
)
)
)
kolko
)

; funkcja kopiuje określone cechy z obiektu żródłowego do pozostałych obiektów .
(defun UzgodnijCechy (wzor DoZmiany / )

(foreach % DoZmiany
(vlax-put-property % 'color (vlax-get-property wzor 'color ) )
(vlax-put-property % 'layer (vlax-get-property wzor 'layer ) )
(vlax-put-property % 'Linetype (vlax-get-property wzor 'Linetype ) )
(vlax-put-property % 'LinetypeScale (vlax-get-property wzor 'LinetypeScale ) )
(vlax-put-property % 'Lineweight (vlax-get-property wzor 'Lineweight ) )
(vlax-put-property % 'Thickness (vlax-get-property wzor 'Thickness ) )
)

)

(defun C:Cir2Pline ( / )
;----------------------------------------------------------
; funkcja prosi o wskazanie okręgu i zamienia go na polilinię
;----------------------------------------------------------
(setq kolo (SelectCircle )) ; wskaż okrąg

(setq center (v2l(vlax-get-property kolo 'center ) ) )
(setq R (vlax-get-property kolo 'radius ) )

(setq punkty (list (+(car center) R) (cadr center) (-(car center) R) (cadr center)))

(setq poly (vlax-invoke-method *Model* 'AddLightWeightPolyline (l2v punkty ))) ; tworzymy nową polilinię
(vlax-put-property poly 'closed :vlax-true ) ;polilinia taka sama jak okrąg może mieć 3 wierzchołki gdzie 1 jest równy 3. lub 2 wierzchołki i być zamknięta - takie rozwiązanie stosujemy w tym przypadku.
(vlax-invoke-method poly 'SetBulge 0 1 ) ; Ustawiamy "Wypukłość" odcinka polilinii tutaj podajemy wartość 1. jego znaczenie to 1/4 tangensa kąta zawartego w odcinku łukowym. kąt zawarty to 180 czyli tan(0.25* 180) = 1.
(vlax-invoke-method poly 'SetBulge 1 1 )

(UzgodnijCechy kolo (list poly)) ; kopiowanie właściwości okręgu do polillinii.
(vlax-invoke-method kolo 'Delete ) ; usuwamy wzorcowy okrąg.

)


Wykonanie w ZWCAD 2015+LISP Cir2Pline 2015

 

Wykonanie w ZWCAD ClassicLISP Cir2Pline Classic