Tomasz79 Opublikowano 20 Maja 2009 Zgłoś Udostępnij Opublikowano 20 Maja 2009 Witam. Chcę zamienić wartość atrybutów w blokach hurtowo. Skleciłem procedurę, ale nie chce działać a powinna. Blok ma tylko jeden atrybut. (defun C:xxx( / da da1 da2 ile_danych ed) (progn (setq ile_danych 0) (prompt "\nWybierz blok do zmiany jego atrybutu:") (setq da (ssget (list (cons 0 "insert" ))));wybieram bloki (while (< ile_danych (sslength da));warunek na ilość bloków w rysunku (setq da1 (ssname da ile_danych));odczy kolejnego bloku (setq da2 (entnext da1));przechodzę do atrybutu (setq da2 (subst(cons 1 "TEST") (assoc 1 da2)da2));zamieniam wartość atrybutu (entmod da2) (setq ile_danych (+ 1 ile_danych)) ;sumowanie ); end while )) Proszę powiedzieć co robie nie tak. :cry: Z góry dziękuje za pomoc. Pozdrawiam Tomasz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 20 Maja 2009 Zgłoś Udostępnij Opublikowano 20 Maja 2009 Witam Powodem Pana problemu jest to, że wywyołuje Pan (assoc 1 da2) z drugim parametrem będącym nazwą elementu (entity name), zamiast tego parametrem powinna być lista definiująca atrybut. Można ją pobrać z nazwy poleceniem (entget) czyli wystarczy zmienić linijkę: (setq da2 (entnext da1)) na: (setq da2 (entget(entnext da1))) na koniec proszę jeszcze wywołać polecenie regen Powodzenia Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tomasz79 Opublikowano 20 Maja 2009 Autor Zgłoś Udostępnij Opublikowano 20 Maja 2009 Działa. Wielkie dzięki :lol: Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi