Teil 15 verpasst? Dann hier weiter!
Im letzten Teil der Serie haben wir uns die Transcriptfunktion im Inventor angeschaut. Heute schauen wir uns eine paar kleiner Codebeispiele an, die verschiedene Aufgaben automatisieren können. Ich habe mich entschieden, die Erklärungen, soweit sie noch notwendig für das Verständnis sind (wir sind ja schon fast Programmierprofis :) ) direkt in den Quelltext zu schreiben.
Alle fehlerhaften Abhängigkeiten löschen
Im ersten Beispiel löschen wir alle fehlerhaften Baugruppen-Abhängigkeiten. Schauen wir uns zuerst mittels unseres Info_Tools eine IAM an. Dort sehen wir die Abhängigkeiten in <IAM-Objekt>.ComponentDefinition.Constraints. Jede Abhängigkeit ist ein Item, durch das wir gehen können wie wir es bereits bei anderen Objekten gemacht haben.
Jede Abhängigkeit hat u.a. einen HealthStatus, der anzeigt, ob die Abhängigkeit i.O. ist oder fehlerhaft, wie im Beispiel oben, wo sie inkonsistent mit einer anderen Abhängigkeit ist.
Public Sub Conts_loeschen() 'IAM-Objekt definieren Dim oAssDoc As Inventor.AssemblyDocument Set oAssDoc = ThisApplication.ActiveEditDocument 'Objekt für die eigentliche Abhängigkeit Dim oConstraint As AssemblyConstraint 'Sicherheitsabfrage, onb alle fehlerhaften Abhängigkeiten gelöscht werden sollen If MsgBox("ALLE fehlerhaften Abhängigkeiten löschen?", vbYesNo + vbQuestion, "!!ACHTUNG!!") = vbNo Then Exit Sub 'In einer Schleife durch alle Abhängigkeiten in der Baugruppe gehen For Each oConstraint In oAssDoc.ComponentDefinition.Constraints 'Wenn die Abhängigkeit nicht UpToDate (also nicht OK ist) und nicht unterdrückt ist dann If oConstraint.HealthStatus <> kUpToDateHealth And _ oConstraint.HealthStatus <> kSuppressedHealth Then '...die Abhängigkeit löschen, weil dann mit ihr was nicht stimmt. oConstraint.Delete End If 'zur nächsten Abhängigkeit gehen Next End Sub
Arbeitsbereichspfad im Explorer öffnen
In diesem kleinen Bespiel öffnen wir den im aktuellen Projekt definierten Arbeitsbereich im Windows Explorer. Wie kommt man darauf? Für mich am einfachsten ist in diesem Fall das ThisApplication-Objekt zu untersuchen.
Public Sub Workspace_Explorer() 'In diesem Var. schreiben wir den Pfad, denn wir auslesen Dim pfad As String 'Ein DesignProjectManager-Objekt erstellen 'Auszug Hilfe: The DesignProjectManager object provides access to project files related functionality in Inventor Dim oDesignProjectMgr As DesignProjectManager Set oDesignProjectMgr = ThisApplication.DesignProjectManager 'Verweis auf das Projektobjekt Dim oProject As DesignProject Set oProject = oDesignProjectMgr.ActiveDesignProject 'Aus dem Projektobjekt lesen wir den Arbeitsbereichspfas aus pfad = oProject.WorkspacePath 'Öffnen des Pfades im Windows Explorer Shell "explorer.exe """ & pfad & "", vbNormalFocus End Sub
Vorlagen und Design Dataverzeichnis im Explorer öffnen
Das nächste Beispiel ähnelt dem vorherigen, nur das wir dieses mal die Templates- und Design Data-Verzeichnisse öffnen. Kann jeder CAD-Admin brauchen :)
Public Sub Templates_Explorer() 'Der Anfang entspricht dem Code ein Beispiel weiter oben Dim pfad As String Dim oDesignProjectMgr As DesignProjectManager Set oDesignProjectMgr = ThisApplication.DesignProjectManager Dim oProject As DesignProject Set oProject = oDesignProjectMgr.ActiveDesignProject 'Jetzt holen wir uns den Templatepfad und öffnen ihn... pfad = oProject.TemplatesPath Shell "explorer.exe """ & pfad & "", vbNormalFocus '... und anschließend den Pfad des Design Data Verzeichnisses pfad = oProject.DesignDataPath Shell "explorer.exe """ & pfad & "", vbNormalFocus 'D.h. es öffnen sich 2 Explorerfenster übereinander End Sub
Export der IAM Stückliste Strukturiert / nur Bauteil in XLS-Dateien
Das nächste Beispiel exportiert die Stückliste aus der IAM und zwar sowohl die strukturierte als auch die Nur Bauteil Ansicht.
Eine weitere "Besonderheit" im Quelltext ist die Funktion Environ, die eine Umgangsvariable ausliest. Umgebungsvariablen sind die Dinger, die man in einer DOS-Box mittels Set auslesen kann. Wir wollen den Wert der Variable "TEMP" haben.
Im Windows Explorer kann mittels Eingabe von %TEMP% gefolgt von Enter in der Adresszeile direkt in das Verzeichnis gewechselt werden.
Stellt sich noch die Frage, wie man auf das BOM- und das BOMView Objekt kommt. Wie immer über unser Objektsuntersuchungsprogramm ;)
Public Sub BOMExport() 'Var. für den Exportpfad definieren Dim Path As String Path = Environ("TEMP") 'Baugruppeobjekt Dim oDoc As AssemblyDocument Set oDoc = ThisApplication.ActiveEditDocument 'Displayname abzüglih letzte 4 Stellen (i.d.R. .iam) auslesen Dim AsmName As String AsmName = Left(oDoc.DisplayName, Len(oDoc.DisplayName) - 4) 'Zusammensetzden des Pfades & Dateiname aus den beiden Variablen Dim Filename As String Filename = Path & "\" & AsmName 'Bauerntrick: Bei Fehler mit dem nächsten Schritt weitermachen 'd.h. wenn Mkdir einen Fehler verursacht (weil das Verzeichnis schon existiert) 'geht es einfach weiter. So spart man sich die Prüfung ob das Verz. existiert vor der Erstellung On Error Resume Next MkDir Path 'On Error Resume Mext wieder auschalten On Error GoTo 0 'Vereis auf das Stücklistenobjekt in der Baugruppe Dim oBOM As BOM Set oBOM = oDoc.ComponentDefinition.BOM ' In der Stcklilstenansicht Strukturiert auf Alle Ebenen umschalten oBOM.StructuredViewFirstLevelOnly = False ' Strukturierte Ansicht aktivieren sonst kann sie nicht exportiert werden oBOM.StructuredViewEnabled = True 'Stücklistenansichtobjekt erstellen und auf das Item Namens "Struktiriert" setzen Dim oStructuredBOMView As BOMView Set oStructuredBOMView = oBOM.BOMViews.Item("Strukturiert") 'Export der Stücklistenansicht unter dem Filename plus Zusatz Stückluste Strukturiert oStructuredBOMView.Export Filename & " Stückliste Strukturiert.xls", kMicrosoftExcelFormat 'Ansicht nur Bauteile aktivieren oBOM.PartsOnlyViewEnabled = True 'Verweis auf das Objekt BOMView "nur Bauteile" Dim oPartsOnlyBOMView As BOMView Set oPartsOnlyBOMView = oBOM.BOMViews.Item("nur Bauteile") 'Export der Stücklistenansicht unter dem Filename plus Zusatz Stückluste Strukturiert oPartsOnlyBOMView.Export Filename & " Stückliste Nur Bauteile.xls", kMicrosoftExcelFormat End Sub
Das soll's für heute gewesen sein. Ich hoffe, ihr könnt mit dem Zeugs was anfangen und sei es nur, das ihr wieder ein bisschen mehr übers "Programmieren" gelernt habt. Gerade, während ich diesen Beitrag schreibe, sitze ich, wie jede zweite Woche, übrigens bei der Immuntherapie im Krankenhaus. Hier ein fast nicht gestelltes Foto ;)
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.