Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

27.02.2017

Inventor automatisieren: Programmieren für Konstrukteure (Teil 8)

Teil 7 verpasst? Dann erstmal hier weiter!

Alle Beiträge der Serie

Im letzten Teil haben wir uns mit der Fehlerbehandlung innerhalb unserer Programme gekümmert, einem sehr wichtigen Thema! Um die Beispiele weiterhin einfach zu halten, werde ich aber in den weiteren Programmen darauf verzichten. Ihr wisst jetzt ja, was bei einem normalen Programm für die freie Wildbaren zu tun ist.

Heute schauen wir uns an, wie wir Mehrfachänderungen mittels eines Rückgängigbefehls rückgängig machen können. Wie brauchen dazu als Ausgangspunkt unser Programm aus dem Teil 6, das wir zum (un-)sichbar schalten von Skizzen in Bauteilen innerhalb einer Baugruppe genutzt haben. Wer das Programm nicht mehr hat, schaue in Teil 6 nach. Zuerst wieder den VBA-Editor starten und unser Benutzerprojekt laden. Dort sollten wir das Programm SkizzeUnsichtbar finden. Damit das ganze funktioniert, brauchen wir wieder eine Baugruppe.

image

Wenn wir das Programm ausführen und alle Skizzen sichtbar schalten funktioniert das zwar hoffentlich gut. Wer nach dem Programmende aber auf den Rückgängigknopf im Inventor betätigt, wird feststellen, das jeder Skizzen einzeln wieder unsichtbar wird. Wurden z.B. 20 Skizzen sichtbar gemacht, so muss 20x Rückgängig gemacht werden. Das lässt sich verhindern, indem wir die gesamte Transaktion "Skizzen unsichtbar machen" zu einem "Paket" zusammenfassen. Dazu brauchen das Objekt Transaction, das wir definieren und dem wir dann wie gehabt was zuweisen.

Dim oTrans As Transaction
Set oTrans = ThisApplication.TransactionManager.StartTransaction(oAsmDoc, "Skizzensichtbar")

oAsmDoc entspricht hier dem Objekt, das die Baugruppe enthält (Haben wir oben der aktuelle Baugruppe zugewiesen!). "Skizzensichtbar" ist der Name der Transaktion.

Dann kommt der Programmablauf, den wir zu einer Transaktion zusammenfassen wollen, also in unserem Fall die Schleifenkonstruktion For Each....

Wenn die Schleife durch ist, dann beenden wir die Transaktion durch ein oTrans.End.

Stellt sich noch die Frage, wo die Zeilen innerhalb unseres Programmes stehen sollten? Hier habe ich Sie platziert:

image

Dann können wir nun ausprobieren, ob das ganze funktioniert. Schließe die IAM ohne zu speichern und öffne sie wieder. Starte das Programm, mach alle Skizze sichtbar und klicke dann auf Rückgängig. Jetzt sollte alles, was das Programm gemacht hat, mit einem Klick rückgängig gemacht sein. Hier der vollständige Programmcode.

Public Sub SkizzeUnsichtbar1()

    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveEditDocument
    
    Dim oRefDocs As DocumentsEnumerator
    Set oRefDocs = oAsmDoc.AllReferencedDocuments
 
    Dim oRefDoc As Document
    Dim Antwort
    Dim wfBoolean As Boolean
    wfBoolean = False
    
    Antwort = MsgBox("Alle Skizzen Sichtbar (Ja) oder Unsichtbar (Nein)", vbYesNo)
    If Antwort = vbYes Then wfBoolean = True
    If Antwort = vbCancel Then Exit Sub
    
    Dim osketch As PlanarSketch
    
    Dim oTrans As Transaction
    Set oTrans = ThisApplication.TransactionManager.StartTransaction(oAsmDoc, "Skizzensichtbar")
    
     For Each oRefDoc In oRefDocs
        If oRefDoc.IsModifiable = True And oRefDoc.DocumentType = kPartDocumentObject Then
            For Each osketch In oRefDoc.ComponentDefinition.Sketches
                osketch.Visible = wfBoolean
            Next
        End If
     Next
     
oAsmDoc.Update
oTrans.End

End Sub

Das soll es für heute gewesen sein, Bis zum nächsten mal. Eine viel bessere, umfangreichere Beschreibung zu Thema Transaction findet ihr übrigens hier, falls ihr das Thema vertiefen wollt. Schaut euch vorallem an, was dort zum Thema Errorhandling und Transaction beschrieben wird.

Weiter zu Teil 9!

1 Kommentar:

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: