swazy Posted October 19 Report Share Posted October 19 (edited) 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 😄 ). Edited October 19 by swazy Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 19 Report Share Posted October 19 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, swazy and RobS 1 2 Quote Link to comment Share on other sites More sharing options...
swazy Posted October 27 Author Report Share Posted October 27 Łał, mega... Dziękuję Chyba rzeczywiście pora się przesiąść z trabanta na coś nowszego... A czy możecie polecić jakieś materiały, które wprowadzają w v-lisp'a i ActivX'a ? Oczywiście znam LeeMac'a i wordpress'a Kojacka +to forum, ale czy są jakieś opracowania z listą wszystkich dostępnych komend. LISP'a nauczyłem się z prehistorycznej książki zassanej z odmętów chomika i mówiąc szczerze to najbardziej mi odpowiada taka forma nauki. Pomoc ZWCAD-owa też jest mega pożyteczna, ale tam już trzeba wiedzieć, czego się szuka. 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.