Recommended Posts

Posted

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?

 

Posted

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

Posted

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

Posted

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

 

Posted

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 changed the title to Wyszukiwanie elementów blokujących warstwy [rozwiązany]
  • dmatusz3 locked this topic
Posted (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):

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

 

 

Edited by kojacek

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...