swazy Opublikowano Sobota o 10:04 Zgłoś Udostępnij Opublikowano Sobota o 10:04 (edytowane) Cześć! Popełniłem taką oto komendę, która ma na celu odmrożenie wszystkich warstw pasujących do danego klucza. I o ile w ZWCAD 2021 (i 2024) działa tak jak się tego spodziewałem, o tyle w AC 2022 już nie. To znaczy w memu warstw, warstwy na których mi zależy w kolumnie freeze zmieniają symbol na "odmrożony", ale w programie te warstwy fizycznie nie wyświetlają się. (defun C:ODMROZENIE_WARSTW ( / POM jeszcze LAY qqq ) (setq POM (tblnext "layer" T )) (setq jeszcze T ) (while jeszcze (setq LAY (cdr (assoc 2 POM ))) (if (and (wcmatch (substr LAY 1 17 ) (strcat "@@####@#########@#" )) ;tutaj jakiś klucz nazewnictwa warstw );and (progn (setq qqq (entget (tblobjname "layer" LAY ))) (if (= 1 (cdr (assoc 70 qqq ))) (progn (setq qqq (subst (cons 70 0 )(assoc 70 qqq ) qqq)) (entmod qqq) );progn );if (if (= 49 (cdr (assoc 70 qqq ))) (progn (setq qqq (subst (cons 70 48 )(assoc 70 qqq ) qqq)) (entmod qqq) );progn );if );progn );if (setq POM (tblnext "layer" )) (if (= POM nil ) (setq jeszcze nil )) );while (princ) );defun Macie pomysł co można z tym zrobić? "regen" nie działa, "redrawall" też nie. Ale już po zapisaniu, wyjściu i wczytaniu pliku wyświetla się to tak jak powinno. Również po włączeniu "layon" odmrożone warstwy się wyświetlają poprawnie, no ale siłą rzeczy włączają się warstwy, które chciałbym mieć "off". I kolejne pytanie: czy jest gdzieś sporządzona lista wszystkich komend visual lispa analogicznie jak to jest w naszym cad-packu? Bo może dałoby się odmrozić skutecznie te warstwy visualowo (?) (szczerze mówiąc wolę klasycznego lispa bo jest ładniejszy 😄 ). Edytowane Sobota o 10:06 przez swazy Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kojacek Opublikowano Sobota o 17:53 Zgłoś Udostępnij Opublikowano Sobota o 17:53 Być może przyczyną jest funkcja entmod. Wprawdzie może ona modyfikować obiekty niegraficzne (tutaj LAYER), ale gdzieś czytałem że są wyjątki dla kodu 70 - nie pamiętam jednak czego dotyczyły. W autocadowskich "antycznychch" czasach (przed ActiveX (czyli przed 1999 )), pewnie bym użył command zamiast entmod… ale pewnie dlatego że byłoby łatwiej. Na marginesie - Twoje warunkowanie kodu 70 jest błędne - działa tylko w wyjątkowych sytuacjach. Kod 70 jest wartością bitową, więc na przykład 1 jest prawdziwe nie tylko dla 1, ale też 3 (2+1)... 5 (4+1)... 7 (2+4+1)... 9... etc. Teraz przykład z użyciem ActiveX (i CADPack'a). Krótko (i co ważniejsze) działa: (defun C:ODMROZWAR () (vlax-for % (cd:ACX_Layers) (if (and (= :vlax-true (vla-get-freeze %)) (wcmatch (vla-get-name %) "LS*") ; <- moj testowy filtr ) (vla-put-freeze % :vlax-false) ) ) (vla-regen (cd:ACX_ADoc) 0) (princ) ) dmatusz3 i RobS 2 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
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ą.