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 programu CAD 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:

 

Pobierz LISP do zamiany okręgu na polilinie

 

Polecenie do uruchomienia skryptu LISP: CIR2PLINE

 

Kod źródłowy z opisem


;;; Jak zamienić okrąg na polilinię ;;; zwcad.pl ;;; Polecenie do uruchomienia skryptu LISP: CIR2PLINE ;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/362-jak-zamienic-okrag-na-polilinie.html (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 2023

Zamiana okregu na polilinie

 

Wykonanie w ZWCAD 2015

LISP Cir2Pline 2015

 

Wykonanie w ZWCAD Classic

LISP Cir2Pline Classic