Seit der Verwendung von ACAD 2008 ist mir aufgefallen, wenn ich einen Block mit den zugehörigen Attributen in der Höhe über ENTMOD ändere, das die Änderungen der Attribute nicht übernommen werden. Die Geometrie-Elemente des Blockes und der Basispunkt sind auf der gewünschten Höhe, die Attribute haben sich aber nicht geändert.
Und das alles mit Programmen, die zumindest in 2006 einwandfrei laufen.
Das Problem ist, das ich den Wert des GC 11 (der ist ja optional) nur in der Höhe ändere, wenn die ersten beiden Elemente ungleich Null sind.
d.h., wenn GC 11 = (0.0 0.0 0.0), dann habe ich ihn auch so gelassen.
Aber seit 2008 geht das nicht mehr, jetzt muß ich trotzdem die Höhe setzen, ansonsten ändert sich die Höhe des Attributes nicht:
(0.0 0.0 0.0) => (0.0 0.0 12.9) wenn z.B. 12.9 die neue Höhe ist.
Vielleicht kann mir ja einer von Euch erklären, warum das so ist.
Hier noch mal ein Code, den ich in ACAD 2006 durchlaufen lasse (keine Probleme) und in 2008 (dort bleibt das erste Attribut in der Beispielzeichnng auf der Höhe Null.
Code:
(defun c:block_att_hoehe ( / obj hoehe A liste)
(if (and(setq obj (car (entsel "\nBitte wählen Sie einen Block mit Attributen aus:")))
(=(cdr(assoc 0 (entget obj)))"INSERT"))
(progn
(setq hoehe(getreal "\nBitte geben Sie die neue Höhe für den Block ein:"))
;;;Blockbasispunkt auf Höhe bringen
(entmod (subst (cons 10 (reverse(cons hoehe(cdr(reverse (cdr(assoc 10 (entget obj))))))))
(assoc 10 (entget obj))
(entget obj)))
;;;Attribute auf Höhe bringen
(mapcar '(lambda(A)
(setq A(subst (cons 10 (reverse(cons hoehe(cdr(reverse (cdr(assoc 10 A)))))))
(assoc 10 A)
A))
;;;wenn GC11 in Verwendung
(if (and (/= 0.0 (car (cdr(assoc 11 A))))
(/= 0.0 (cadr (cdr(assoc 11 A)))))
(setq A(subst (cons 11 (reverse(cons hoehe(cdr(reverse (cdr(assoc 11 A)))))))
(assoc 11 A)
A)))
(entmod A))
(JBf_list_att_aus_block_obj obj))
(entupd obj))))
(defun JBf_list_att_aus_block_obj (obj / list_att)
(if (and (entnext obj)(=(cdr(assoc 0(entget (entnext obj))))"ATTRIB"))
(while (and(setq obj (entnext obj))
(/= "SEQEND" (cdr(assoc 0(entget obj)))))
(if (=(cdr(assoc 0(entget obj)))"ATTRIB")
(setq list_att (cons (entget obj)list_att)))))
(if list_att
(reverse list_att)
nil))
Ein Beispiel habe ich als DWG-Datei angehängt.
------------------
viele Grüße
Jörn
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP