Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

08.05.2017

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

Teil 17 verpasst? dann hier weiter!

Alle Beiträge der Serie

Im letzten Teil wir uns die Baugruppen-Komponenten (Occurrences)  angeschaut. Heute soll es um Arbeitselemente und deren Auswahl in Bauteilen gehen.

image

Im ersten Beispiel machen wir uns ein Programm, das alle Arbeitsebenen einblendet und den Anwender dann eine AE wählen lässt, die dann als einzige sichtbar bleibt. Das ist nützlich, wenn man vor lauter Ebenen die Orientierung verloren hat, aber weiß, welche Ebene man gerade braucht.

Was in diesem Quelltext neu ist, ist der CommandManager, der es uns erlaubt, über die API Inventorbefehle auszuführen. Dieser CommandManager wird genutzt um die Funktion Pick auszuführen, die wiederum Optionen hat z.B. bzgl. der Objekttypen die gewählt werden sollen. Mehr zur Ausführung von Befehlen über den CommandManger findet ihr hier.

Public Sub Arbeitsebene_Sichtbarkeit()
    'Errorhandling und prüfen auf korrekte Dateityp (in dem Fall IPT) schenke ich mir hier
    'siehe dazu http://inventorfaq.blogspot.de/2017/02/inventor-automatisieren-programmieren_20.html
    'Dokumentobjekt
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument
    'Alle Arbeitsebenen (AE) sichtbar machen
    Dim oWorkPlane As WorkPlane
    'Durch alle AE in der IPT gehen und diese sichtbar machen
    'damit der Anwender anschließend eine wählen kann
    For Each oWorkPlane In oDoc.ComponentDefinition.WorkPlanes
        oWorkPlane.Visible = True
    Next
    'Ein Objekt definieren, das die gewählte Arbeitsebene enthält
    Dim auswahl As WorkPlane
    'Auswahlfunktion aufrufen: Anwender soll von allen jetzt sichtbaren AE eine wählen
    'Die Auswahl wird mittels kWorkPlaneFilter auf AE eingeschränkt
    Set auswahl = ThisApplication.CommandManager.Pick(kWorkPlaneFilter, "Arbeitsebene wählen")
    'Alle AE unsichtbar machen, weil ja nur die gewählte AE sichtbar sein soll.
    For Each oWorkPlane In oDoc.ComponentDefinition.WorkPlanes
        oWorkPlane.Visible = False
    Next
    'Die gewählte AE sichtbar machen, wenn die Auswahl nicht "Nichts" ist.
    If Not auswahl Is Nothing Then auswahl.Visible = True
End Sub

 

Arbeitselemente Sichtbarkeit über Form steuern

Dieses ersten Beispiel soll die Grundfunktion von Beispiel 2 verdeutlichen. In diesem Beispiel gibt es ein Form, in dem gewählt werden kann, welche Arbeitselemente (Arbeitsebene, Arbeitsachse, Arbeitspunkt) "behandelt" werden soll. Zudem kann gewählt werden, ob die Elemente sichtbar oder unsichtbar gemacht werden sollen. Zudem gibt es eine Option mittels der wir nur ein bestimmtes Arbeitselemente sichtbar gemacht werden soll und alle anderen unsichtbar.

image

Weil der Quelltext nur funktioniert, wenn ihr die Elemente des Forms exakt so benennt wie ich, und mir das zu erklären echt zu viel Arbeit ist, hier der Download für das Form inkl. Quelltext. Dann haben wir mal den gleichen Stand ;)

ZIP herunterladen und die 2 Dateien in ein Verzeichnis entpacken, im VBA-Editor RMT auf Forms > Datei importieren und die frm-Datei wählen.

image

Forms haben wir bereits mehrfach besprochen in Teil 13 und 14. Was in diesem Form neu ist, sind die Rahmen/Frames, die um die Checkboxen oben (Arbeitslementtyp) und die Optionsbuttons (Sichtbarkeit Arbeitselemente) gezeichnet wurden. Zudem ist als neues Objekt die Optionsbuttons (sichtbar / Unsichtbar) enthalten.

image

image

Rahmen helfen zusammengehörige Elemente in einem Form zu strukturieren. Im Fall der Optionsfelder hat er aber noch eine Funktion: Es soll ja nur entweder die Option sichtbar oder unsichtbar gewählt werden können (und nicht beide gleichzeigt). Befinden sich Optionsfelder in einem Rahmen, dann kann immer nur eine Option gewählt werden.

Sonst sind ein paar Checkboxen und 2 Buttons enthalten. Wie immer bei Formelemente habe alle Elemente gleichen Typs einen Präfix. chk für Checkboxen, op für die Optionsfelder und cmb für ComandButtons.

