dmatusz3 Posted November 13, 2017 Report Share Posted November 13, 2017 Historia LISPów startowych ZWPACK: ZWPack 2021 z 20 listopada 2020 - dodano szyfrowanie lispów, mierzenie z sumowaniem, zmianę stylu multilinii oraz wymiarowanie polilinii. ZWPack_2018.02.zip z 28 marca 2018 - dodano paletę narzędzi oraz wybór ostatnio zaznaczonych obiektów skrypt-startowy_v01.lsp z 29 grudnia 2017 - dodano tworzenie warstw z grubościami oraz edycję bloków zagnieżdżonych po kliknięciu skrypt-startowy_v00.lsp z 14 grudnia 2017 - opis Poniżej oryginalny post. ========================================================== Zastanawiam się nad jakie stosujecie ustawienia początkowe przy rysowaniu? Powszechnie znanym sposobem są szablony, ciekawy jestem czy ktoś stosuje zamiast (lub równolegle) swoje skrypty startowe. Na przykład listę i właściwości warstw można ustawić zarówno w szablonie jak i utworzyć za pomocą LISPa. Poniżej zamieszczam właśnie taką procedurę. Obsługa jest bardzo prosta, wystarczy dopisać na końcu (Utworzwarstwe "Nazwa_warstwy" Kolor "Rodzaj_linii") Oto cały kod (defun Linetype:Load ( linetype filename / *error* doc path linetypes ans ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nLinetype:Load:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq path (findfile filename )) (if (not (null path ) ) (progn (setq doc (vla-get-activedocument (vlax-get-acad-object) )) ( setq linetypes ( vlax-get-property doc 'Linetypes ) ) (setq ans(vl-catch-all-apply 'vlax-invoke-method (list linetypes 'Load typlinii path ) ) ) (print ans ) ) ) nil ) (defun Utworzwarstwe ( nazwa kolor typlinii / *error* doc Warstwy Warstwa linetypes linetype ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nUtworzwarstwe:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq doc (vla-get-activedocument (vlax-get-acad-object) )) (setq Warstwy (vlax-get-property doc 'Layers ) ) (setq Warstwa (vlax-invoke-method Warstwy 'Add nazwa ) ) (vlax-put-property Warstwa 'Color kolor ) ( setq linetypes ( vlax-get-property doc 'Linetypes ) ) (setq ltype(vl-catch-all-apply 'vlax-get-property (list linetypes 'Item typlinii ))) (if (vl-catch-all-error-p ltype ) (progn (Linetype:Load typlinii "zwcadiso.lin") ) ) (setq ans(vl-catch-all-apply 'vlax-put-property (list Warstwa 'Linetype typlinii ))) ) (defun c:lstart (/) (Utworzwarstwe "Osie" 1 "Center") (Utworzwarstwe "Ukryte" 254 "Hidden") (Utworzwarstwe "Opisy" 253 "Continuous") (Utworzwarstwe "Kreskowanie" 253 "Continuous") (Utworzwarstwe "Wymiary" 7 "Continuous") ) Po wczytaniu skryptu będzie dostępne polecenie "lstart", które utworzy warstwy jak poniżej. Załączam także sam skrypt LISP. lstart.lsp Adam Klaczek 1 Quote Link to comment Share on other sites More sharing options...
Martin_S Posted November 13, 2017 Report Share Posted November 13, 2017 Ja np. używam swój szablon dwt. .... natomiast biblioteki Architecture sukcesywnie przenosze do nastepnego rocznika ...ale jest problem braku konsekwencji twórców Architecture te znaczniki dot. stolarki ...tryb 3D jest ok natomiast tryb 2D nie z powodu węgarków...tak wiec biblioteka 2D budowana od wersji 2012 jest do "kosza" Quote Link to comment Share on other sites More sharing options...
perlon Posted November 14, 2017 Report Share Posted November 14, 2017 (edited) Moje rozwiązanie jest zbudowane na potrzeby innych lispów, tak aby mogły się odwoływać do warstw poprzez zmienne. Konkretne nazwy są zapisane w zewnętrznym pliku *.ini. Zaznaczam że kody pochodzą sprzed kilku(nastu) lat i dzisiaj pewnie napisałbym to trochę inaczej, ale lepsze jest wrogiem dobrego ;-). (defun SetLayers (/ temp systemEnv oHandle xName eObject IniList IniFile) (setq systemEnv (cd:ENV_SaveEnvVariable)) (setvar "cmdecho" 0) (setvar "regenmode" 0) (setq *layerKontur* "kontur" *layerOsie* "osie" *layerUkryte* "ukryte" *layerOpisy* "opisy" *layerWymiary* "wymiary" *layerStolarka* "stolarka" *layerCienkie* "cienkie" *layerHatche* "hatche" *layerPrety* "prety" *layerObok* "obok" *layerRzutnie* "rzutnie" *layer3DModel* "3D_model" IniFile (findfile "dodatki.ini") ) (setq IniList (if (not IniFile) (list) (cd:INI_Read IniFile))) (or IniFile (setq IniFile (strcat *cd-ApplicationPath* "dodatki.ini"))) (setq IniList (add_gr_ini IniList "[Layers]")) (if (setq temp (get_ini IniList "[Layers]" "kontur")) (setq *layerKontur* temp) (setq IniList (set_ini IniList "[Layers]" "kontur" *layerKontur*)) ) (if (setq temp (get_ini IniList "[Layers]" "osie")) (setq *layerOsie* temp) (setq IniList (set_ini IniList "[Layers]" "osie" *layerOsie*)) ) (if (setq temp (get_ini IniList "[Layers]" "ukryte")) (setq *layerUkryte* temp) (setq IniList (set_ini IniList "[Layers]" "ukryte" *layerUkryte*)) ) (if (setq temp (get_ini IniList "[Layers]" "opisy")) (setq *layerOpisy* temp) (setq IniList (set_ini IniList "[Layers]" "opisy" *layerOpisy*)) ) (if (setq temp (get_ini IniList "[Layers]" "wymiary")) (setq *layerWymiary* temp) (setq IniList (set_ini IniList "[Layers]" "wymiary" *layerWymiary*)) ) (if (setq temp (get_ini IniList "[Layers]" "stolarka")) (setq *layerStolarka* temp) (setq IniList (set_ini IniList "[Layers]" "stolarka" *layerStolarka*)) ) (if (setq temp (get_ini IniList "[Layers]" "cienkie")) (setq *layerCienkie* temp) (setq IniList (set_ini IniList "[Layers]" "cienkie" *layerCienkie*)) ) (if (setq temp (get_ini IniList "[Layers]" "hatche")) (setq *layerHatche* temp) (setq IniList (set_ini IniList "[Layers]" "hatche" *layerHatche*)) ) (if (setq temp (get_ini IniList "[Layers]" "prety")) (setq *layerPrety* temp) (setq IniList (set_ini IniList "[Layers]" "prety" *layerPrety*)) ) (if (setq temp (get_ini IniList "[Layers]" "obok")) (setq *layerObok* temp) (setq IniList (set_ini IniList "[Layers]" "obok" *layerObok*)) ) (if (setq temp (get_ini IniList "[Layers]" "rzutnie")) (setq *layerRzutnie* temp) (setq IniList (set_ini IniList "[Layers]" "rzutnie" *layerRzutnie*)) ) (if (setq temp (get_ini IniList "[Layers]" "3D_model")) (setq *layer3DModel* temp) (setq IniList (set_ini IniList "[Layers]" "3D_model" *layer3DModel*)) ) (cd:INI_Write IniList IniFile) (setq xName (cond ((= *cd-AppType* "ZWCAD") "zwcad.lin") (t "acad.lin") ) ) (cd:ACX_LoadLineType "dashed" xName) (cd:ACX_LoadLineType "dashdot" xName) (cd:ACX_LoadLineType "hidden2" xName) (cd:ACX_LoadLineType "center2" xName) (foreach xName (list (list *layerKontur* "continuous" 2 T) (list *layerOsie* "center2" 1 T) (list *layerUkryte* "hidden2" 1 T) (list *layerOpisy* "continuous" 7 T) (list *layerWymiary* "continuous" 1 T) (list *layerStolarka* "continuous" 3 T) (list *layerCienkie* "continuous" 1 T) (list *layerHatche* "continuous" 254 T) (list *layerPrety* "continuous" 5 T) (list *layerObok* "continuous" 9 T) (list *layerRzutnie* "continuous" 60 T) (list *layer3DModel* "continuous" 94 T) ) (setq eObject (cd:ACX_AddLayer (nth 0 xName))) (vla-put-linetype eObject (nth 1 xName)) (vla-put-color eObject (nth 2 xName)) (vla-put-plottable eObject (nth 3 xName)) ) (cd:ENV_RestEnvVariable systemEnv) ) Jak widać ja wczytuję linie z zwcad.lin ale jest to identyczny plik jak zwcadiso.lin. Nie wiem po co są dublowane. Sam plik ini jest banalny ale wydaje się, że użycie takiego sposobu jest łatwiejsze do użycia dla koleżanek i kolegów w biurze, którzy do LISPA trochę z pazurami podchodzą. [Layers] kontur=kontur osie=osie ukryte=ukryte opisy=opisy wymiary=wymiary stolarka=stolarka cienkie=cienkie hatche=hatche prety=prety obok=obok rzutnie=rzutnie 3D_model=3D_model Dzięki dmatusz3 za swoje rozwiązanie, bo chyba tym wzorem dorzucę sobie do ini również ustawienie linetype, color etc. Przy okazji, jak widać używam CADPL-Pack-v1, którego gorąco polecam. Na koniec jeszcze pokażę reaktora na komendy co zwalnia mnie z pamiętania o zmianach warstw w trakcie rysowania. Jest to z małymi poprawkami do ZwCAD'a kod Andrzeja Gumuły na co jest odpowiedni (c) w kodzie. Zdaje się, że na forum było pokazywane inne rozwiązanie chyba nieco mniej rozwlekłe, ale to mi działa i na razie tego nie zmieniam. ;;;* Funkcje ustanawia reaktor do zmiany warstwy dla wyszczególnionych komend (defun SetLayInCom (layer commandslist) (if (= (getvar "PRODUCT") "ZWCAD") (progn (vlr-remove-all :VLR-Command-Reactor) (vlr-command-reactor nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) (progn (if (not globalcommandslist) ; zabezpiecza przed ponowną deklaracją reaktora (vlr-command-reactor ; przy ponownym wczytaniu lisp'a nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) (mapcar '(lambda (x y) (set x y)) '(globalcommandslist globallayer) (list commandslist layer) ) (foreach x layer (if (not (tblsearch "LAYER" x)) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 x) '(70 . 0) '(62 . 7) '(6 . "Continuous") '(370 . -3) ) ) ) ;end if ) ;end foreach (defun bylayer (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy) ) (progn (if (not (and reactorlayer reactorcolor reactorltype reactorlweight ) ) (mapcar '(lambda (x y) (set x (getvar y))) '(reactorlayer reactorcolor reactorltype reactorlweight) '("clayer" "cecolor" "celtype" "celweight") ) ) ; end if (mapcar '(lambda (x y) (setvar x y)) '("clayer" "cecolor" "celtype" "celweight") (list (nth licznik globallayer) "256" "Bylayer" -1) ) ) ) ;end If (setq licznik (1+ licznik)) ) ;end foreach ) ;end ByLayer (defun previous (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy ) ) (progn (if (and reactorlayer reactorcolor reactorltype reactorlweight) (mapcar '(lambda (x y) (setvar x y)) (list "clayer" "cecolor" "celtype" "celweight") (list reactorlayer reactorcolor reactorltype reactorlweight ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) ) ) (setq licznik (1+ licznik)) ) ;end cond ) ;end Previous t (prompt "SetLayInCom (C)2003 Andrzej Gumuła.") (princ) ) ;end file Na koniec wywołanie w kodzie startowym i mamy piękny reaktor na dowolne komendy jakie sobie dopiszemy. (setlayincom (list *layerWymiary* *layerHatche* *layerOsie* *layerCienkie* *layerOpisy*) '( ("DIMLINEAR" "DIMALIGNED" "DIMRADIUS" "DIMDIAMETER" "DIMANGULAR" "DIMORDINATE" "DIMCONTINUE" "DIMBASELINE" "QDIM" "DIMJOGGED" "DIMARC") ("BHATCH") ("DIMCENTER") ("QLEADER") ("DTEXT" "TEXT") ) ) Edited November 14, 2017 by perlon dmatusz3, kruszynski and Adam Klaczek 3 Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 14, 2017 Author Report Share Posted November 14, 2017 Dzięki za opis. Świetny pomysł z trzymaniem ustawień warstw w plikach .ini i dobry materiał do analizy. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted December 14, 2017 Author Report Share Posted December 14, 2017 Nazbierało się trochę lispów, postanowiłem zebrać je w jednym pliku (można go oczywiście dopasować do swoich potrzeb). Oto jego zawartość: zmiana koloru tła: polecenia: białe, czarne, szare, przełączenie widoczności polilinii podczas edycji: polecenie zz, obrót UCS o wskazany kąt bez zmiany jego początku: polecenie ucsz, dodawanie i usuwanie wierzchołków polilinii: polcenie apv, rmv, odtworzenie obwiedni kreskowania: polecenie ook (na filmie poniżej) Skrypt do pobrania skrypt-startowy.lsp pawmal 1 Quote Link to comment Share on other sites More sharing options...
zolwik00 Posted December 22, 2017 Report Share Posted December 22, 2017 Witam a czy jest możliwość generowania tych warstw wraz z grubościami linii. Quote Link to comment Share on other sites More sharing options...
kruszynski Posted December 22, 2017 Report Share Posted December 22, 2017 Poprawka z grubościami lini w załączniku. lstart.lsp Quote Link to comment Share on other sites More sharing options...
zolwik00 Posted December 22, 2017 Report Share Posted December 22, 2017 dziękuję Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted December 29, 2017 Author Report Share Posted December 29, 2017 UWAGA. Dokonam zmiany w pierwszym poście, tak aby zawsze zawierał on najnowszy skrypt startowy. Do skryptu startowego zwpack dodaliśmy możliwość tworzenia warstw z możliwością nadawania grubości, oraz polecenie bb (BBEDIT) edytująca bezpośrednio w edytorze bloków wskazany blok (pokazałem to na filmie poniżej). skrypt-startowy_v01.lsp Quote Link to comment Share on other sites More sharing options...
kojacek Posted December 30, 2017 Report Share Posted December 30, 2017 Odnośnie polecenia C:ZZ (ze skryptu), przełączającego FILLMODE, polecam szersze rozwiązania: https://kojacek.wordpress.com/2017/12/30/uproszczone-wyswietlanie-obiektow/ alf 1 Quote Link to comment Share on other sites More sharing options...
Tafla Posted January 10, 2018 Report Share Posted January 10, 2018 Cześć! ja mam problem z osiami symetrii i liniami przerywanymi. Zawsze jest zabawa z ltscale, żeby linia przerywana wyglądała jak przerywana. Czy możecie zrobić skrypt żeby zaznaczyć okno obejmujące rysunek i żeby ltscale dopasowała się do tego okna? Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted January 10, 2018 Author Report Share Posted January 10, 2018 Może coś takiego pomoże. zwscale.lsp (defun c:zwscale (/) (setq pkt1 (getpoint "\nPodaj pierwszy punkt: ")) (setq pkt2 (getpoint "\nPodaj drugi punkt: ")) (setvar "LTSCALE" (/ (distance pkt1 pkt2) 400)) (command "_regen") ) Tafla 1 Quote Link to comment Share on other sites More sharing options...
Tafla Posted January 15, 2018 Report Share Posted January 15, 2018 Dzięki, działa. Quote Link to comment Share on other sites More sharing options...
Tafla Posted February 16, 2018 Report Share Posted February 16, 2018 Czy można jakoś dodać do skryptu aby tworzyły się własne kreskowania? np wybieram istniejący wzór, podaję kąt skale i kolor. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted February 16, 2018 Author Report Share Posted February 16, 2018 Nie jesteśmy pewni za bardzo czy chodzi o coś takiego, ale własne style kreskowania możemy dodać do palety narzędzi. Martin_S and kruszynski 2 Quote Link to comment Share on other sites More sharing options...
alf Posted February 16, 2018 Report Share Posted February 16, 2018 a mi coś nie idzie, bo wyskakuje przy próbie wkopiowania interesującej grupy kreskowań do palety własnych. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted February 16, 2018 Author Report Share Posted February 16, 2018 A pojedynczo? Quote Link to comment Share on other sites More sharing options...
alf Posted February 16, 2018 Report Share Posted February 16, 2018 to było pojedynczo.. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted February 16, 2018 Author Report Share Posted February 16, 2018 a vernum? Quote Link to comment Share on other sites More sharing options...
alf Posted February 16, 2018 Report Share Posted February 16, 2018 (edited) vernum = "2017.12.19(25174)_x64" (read only) wysłałam dwga z przykładowymi hatchami by mail, zwykłe pakietowe hatche się ładnie kopiują, tylko te "cudze" nie Edited February 16, 2018 by alf Quote Link to comment Share on other sites More sharing options...
Tafla Posted February 16, 2018 Report Share Posted February 16, 2018 3 godziny temu, dmatusz3 napisał: Nie jesteśmy pewni za bardzo czy chodzi o coś takiego, ale własne style kreskowania możemy dodać do palety narzędzi. dziękuję za ten film! Dokładnie tego szukałem. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted March 28, 2018 Author Report Share Posted March 28, 2018 Utworzyliśmy dla tego lispa paletę narzędzi oraz dodaliśmy jedno nowe polecenie. Palet wygląda tak: natomiast nowe polecenie w palecie zaznacza ostatnio wybrany zbiór obiektów. Pokazałem to na filmie. Pliki do pobrania: ZWPack_2018.02.zip Opis instalacji: Pobrany plik należy rozpakować na dysku Z rozpakowanego katalogu importujemy paletę narzędzi klikając PPM w palecie Wskazujemy plik ZWPack.xml Powinna się pojawić paleta oraz ikony. Wczytujemy LISP, który znajduje się w rozpakowanym katalogu Dodajmy wybrany LISP do listy startowej, aby po każdym uruchomieniu ZWCADa skrypt został wczytany. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted April 5, 2018 Author Report Share Posted April 5, 2018 Zebraliśmy wszystkie narzędzia i utworzyliśmy pełny opis funkcjonalności tutaj https://www.zwcad.pl/ui-szansa/zwpack.html Quote Link to comment Share on other sites More sharing options...
bobik_123 Posted April 24, 2018 Report Share Posted April 24, 2018 Odnośnie UCSZ - tak z ciekawostek Brakowało mi czegoś a mianowicie automatycznemu dostosowaniu planu do zmienionego układu. Pod koniec lispa po wierszu Cytuj (command "_UCS" "_Z" (rtos (r2d ang ) ) ) dodałem linię Cytuj (command "_PLAN" "A") i nawet działa ucsz v2.flv Do osób znających się na kodzie lepiej ode mnie: Prośba o sprawdzenie i ewentualnie modyfikację co tam trzeba Jeszcze przydałby się skrót powrotu do globalnych układów Quote Link to comment Share on other sites More sharing options...
alf Posted October 9, 2018 Report Share Posted October 9, 2018 mi nadal brakuje możliwości rysowania w trybie "orto" widoku ale w układzie współrzędnych globalnych.. Innymi słowy Brakuje mi obracania widoku ale bez obrotu UCS. Ponadto taki drobiazg, przy wywoływaniu comm PLAN aktualny widok powraca do widoku "all" a nie ostatniego powiększenia (lub pomniejszenia).. wygodniej było by gdyby był zakres ostatniego widoku. Dla dużych rysunków takie "kręcenie" widokiem z "all" powiększeniem jest uciążliwe.. Taki roboczy obrót widoku jest doskonałym narzędziem do trasowania na planie różnych rzeczy równolegle czy prostopadle do pewnych obiektów.. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.