2P Posted April 30, 2018 Report Share Posted April 30, 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? Quote Link to comment Share on other sites More sharing options...
pawmal Posted April 30, 2018 Report Share Posted April 30, 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ą. Quote Link to comment Share on other sites More sharing options...
2P Posted April 30, 2018 Author Report Share Posted April 30, 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... Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted April 30, 2018 Report Share Posted April 30, 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 Quote Link to comment Share on other sites More sharing options...
2P Posted April 30, 2018 Author Report Share Posted April 30, 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. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted April 30, 2018 Report Share Posted April 30, 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. Quote Link to comment Share on other sites More sharing options...
kojacek Posted April 30, 2018 Report Share Posted April 30, 2018 (edited) 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ć. Edited April 30, 2018 by kojacek Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted April 30, 2018 Report Share Posted April 30, 2018 Ponieważ "pojawiły się nowe fakty" otwieram temat i łączę wątki. Quote Link to comment Share on other sites More sharing options...
kojacek Posted May 2, 2018 Report Share Posted May 2, 2018 Tutaj trochę szerzej: https://kojacek.wordpress.com/2018/05/02/warstwy-bloki-purge/ 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.