Sehr geehrter Professor Flatscher,
im Anhang befindet sich die Dokumentation bezüglich OLE/Automation in AutoCAD.
Liebe Gruppe 2,
On 29.04.2022 17:26, Hanifl, Lukas wrote:
im Anhang befindet sich die Dokumentation bezüglich OLE/Automation in AutoCAD.
sehr fein, vielen Dank! Sie hätten auch "oleinfo.css" mit ins zip-Archiv nehmen sollen, damit nach dem Auspacken des zip-Archivs, die Darstellung der html-Dateien gleichermaßen schön formatiert erfolgen kann!
Damit haben Sie eine schöne Übersicht über die dokumentierten Schnittstellen und der definierten Konstanten! :)
Ein Hinweis noch: wenn Sie "createOleInfo AutoCAD.Application 1" (Achtung es gibt '1' als weiteres Argument), dann bekommen Sie eine HTML-Dokumentation, die als Referenz-Dokumentation ausgeführt ist. Damit benötigten Sie wesentlich weniger Papier und sehen alles noch übersichtlichter (auch ohne Konstanten).
---
Mittlerweile habe ich auch bei AutoCAD die offiziellen VBA/OLE-Dokumentationen gefunden (interessanterweise gibt es offenkundig auch LISP/OLE, das AutoCAD unterstützt, sodass sie auch Programmbeispiele angeben). Hier die offizielle Dokumentation zu addCircle(), das momentan Schwierigkeiten macht: https://help.autodesk.com/view/OARX/2022/ENU/?guid=GUID-837C702F-91A7-445B-8713-3099B94664BE.
Wenn Sie in der offiziellen AutoCAD-Dokumentation sind, haben Sie auf der linken Seite Zugang zu allen relevanten Dokumentationen!
---
Add Ihrem Problem: Sie benötigen den exakten (strikten) Datentyp "Array of type decimal". oleObject wird wahrscheinlich (pure Spekulation) ein "Array of type int" oder "Array of type string" aus dem ooRexx-Array machen, was in diesem Fall nicht funktioniert.
ooRexx für Windows kommt auch mit einer vollständigen Dokumentation der Windows-spezifischen Klassen, unter anderem OLEObject, aber auch eine Klasse namens OLEVariant, die wir hier zum Lösen des Problems einzusetzen versuchen: winextensions.pdf, Abschnitt "Chapter 8. OLE Automation", insbesondere "8.4 The Windows OLEVariant Class".
Zurück zu Ihrem Problem: Sie definieren folgenden Rexx-Array:
p1=.array~of(0,0,0)
Mit OLEVariant (zum Testen brauche ich Ihre Hilfe, da ich kein AutoCAD installiert habe) könnte die strikte Typisierung möglicherweise mit einer der beiden folgenden Varianten möglich werden:
* Variante 1: aus "p1" ein OLEVariant "p1_a" erzeugen; "p1_a" statt "p1" als Argument einsetzen
p1 =.array~of(0,0,0) p1_a =.oleVariant~new(p1, "VT_DECIMAL,VT_ARRAY") -- explicit typing
* Variante 2: ein OLEVariant für "0" als decimal erzeugen und damit Rexx-Array anlegen; "p1_b" statt "p1" als Argument einsetzen
dec0=.oleVariant~new(0,"VT_DECIMAL") -- 0 explicitly typed as a decimal p1_b =.array~of(dec0, dec0, dec0) -- array with explicitly typed decimal values
Anbei habe ich Ihnen unter dem Namen "TestAutoCad_01.rex" Ihr zur Verfügung gestelltes Rexxprogramm erweitert (da ist noch eine dritte Version von OLEVariant enthalten).
Bitte lassen Sie es laufen und schicken Sie bitte die Ausgabe (mit Maus die Ausgabe kopieren und über die Zwischenablage in Ihre Antwort-E-Mail schicken)!
Mit freundlichem Gruß
Rony G. Flatscher
-- __________________________________________________________________________________
Prof. Dr. Rony G. Flatscher Department Wirtschaftsinformatik und Operations Management Institut für Wirtschaftsinformatik und Gesellschaft D2c 2.086 WU Wien Welthandelsplatz 1 A-1020 Wien/Vienna, Austria/Europe
http://www.wu.ac.at __________________________________________________________________________________