dmatusz3 Opublikowano 13 Listopada 2017 Zgłoś Opublikowano 13 Listopada 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 Cytuj
Martin_S Opublikowano 13 Listopada 2017 Zgłoś Opublikowano 13 Listopada 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" Cytuj
perlon Opublikowano 14 Listopada 2017 Zgłoś Opublikowano 14 Listopada 2017 (edytowane) 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") ) ) Edytowane 14 Listopada 2017 przez perlon Adam Klaczek, kruszynski i dmatusz3 3 Cytuj
dmatusz3 Opublikowano 14 Listopada 2017 Autor Zgłoś Opublikowano 14 Listopada 2017 Dzięki za opis. Świetny pomysł z trzymaniem ustawień warstw w plikach .ini i dobry materiał do analizy. Cytuj
dmatusz3 Opublikowano 14 Grudnia 2017 Autor Zgłoś Opublikowano 14 Grudnia 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 Cytuj
zolwik00 Opublikowano 22 Grudnia 2017 Zgłoś Opublikowano 22 Grudnia 2017 Witam a czy jest możliwość generowania tych warstw wraz z grubościami linii. Cytuj
kruszynski Opublikowano 22 Grudnia 2017 Zgłoś Opublikowano 22 Grudnia 2017 Poprawka z grubościami lini w załączniku. lstart.lsp Cytuj
dmatusz3 Opublikowano 29 Grudnia 2017 Autor Zgłoś Opublikowano 29 Grudnia 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 Cytuj
kojacek Opublikowano 30 Grudnia 2017 Zgłoś Opublikowano 30 Grudnia 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 Cytuj
Tafla Opublikowano 10 Stycznia 2018 Zgłoś Opublikowano 10 Stycznia 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? Cytuj
dmatusz3 Opublikowano 10 Stycznia 2018 Autor Zgłoś Opublikowano 10 Stycznia 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 Cytuj
Tafla Opublikowano 16 Lutego 2018 Zgłoś Opublikowano 16 Lutego 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. Cytuj
dmatusz3 Opublikowano 16 Lutego 2018 Autor Zgłoś Opublikowano 16 Lutego 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 i kruszynski 2 Cytuj
alf Opublikowano 16 Lutego 2018 Zgłoś Opublikowano 16 Lutego 2018 a mi coś nie idzie, bo wyskakuje przy próbie wkopiowania interesującej grupy kreskowań do palety własnych. Cytuj
alf Opublikowano 16 Lutego 2018 Zgłoś Opublikowano 16 Lutego 2018 (edytowane) 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 Edytowane 16 Lutego 2018 przez alf Cytuj
Tafla Opublikowano 16 Lutego 2018 Zgłoś Opublikowano 16 Lutego 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. Cytuj
dmatusz3 Opublikowano 28 Marca 2018 Autor Zgłoś Opublikowano 28 Marca 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. Cytuj
dmatusz3 Opublikowano 5 Kwietnia 2018 Autor Zgłoś Opublikowano 5 Kwietnia 2018 Zebraliśmy wszystkie narzędzia i utworzyliśmy pełny opis funkcjonalności tutaj https://www.zwcad.pl/ui-szansa/zwpack.html Cytuj
bobik_123 Opublikowano 24 Kwietnia 2018 Zgłoś Opublikowano 24 Kwietnia 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 Cytuj
alf Opublikowano 9 Października 2018 Zgłoś Opublikowano 9 Października 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.. Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.