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+
Wykonanie w ZWCAD Classic