| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: vla-put-Constant (1289 mal gelesen)
|
WolfgangGutke Mitglied Konstrukteur
Beiträge: 109 Registriert: 28.09.2004 AutoCAD 2002 AutoCAD 2006 ObjectDCL 2.02
|
erstellt am: 07. Okt. 2005 11:28 <-- editieren / zitieren --> Unities abgeben:
Hallo, hat jemand eine Ahnung, warum AutschCAD bei der Funktion (foreach Att (vlax-safearray->list (vlax-variant-value (vla-getAttributes (vlax-ename->vla-object (car (entsel)))))) (vla-put-Constant Att :vlax-true) ) folgende Fehler zurückgibt, wenn ich ein Block mit Attribute wähle?? ; Fehler: ActiveX-Server hat einen Fehler zurückgegeben: Typkonflikt VG Wolfgang P.S.: Konnte nirgendwo entwas über vla-put-constant finden
------------------ LISP = Lots of Insane Stupid Parantheses Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marvin101010 Mitglied ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)
Beiträge: 562 Registriert: 22.01.2003 Pentium 4 Windows XP Autocad 2002 Autocad 2002LT + Extender ADT 3.3 ArchiCAD
|
erstellt am: 07. Okt. 2005 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
|
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 07. Okt. 2005 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
Tag zusammen. Der kleine aber feine Unterschied zwischen ATTRIB und ATTDEF schlägt hier erbarmungslos zu. COM (oder ActiveX) kennt beide als "AttributeReference" und "Attribute", die Eigenschaft 'Constant' ist aber bei ATTRIBs 'readonly' und kann nur bei ATTDEFs gesetzt werden. Die Methode getAttributes gibt aber, anders als der Name vermuten ließe, ein Array mit AttributeReferences zurück. Deshalb klappt das nicht mit dem Setzen der Eigenschaft. Mit (vlax-property-available-p Att'Constant'check-writable) kann im Vorfeld geprüft werden, ob die EIgenschaft geschrieben werden kann oder nicht. Achim Dabrunz ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WolfgangGutke Mitglied Konstrukteur
Beiträge: 109 Registriert: 28.09.2004 AutoCAD 2002 AutoCAD 2006 ObjectDCL 2.02
|
erstellt am: 07. Okt. 2005 20:02 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Achim, war leider durch die Tatsache etwas verwirrt, dass ein vla-put-Invisible auf Anhieb funktioniert, was doch im eigentlichen Sinne (wenn ich mich nicht täusche) genauso auf ein Attributtag "wirkt", wie das vla-put-Constant - oder?? Wenn ich mich täusche, kannst du mir bitte Posten, wie man es mit dem vla-put-Constant richtig macht?? Vielen Dank Wolfgang ------------------ LISP = Lots of Insane Stupid Parantheses Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 08. Okt. 2005 14:38 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
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 |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 18. Okt. 2005 13:26 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
Man könnte sagen: statt konstanter Attribute könnte man auch einzeiliege Texte verwenden - denn diese sind auch konstant. Einziger Unterschied zu Texten: Konstanze reagiert auf geänderte Einstellungen von ATTMODE. VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 18. Okt. 2005 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
|
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 19. Okt. 2005 14:13 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
Ja, dann muss ich aber - wie Axel so schön schrieb - in die Blockdefinition gehen und dort nach der Attributdefinition suchen. Klar, dann habe ich TagString (zum Vergleichen) und des TextString (mit dem Wert). Durchgängiger fände ich es, könnte man am Insert mit vla-getAttributes nicht nur die variablen Attribute, sondern auch die konstanten "Attribute" herausbekommen. Denn ich kann auch von Attributen, die ich mit vla-getattributes bekomme, die Eigenschaft Constant abfragen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 19. Okt. 2005 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
|
| Projektingenieur (m/w/d) Maschinenbau | Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte.... | Anzeige ansehen | Projektmanagement |
|
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 20. Okt. 2005 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangGutke
Hallo Wolfgang, Zitat: Original erstellt von WolfgangGutke:
P.S.: Konnte nirgendwo entwas über vla-put-constant finden
in der Anlage ist er Weg um in der AutoCAD-Entwicklerhilfe etwas zu finden. Hier kurz beschrieben: - Visual LISP-Editor starten - vla-put-constant in der Visual LISP-Konsole eingeben und markieren - auf "Aus Symbolsatz ergänzen" klicken - es öffnet sich das Fenster Apropos-Ergebnisse - darin vla-put-constant markieren und die Hilfe aufrufen - es wird die AutoCAD-Entwicklerhilfe gestartet Weiter kann ich Dir leider nicht helfen, aber vielleicht kommst Du damit ja etwas weiter. Gruß Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |