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.
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.
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.
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.
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.
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.
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.
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.
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:
Das Programm sollte bis dahin funktionieren und in einer IAM bei den IPTs die Skizzen sichtbar machen.
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.
Jetzt müssen noch dafür sorgen, dass die Skizzensichtbar nicht = True sondern gleich dem Wert der Variable wfBoolean gesetzt wird.
Da die grafische Ansicht nicht aktualisiert wird, machen wir am Ende ein oAsmDoc.Update.
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:
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!
Es ist noch jemand da :D DAnke dir wie immer Jürgen
AntwortenLöschenEs gibt wohl immer wieder Leute die sich das hier reinziehn ..Ich finds Spitze !
AntwortenLöschen