2P Opublikowano 30 Kwietnia 2018 Zgłoś Opublikowano 30 Kwietnia 2018 Mam rysunek, w którym są różne bloki, w tym bloki zagnieżdżone bloki w blokach. Robię PURGE, ale zostaje niechciana warstwa. podejrzewam, że jakiś blok w boku został umieszczony na tej warstwie, albo jakiś element definiujący blok jest na tej niechcianej warstwie. Jak go sensownie odnaleźć? Jak wyszukać zagnieżdżony blok na jakiejś warstwie? Może ma ktoś odpowiedniego LISPa? Cytuj
pawmal Opublikowano 30 Kwietnia 2018 Zgłoś Opublikowano 30 Kwietnia 2018 Proszę spróbować skopiować cześć lub wszystkie elementy do nowego pliku i sprawdzić. Oprócz tego, że nie można usunąć warstwy na której znajdują się elementy, to także warstwa nie może być warstwą bieżącą. Cytuj
2P Opublikowano 30 Kwietnia 2018 Autor Zgłoś Opublikowano 30 Kwietnia 2018 Zastosowałem tego typu różne metody. W tym sprawdziłem, czy coś nie ma na arkuszach. Jedyny powód pozostania warstwy jaki mi pozostał to zagnieżdżenie bloków... Cytuj
dmatusz3 Opublikowano 30 Kwietnia 2018 Zgłoś Opublikowano 30 Kwietnia 2018 Może polecenie laywalk (ewentualnie layerbrowser) by coś pomogło - można wyświetlić obiekty na warstwie. Można także siłowo usunąć warstwę - laydel i porównać pliki przed i po usunięciu - polecenie fcmp Można też siłowo przenieść elementy z jednej warstwy na drugą - laymrg Cytuj
2P Opublikowano 30 Kwietnia 2018 Autor Zgłoś Opublikowano 30 Kwietnia 2018 layerbrowser nie pomógł. (Przy okazji wyszedł błąd wynikający jak zwykle z innego koloru ekranu na jakim pracuję. Miniaturki w oknie layerbrowser powinny być generowane na białym a nie na czarnym tle dla pracujących na białym, bo obecnie w miniaturkach nie widać linii rysowanych kolorem 7 - ale to drobiazg) laydel skasował warstwę, ale porównanie rysunków nic nie wskazało.... Może na tej warstwie była np. linia o zerowej długości? laymrg - powiedzmy że rozwiązał mój problem dziś. Dzięki. Cytuj
dmatusz3 Opublikowano 30 Kwietnia 2018 Zgłoś Opublikowano 30 Kwietnia 2018 Dzięki za informacje. Myślę, że ten temat mogę uznać za rozwiązany. Na marginesie dodam, że spis dodatkowych narządzi do warstw jest dostępny tutaj. Cytuj
kojacek Opublikowano 30 Kwietnia 2018 Zgłoś Opublikowano 30 Kwietnia 2018 (edytowane) Przepraszam, zakładam ponownie temat, bowiem w mojej opinii został zbyt wcześnie zamknięty. Wydaje mi się że problem nie został jednak rozwiązany - patrząc na sam tytuł wątku. Nie przedłużając - do rzeczy. Przedstawiam poniżej funkcje LISP-a, które pozwalają znaleźć element(y) w definicji bloku, który nie znajduje się na warstwie "0". Zwykle takie właśnie obiekty tworzą opisywaną sytuacją - nie można "wypurgować" warstwy, pomimo tego że nie znajdują się na niej żadne (uchwytne w normalnej edycji) elementy. Poniżej dwie funkcje: ; ---------------------------------------------------------------- ; ; by kojacek [https://kojacek.wordpress.com] ; ; ---------------------------------------------------------------- ; ; Funkcja sprawdza wszystkie elementy bloku <BName>. Zwraca liste ; ; obiektow <ename> ktore znajduja sie na innej warstwie niz "0" ; ; lub nil ; ; ---------------------------------------------------------------- ; (defun jk:BLK_Find-NoStandardLay (BName) (vl-remove-if '(lambda (%) (= "0" (cdr (assoc 8 (entget %)))) ) (cd:BLK_GetEntity BName nil) ) ) ; ---------------------------------------------------------------- ; ; Funkcja dla listy nazw blokow <Blist>, sparawdza kazdy blok, czy ; ; znajduja sie w nim elementy na innych warstwach niz "0". Zwraca ; ; liste typu (("BName-1 <ename...><ename...> ... )) lub nil ; ; ---------------------------------------------------------------- ; (defun jk:BLK_InspectBlock (BList / r) (if (setq r (mapcar '(lambda (% / %1) (if (setq %1 (jk:BLK_Find-NoStandardLay %)) (append (list %) %1) ) ) BList ) ) (vl-remove 'nil r) ) ) ; ---------------------------------------------------------------- ; Korzystają z biblioteki CADPL-Pack (http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html) Przykładowe wywołanie: (jk:BLK_InspectBlock (cd:SYS_CollList "BLOCK" (+ 1 2))) może w konsoli VLIDE AutoCAD-a zwracać taką listę (tutaj dwa bloki z elementami leżącymi na innej niż "0" warstwa): Sposób ten jak widać pozwala wyłapać "niehigienicznie" tworzone bloki (i określone w nim obiekty) które mogą "wlec" ze sobą niepotrzebne warstwy. Mając tę wiedzę można już spokojnie przedefiniować blok (wyrażeniem LISP-a w jednej linii - ale to inna bajka 😉 ), a w konsekwencji wyczyścić rysunek z niepotrzebnych warstw. Co ważne - świadomie, bowiem wiemy co zostało zepsute, i potrafimy to naprawić. Uwaga: Przedstawione funkcje działają na 100% w AutoCAD-zie, proszę sprawdzić czy dają się z powodzeniem uruchomić na ZwCAD. Niestety nie mogę tego zweryfikować. Edytowane 30 Kwietnia 2018 przez kojacek Cytuj
dmatusz3 Opublikowano 30 Kwietnia 2018 Zgłoś Opublikowano 30 Kwietnia 2018 Ponieważ "pojawiły się nowe fakty" otwieram temat i łączę wątki. Cytuj
kojacek Opublikowano 2 Maja 2018 Zgłoś Opublikowano 2 Maja 2018 Tutaj trochę szerzej: https://kojacek.wordpress.com/2018/05/02/warstwy-bloki-purge/ 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ą.