Mehr will ich gar nicht erklären. Der Rest steht im Quelltext:

'Wird beim Klick auf OK ausgeführt
Public Sub AE_Sichtbarkeit()
    'Variable wfBoolean auf Falsch setzen
    wfBoolean = False
    'Ist das Optionsfeld Sichtbar angehackt, dann auf True setzen
    '(Anderenfalls bleibt sie eben false)
    If opSichtbar.Value = True Then wfBoolean = True
    
    'Wie immer, kennen wir schon
    Dim oDoc As Inventor.Document
    Set oDoc = ThisApplication.ActiveDocument
    
    'Durch alle Arbeitsebenen der IPT gehen
    'Wenn der Haken bei Checkbox Arbeitsbene gesetzt ist
    'die Sichrbarkeit auf True/False setzen, je nach dem
    'Welchen Wert die Variable wfBoolean hat
    For Each oWorkPlane In oDoc.ComponentDefinition.WorkPlanes
    If chkAE.Value = True Then oWorkPlane.Visible = wfBoolean
    Next
    
    'Das gleiche für Arbeitsachen
    For Each oWorkAxis In oDoc.ComponentDefinition.WorkAxes
    If chkAA.Value = True Then oWorkAxis.Visible = wfBoolean
    Next
    'Das gleiche für Arbeitspunkte
    For Each oWorkPoint In oDoc.ComponentDefinition.WorkPoints
    If chkAP.Value = True Then oWorkPoint.Visible = wfBoolean
    Next
    
    'Wenn der Haken bei der Checkbox "Arbeitselement wählen und Rest unsichtbar"
    'gesetzt ist und der Haken bei Checkbox Arbeitsebene gesetzt ist
    'dann kommt ein Auswahlfilter bei dem die AE gewählt werden kann
    'die Sichtbar bleiben soll. Der Rest wird unsichtbar gesetzt
    If chkWaehlen.Value = True And chkAE.Value = True Then
        'ss steht für SelectionSet, das wir uns da klar verstehen! (Alerta, Alerta, Antifascista)
        Dim ss As WorkPlane
        Set ss = ThisApplication.CommandManager.Pick(kWorkPlaneFilter, "Arbeitsebene wählen")
        For Each oWorkPlane In oDoc.ComponentDefinition.WorkPlanes
            If chkAE.Value = True Then oWorkPlane.Visible = False
        Next
        If Not ss Is Nothing Then ss.Visible = True
        
    End If
    
    'Das Gleiche für Arbeitsachsen
    If chkWaehlen.Value = True And chkAA.Value = True Then
        Dim ss1 As WorkAxis
        Set ss1 = ThisApplication.CommandManager.Pick(kWorkAxisFilter, "Arbeitsachse wählen")
        For Each oWorkAxis In oDoc.ComponentDefinition.WorkAxes
            If chkAA.Value = True Then oWorkAxis.Visible = False
        Next
        If Not ss1 Is Nothing Then ss1.Visible = True
        
    End If
    
    'Das Gleiche für Arbeitspunkte
    If chkWaehlen.Value = True And chkAP.Value = True Then
        Dim ss2 As WorkPoint
        Set ss2 = ThisApplication.CommandManager.Pick(kWorkPointFilter, "Arbeitspunkt wählen")
        For Each oWorkPoint In oDoc.ComponentDefinition.WorkPoints
            If chkAP.Value = True Then oWorkPoint.Visible = False
        Next
        If Not ss2 Is Nothing Then ss2.Visible = True
        
    End If

'Formular schließen
Unload Me
End Sub

'Wird ausgeführt, wenn der Haken unten bei
'der Checkbox "Arbeitselement wählen und Rest unsichtbar"
'geklickt wird.
Private Sub chkWaehlen_Click()
    'da die Funktion "Arbeitselement wählen und Rest unsichtbar" nur Sinn
    'ergibt, wenn nicht gleich alle Arbeitselement UNsichtbar sind,
    'Wird das Optionsfeld Sichtbar aktiviert!
    If chkWaehlen.Value = True Then
        opSichtbar.Value = True
    End If
End Sub

Private Sub cmbAbbrechen_Click()
    'Form schließen
    Unload Me
End Sub

Private Sub cmbOK_Click()
'Button OK geklickt. Also los geht's!
 Call AE_Sichtbarkeit
End Sub

Das war's für heute. Ich hoffe, ihr könnt mit dem Beispiel was anfangen!

Weiter zu Teil 19!

Keine Kommentare:

Kommentar veröffentlichen

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

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.

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