|
AutoCAD... AutoLISP... VisualLISP... |
|
[24] Elipsa jako plinia |
Jak w AutoCAD-zie uzyskać elipsę która "nie jest" elipsą, ale obiektem o kształcie elipsy (a narysowana np. jako polilinia)? Istnieje zmienna systemowa o nazwie PELLIPSE której wartość 0 pozwalana na rysowanie normalnej elipsy, a wartość 1, na rysowanie jej jako polilinię. Dla zmiany obiektów już istniejących, ponadto dla łuków eliptycznych (nadal obiekt typu ELLIPSE), splajnów (obiekt SPLINE), służy poniżej prezentowane makro lispowe, które pomimo swej już "długowieczności", nadal działa bez zarzutu, również w najnowszych wersjach AutoCAD-a.Program działa w bardzo prosty sposób: po udanym wybraniu (poprawnego) obiektu, sprawdzeniu czy można go modyfikować, zapisywany jest on jako plik zewnętrzny DXF (w katalogu tymczasowym), w wersji AutoCAD 12 (która to wersja nie obsługiwała splajnów i elips), a następnie wstawienie w miejsce wymazanego obiektu, tego pliku jako rozbitego bloku. Wykorzystuję tutaj jeszcze dwie "sztuczki" (podobno nie wszyscy o tym wiedzą): Po pierwsze polecenie WSTAW (_INSERT), wstawia pliki dxf (nie tylko dwg), oraz po drugie (dla tegoż polecenia także) - poprzedzenie nazwy pliku gwiazdką powoduje wstawienie bloku już rozbitego. Różnicą pomiędzy wstawieniem bloku i następnie jego rozbiciu, a wstawieniem bloku z gwiazdką jest brak definicji bloku w rysunkowej bazie danych AutoCAD-a, w tym drugim przypadku). Poniżej kod programu:
|
(defun C:SPLPL (/ Sel Tmp CMD Obj)
(setq Sel (entsel "\nWskaż splajn lub elipsę: "))
(if Sel
(progn
(if
(member
(cdr (assoc 0 (entget (setq Obj (car Sel)))))
'("SPLINE" "ELLIPSE")
)
(if
(vlax-write-enabled-p (vlax-ename->vla-object Obj))
;;;(not (jk:ENT_isLocked Obj 1))
(progn
;;;(jk:SYS_UndoBegin)
(setq Tmp (strcat (getenv "TEMP") "\\$.dxf")
CMD (getvar "CMDECHO")
)
(setvar "CMDECHO" 0)
(if (findfile Tmp)(vl-file-delete Tmp))
(command "_.undo" "_m")
(command "_.dxfout" Tmp "_V" "R12" "_O" Obj "" "")
(command "_-insert" (strcat "*" Tmp)(getvar "INSBASE")"" "")
(command "_.undo" "_e")
(vl-file-delete Tmp)
(entdel Obj)
(setvar "CMDECHO" CMD)
;;;(jk:SYS_UndoEnd)
)
(princ "\nMie można modyfikować obiektu. ")
)
(princ "\nNależy wybrać splajn lub elipsę. ")
)
)
)
(princ)
)
|
| Poniżej widać obiekty przed i po działaniu polecenia SPLPL: |
|
Na zokończenie jeszcze o innych "niestandardowych przekształceniach" AutoCAD-a: Okręgi i łuki będące częścią bloków, które są wstawione z nierównomiernym współczynnikiem skali (różne X i Y), po rozbiciu przekształcane są odpowiednio na elipsy i łuki eliptyczne. Odsunięcie (poleceniem ODSUŃ / _OFFSET) elipsy tworzy splajn.
|
|
|
|