Tomasz79 Opublikowano 20 Maja 2009 Zgłoś 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
kruszynski Opublikowano 20 Maja 2009 Zgłoś 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
Tomasz79 Opublikowano 20 Maja 2009 Autor Zgłoś Opublikowano 20 Maja 2009 Działa. Wielkie dzięki :lol: Pozdrawiam
Rekomendowane odpowiedzi