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 Next

    Dim 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 If

    Dim acadDoc As AcadDocument 'Dokument holen
    If acadApp.Documents.count > 0 Then
    Set acadDoc = acadApp.ActiveDocument
    Else
    Set acadDoc = acadApp.Documents.Add 'oder erzeugen
    End If

    Dim 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


Anmelden zum Antworten