Automatisierung
-
Hallo!
Ich bin neu hier, daher erst mal herzliche Grüße aus Südbayern.
Ich hänge gerade an folgendem, eigentlich klassischem Automatisierungsproblem. Ich steuere Autocad aus einer Access/VBA-Anwendung. Die Autocad-tlb ist unter Verweise eingetragen.
Das funzt ganz prima, aber damit wachsen die Ansprüche. Erstens werden die Grafikobjekte immer mehr und komplexer, so dass sich die Erstellung einer Klassenbibliothek aufdrängt. Dies ist unter VBA/Access2000 nur mit großen Bauchschmerzen - eigentlich gar nicht - möglich.
Zweitens soll die Ausgabe künftig nicht allein nach Autocad erfolgen, sondern auch in andere Programme. Daher schwebt mir vor, eine DLL in C++ zu erstellen. Die Verwendung der DLL aus Access ist einfach. Wo ich hänge, ist die C++-Syntax zum Starten von Autocad oder eines anderen Programms bzw. zur Verwendung einer laufenden Instanz sowie der Umgang mit den zugehörigen Typelibraries.Ein Bespiel aus der Online-Hilfe zur Steuerung von Excel konnte ich leider nicht nachvollziehen. Dort wurden UUIDs explizit codiert. Geht das nicht eleganter?
Freue mich über jede Hilfe.
VBA-Beispiel:
Option Explicit
Public Function AutocadexportTest()
On Error Resume NextDim acadApp As AcadApplication
Set acadApp = GetObject(, "AutoCAD.Application") 'Zeiger auf laufendes Programm holen
If err Then 'läuft noch nicht -> Acad starten
err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If err Then
msgBox err.Description
AutocadexportTest = -1 'Fehler aufgetreten
Exit Function
End If
End IfDim acadDoc As AcadDocument 'Dokument holen
If acadApp.Documents.count > 0 Then
Set acadDoc = acadApp.ActiveDocument
Else
Set acadDoc = acadApp.Documents.Add 'oder erzeugen
End IfDim myLayer As AcadLayer 'neuen Layer erzeugen
Set myLayer = acadDoc.Layers.Add("xxx")Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double' Demokoordinaten für eine Linie, 3Dimensional
startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
endPoint(0) = 10#: endPoint(1) = 5#: endPoint(2) = 0#Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
End Function