Rekomendowane odpowiedzi

Opublikowano

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?

 

Opublikowano

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ą.

Opublikowano

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...

Opublikowano

Może polecenie laywalk  (ewentualnie layerbrowser) by coś pomogło - można wyświetlić obiekty na warstwie.

laywalk.gif

 

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

 

Opublikowano

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.

  • dmatusz3 zmienił(a) tytuł na Wyszukiwanie elementów blokujących warstwy [rozwiązany]
  • dmatusz3 zablokował(a) ten temat
Opublikowano (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):

BlockLayerInspector.gif.d60b514cf53fa08e841a7a5d84083612.gif

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 przez kojacek

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ą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie