Jak zmienić wartość atrybutów w bloku za pomocą AutoLisp-a?


Tomasz79

Rekomendowane odpowiedzi

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

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

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.