Wyszukiwanie elementów blokujących warstwy [rozwiązany]


2P

Recommended Posts

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?

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • dmatusz3 changed the title to Wyszukiwanie elementów blokujących warstwy [rozwiązany]
  • dmatusz3 locked this topic

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
Link to comment
Share on other sites

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