Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

24.04.2017

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

Teil 15 verpasst? Dann hier weiter!

Alle Beiträge der Serie

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.

image

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.

image

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.

image

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.

image 

Im Windows Explorer kann mittels Eingabe von %TEMP% gefolgt von Enter in der Adresszeile direkt in das Verzeichnis gewechselt werden.

image

Stellt sich noch die Frage, wie man auf das BOM- und das BOMView Objekt kommt. Wie immer über unser Objektsuntersuchungsprogramm ;)

image

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 ;)

image

Weiter zu Teil 17!

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!

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