Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo
Einsteigertipps Profitipps Probleme & Abstürze Themensammlungen Newsletter & Feed Alle Artikel Blog unterstützen
Newsletter RSS Feed Google+
Wichtige Beiträge der letzten Tage

12.02.2017

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

Teil 5 verpasst? Dann erstmal hier weiterlesen!

Im fünften Teil haben wir mit den in der Baugruppe verbauten Dateien beschäftigt und die dazu passenden Zeichnung über den Dateipfad gesucht um sie zu Öffnen und als PDF abzuspeichern. War ein harter Brocken, das Beispiel, oder? Ich hoffe, es sind noch ein paar Leser dabei nach dieser Aktion.

Heute machen wir ein Programm, dass durch alle Dateien einer IAM geht und die Bauteilskizzen (un-)sichtbar schaltet, also so, wie wenn wir in der Datei alle Skizzen sichtbar machen würden. Wir brauchen zum Start also wieder eine Baugruppe als Beispieldatei. Nehmt wieder eine kleine IAM! Dann öffnen wir den VBA-Editor (ALT+F11) und und laden unser Beispiel-VBA-Projekt. Da wir wieder durch alle Dateien einer IAM durchgehen wollen, nutzen wir wieder die selben Definitionen wir in der letzten Programmierung.

image

Wir haben wieder das Objekt, das die gesamte Baugruppe enthält und das Objekt, das für alle referenzierten Dateien steht. Als nächstes kommt die Variablendefinition für das einzelne referenzierte Dokument sowie sowie die Variable, die die Antwort auf eine Frage speichert und eine boolsche Variable, die wahr (true) oder falsch (false) sein kann.

image

Bevor wir eine Dialogabfrage einbauen, kümmern wir uns aber erstmal um die eigentliche Programmfunktion. Wir wollen durch alle Dateien in der IAM gehen und sollte es sich um eine IPT handeln, alle Skizzen sichtbar machen. Wir brauchen also wieder unser For Each Schleife aus dem letzten Beispiel.

image

Die Schleife geht durch alle in der IAM verbaute Dateien und mit denen können wir nun was machen. Wir wollen Skizzen innerhalb von Bauteilen sichtbar machen. Ist das aktuelle oRefDoc eine Baugruppe, dann soll nichts passieren. Zudem verändern wir die Sichtbarkeit der Skizze innerhalb der IPT, d.h. die IPT ändert sich und muss im Anschluss gespeichert werden. Speichern geht aber nur, wenn die Datei verändert werden kann, was z.B. bei Bibliotheksteilen nicht der Fall ist. Wir prüfen also, ob die Datei modifizierbar ist und es sich um eine IPT handelt.

image

Achtet auch darauf, Einrückungen zu verwenden (TAB-Taste) da macht den Code leichter lesbar. Stellt sich die Frage, wie man darauf kommen soll, das es isModifiable gibt? Eine Möglichkeit ist, in der API-Hilfe zu schauen, die wir bereits angeschaut haben. Dort findet man die verschiedenen Objekt und deren Eigenschaften und Methoden.

 

image

Eine ändere Möglichkeit ist, das Objekt im Local-Fenster zu untersuchen, wenn man einen Haltepunkt gesetzt hat. Oft sprechen die Einträge ja für sich.

image

Das ganze Objektmodell findet ihr in diesem PDF-Dokument. Ich hoffe, ihr habt einen A0-Plotter ;)

Stellt sich nun die Frage, wo wir innerhalb des oRefDoc die Skizzen finden. Die verstecken sich unterhalb von ComponentDefinition.

image

image

image

Es gibt dort einen Eintrag Sketches für alle Skizzen und darunter je Skizze ein Item-Eintrag. Wir müssen also durch diese Items durchlaufen und die Eigenschaft Visible = True setzen. Das ist also wieder eine For Each Schleife.

image

Wir definieren noch eine Variable oSketch als planare Skizze (es gibt ja auch 3D Skizzen) und durchlaufen alle Skizzen innerhalb des oRefDoc und machen sie sichtbar.

Der Quelltext bis zu diesem Punkt:

image

Das Programm sollte bis dahin funktionieren und in einer IAM bei den IPTs die Skizzen sichtbar machen.

image

Jetzt ergänzen wir eine Abfrage, ob die Skizzen sichtbar oder unsichtbar gemacht werden sollen.Die Auswahl speichern wir in der Variable Antwort und entsprechend wird die boolsche variable wfBoolean gesetzt.

image

Jetzt müssen noch dafür sorgen, dass die Skizzensichtbar nicht = True sondern gleich dem Wert der Variable wfBoolean gesetzt wird.

image

Da die grafische Ansicht nicht aktualisiert wird, machen wir am Ende ein oAsmDoc.Update.

image

Unser Programm sollte jetzt funktionieren. Je nach dem, ob wir in der Dialogbox Ja oder Nein anklicken. werden alle Skizzen sichtbar oder unsichtbar gemacht.

Unser Programm in voller Pracht:

image

Der Code in Textform:

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
    
     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
End Sub

Was fehlt, ist immer noch die Fehlerbehandlung und auch eine Möglichkeit mit einer Rückgängigfunktion die gesamte Aktion rückgängig zu machen. Das schauen wir uns das nächste mal an! Bis dahin viel Spaß mit den Programmieren!

Weiter zu Teil 7!

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: