Offensichtlich doch noch ein kleiner Strudel im Strom der Erkenntnis...
Es gibt in Acad Blöcke (das ist das Zeugs, was man ggf. wegbereinigen kann) und Blockreferenzen (das ist das, was man ggf. löschen kann). Blockreferenzen hören manchmal auch auf den Namen "Insert".
Auf die ganze Verwirrung, die schon durch die Anwender verursacht wird (es werden ständig diese zwei Dinge verwechselt), setzt Autodesk noch einen drauf: Nirgendwo in AutoCAD hat man es geschafft, die Konsistenz der Nomenklatur noch tiefer zu legen als bei Blöcken und Attributen.
Die Sachverhalte noch mal im einzelnen: Definitionsseitig gibt es Blöcke und Attributsdefinitionen, Verwendungsseitig aber Inserts(Blockreferenzen) und Attribute. getAttributes liefert dir immer die Attribute eines eingefügten, refrenzierten Blocks, aber niemals die Definition - das verwendete (entsel) kann ja sowieso nur Inserts liefern, niemals aber Blockdefinitionen.
Die Eigenschaft Constant kann aber nur einer Attributsdefintion zugewiesen werden - nicht einem Attribut. Wenn du eine Blockdefinition zweimal in die Zeichnung einfügst und unter "Name" einmal den Wert "Hinz" und das zweite Mal "Kunz" verwendet hast, verweigert COM aus gutem Grund die Constant-Einstellung, denn in einem konstanten Attribut steht ja immer das Selbe drin.
Ein Insert besteht aus zwei Teilen: Zum einen ist da die referenzierte Geometrie, die bei jedem Insert gleich ist. Auf der anderen Seite hat man die nichtkonstanten Attribute mit ihren variablen Inhalte. Konstante Attribute sind aber Bestandteil der refenzierten Geometrie - deswegen kriegt man sie ja auch nicht in der entnext-Schleife, mit der man die anderen Attibute auslesen kann. In COM bekommst du mit GetAttributes die nichtkonstanten Attribute einer Blockreferenz, und um die konstanten aus der Blocktabelle auszulesen, musst du GetConstantAttributes verwenden.
Um Achims Kernaussage noch einmal zu verdeutlichen: Konstante Attribute kann man nur vor der Verwendung eines Blocks definieren. Attribute an einem Insert nachträglich in konstante Attribute zu verwandeln, ist so sinn- und aussichtslos wie die Umwandlung eines Rechtecks in einen Kreis.
Ein Tabelle mit der kompletten delirischen Nomenklatur für AutoCAD, VisualLisp, COM und ObjectARX/DBX habe ich mal im VBA-Forum gepostet: suchen.
Gruß, Axel Strube-Zettler
------------------
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP