6 Minuten
iLogic: Blechbauteile

Wie bereits im Post iLogic: Dokumententypen erwähnt, stellen Blechteile eine Sonderform des Partdocuments dar. Blechteile besitzen im Inventor eine eigene Modellierungsumgebung, Features und Konzepte. Für nachfolgende ERP-Systeme sind oftmals die Maße der Abwicklung und die eingesetzte Stärke des Blechs relevant. Diese können leicht unter der Hilfenahme von iLogic und der Inventor API ermittelt und in ein Custom iProperty geschrieben werden.
Im folgenden zeige ich wie man:
- Blechbauteile eindeutig identifiziert
- prüft, ob im Dokument bereits eine Abwicklung vorhanden ist und falls nicht
- eine Abwicklung mit iLogic erstellt
- die Abmaße der Abwicklung (Flat Pattern Extents) ermittelt
- die Stärke des Blechs bestimmt
- aus der Stärke und den Abmessungen einen kombinierten String erstellt und in ein Custom Property schreibt
Als Beispielbauteil dient ein einfach gelaschtes Blechteil mit einer Laschenlänge von 120mm/220mm, die beidseitig über eine Länge von 480mm ausgetragen wurde. Die Blechsträrke wurde mit 5mm
angesetzt.

Blechteile identifizieren
Blechteile können nicht direkt über den DocumentType
ermittelt, sondern lediglich über die DocumentSubTypeID
eindeutig identifiziert werden. Für Blechbauteile lautet diese ID {9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}
und kann in der API unter oDoc.DocumentSubType.DocumentSubTypeID
ausgelesen werden.

Mit dieser Information können über eine simple If-Schleife ausschließlich Blechbauteile im Code addressiert werden:
If oDoc.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
' Hier kommt der Code hin, der im Blechteil laufen soll
End If
Prüfen, ob Abwicklung bereits vorhanden ist
Ob bereits eine Abwicklung in einem Dokument vorhanden ist, lässt sich optisch leicht dem Modellbrowser entnehmen. Ist dort der Eintrag Flat Pattern
vorhanden, wurde bereits im Blechteil eine Abwicklung erstellt. Diese kann beispielsweise direkt in einer Zeichnnungsansicht verwendet werden.

Auch die API bietet ein Property, mit dem das Vorhandensein einer Abwicklung ermittelt werden kann. Die ist zu finden unter oDoc.ComponentDefinition.HasFlatPattern
. Der Wert des Properties ist ein Boolean und kann demnach nur die Werte True
und False
annehmen. Ist der Wert True
, ist eine Abwicklung im Dokument vorhanden.

Eine Abwicklung mit iLogic erstellen
Die Information, ob bereits eine Abwicklung vorehanden ist, kann nun genutzt werden um diese automatisch zu erstellen, sofern sie noch nicht vorhanden ist. Dazu kann eine Subroutine geschrieben werden, die folgendermaßen aussieht und folgendes tut:
- Prüfung, ob Abwicklung vorhanden ist und wenn nicht..
- …erstelle die Abwicklung mittels der Methode
Unfold()
- wechsle aus der Abwicklungsansicht zurück in das “gefaltete” Modell mittels der Methode
FlatPattern.ExitEdit()
- Update das Part, um alle Änderungen in das Blechbauteil zu übertragen mit dem iLogic Shortcut
InventorVb.DocumentUpdate()
Private Sub ErstelleAbwicklung()
Dim oSheetMetalCompDef As SheetMetalComponentDefinition = ThisDoc.Document.ComponentDefinition
If oSheetMetalCompDef.HasFlatPattern() Then
Logger.Info(iLogicVb.RuleName & " | " & ThisDoc.FileName(True) & " | Eine Abwicklung ist bereits vorhanden.")
Else
Logger.Warn(iLogicVb.RuleName & " | " & ThisDoc.FileName(True) & " | Eine Abwicklung ist nicht vorhanden und wird erstellt.")
oSheetMetalCompDef.Unfold()
oSheetMetalCompDef.FlatPattern.ExitEdit()
' Update Document after creation of Flat Pattern
InventorVb.DocumentUpdate()
End If
End Sub
Näheres zum strukturellen Aufbau einer iLogic, Funktionen und Subroutinen wurde bereits im Post iLogic: Struktureller Aufbau ausführlich beschrieben.
Abwicklungsdimensionen ermitteln
Zur Ermittlung der abgewickelten Dimensionen ist es zwingend erforderlich, dass im Bauteil bereits eine Abwicklung vorhanden ist.
Zusätzlich gilt es immer zu bedenken, dass die Inventor API intern mit dem Längenmaß cm
als Einheit arbeitet, die im Engineering eher untypisch ist und in mm
konvertiert werden muss. Dies wurde bereits im Post
iLogic: Units of Measurement
erläutert. Zur Umrechnung kommt auch an dieser Stelle die Methode ConvertUnits()
zum Einsatz.
Abgewickelte Länge und Breite
Zur Verfügung stehen zwei Properties mit den Namen Width
und Lenght
. Beide sind vom Datentyp Double
und in der API unter oDoc.ComponentDefinition.FlatPattern
zu finden.

Blechstärke ermitteln
Die Blechtstärke besitzt in der API ein eigenes Property Thickness
, ebenfalls vom Typ Double
, das unter oDoc.ComponentDefinition.Thickness
zur Verfügung steht.
Dieses Property ist ausschließlich bei Blech- und nicht bei Standardbauteilen verfügbar und Teil der SheetMetalComponentDefinition
.

Abwicklungdimensionen in Custom Property schreiben
Wenn Blechstärke, Länge und Breite bekannt sind können diese leicht in die Einheit mm
konvertiert, zu einem kombinierten String zusammengefügt und in ein Property geschrieben werden. Auch hierfür kommt eine eigene Subroutine zum Einsatz, die folgendes tut:
- Blechstärke, Länge und Breite der Abwicklung ermitteln
- Die ermittelten Werte von
cm
inmm
konvertiert. - Länge und Breite werden auf ganzzahlige Millimeter gerundet.
- Es wird ein kombinierter String erstellt mit dem Schema
Stärke x Länge x Breite
. - Der kombinierte String wird in ein Custom Property mit dem Namen
Blechabmessungen
geschrieben.
Private Sub ErmittleAbwicklungsdimensionen()
Dim oSheetMetalCompDef As SheetMetalComponentDefinition = ThisDoc.Document.ComponentDefinition
Dim UOM As UnitsOfMeasure = ThisDoc.Document.UnitsOfMeasure
Dim oFlatPattern As FlatPattern = oSheetMetalCompDef.FlatPattern
Dim dThickness As Double = oSheetMetalCompDef.Thickness.Value
Dim dFlatPatternLength As Double = oFlatPattern.Length
Dim dFlatPatternWidth As Double = oFlatPattern.Width
' Konvertiere cm in mm und runde auf ganzzahlige Millimeterangaben
Dim dThicknessMM As Double = UOM.ConvertUnits(dThickness, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits)
Dim dFlatPatternLengthMM As Double = Round(UOM.ConvertUnits(dFlatPatternLength, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits), 0)
Dim dFlatPatternWidthMM As Double = Round(UOM.ConvertUnits(dFlatPatternWidth, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits), 0)
' Erstelle kombinierten String mit dem Schema: Stärke x Länge x Breite
Dim sCombinedString As String
sCombinedString = "Blech " & _
dThicknessMM & _
" x " & _
dFlatPatternLengthMM & _
" x " & _
dFlatPatternWidthMM
' Schreibe kombinierten String in ein Custom Property mit dem Namen "Blechabmessungen"
iProperties.Value("Custom", "Blechabmessungen") = sCombinedString
Logger.Info(iLogicVb.RuleName & " | " & ThisDoc.FileName(True) & " | Blechabmessungen: " & sCombinedString)
End Sub
Vollständiges Codebeispiel
Es kann nun in einer iLogic eine Hauptroutine erstellt werden, die im ersten Schritt prüft, ob es sich um ein Blechbauteil handelt und anschließend beide Subroutinen aufruft:
Sub Main()
Dim oDoc As Document = ThisDoc.Document
If oDoc.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
ErstelleAbwicklung()
ErmittleAbwicklungsdimensionen()
End If
End Sub
Private Sub ErstelleAbwicklung()
Dim oSheetMetalCompDef As SheetMetalComponentDefinition = ThisDoc.Document.ComponentDefinition
If oSheetMetalCompDef.HasFlatPattern() Then
Logger.Info(iLogicVb.RuleName & " | " & ThisDoc.FileName(True) & " | Eine Abwicklung ist bereits vorhanden.")
Else
Logger.Warn(iLogicVb.RuleName & " | " & ThisDoc.FileName(True) & " | Eine Abwicklung ist nicht vorhanden und wird erstellt.")
oSheetMetalCompDef.Unfold()
oSheetMetalCompDef.FlatPattern.ExitEdit()
' Update Document after creation of Flat Pattern
InventorVb.DocumentUpdate()
End If
End Sub
Private Sub ErmittleAbwicklungsdimensionen()
Dim oSheetMetalCompDef As SheetMetalComponentDefinition = ThisDoc.Document.ComponentDefinition
Dim UOM As UnitsOfMeasure = ThisDoc.Document.UnitsOfMeasure
Dim oFlatPattern As FlatPattern = oSheetMetalCompDef.FlatPattern
Dim dThickness As Double = oSheetMetalCompDef.Thickness.Value
Dim dFlatPatternLength As Double = oFlatPattern.Length
Dim dFlatPatternWidth As Double = oFlatPattern.Width
' Konvertiere cm in mm und runde auf ganzzahlige Millimeterangaben
Dim dThicknessMM As Double = UOM.ConvertUnits(dThickness, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits)
Dim dFlatPatternLengthMM As Double = Round(UOM.ConvertUnits(dFlatPatternLength, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits), 0)
Dim dFlatPatternWidthMM As Double = Round(UOM.ConvertUnits(dFlatPatternWidth, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits), 0)
' Erstelle kombinierten String mit dem Schema: Stärke x Länge x Breite
Dim sCombinedString As String
sCombinedString = "Blech " & _
dThicknessMM & _
" x " & _
dFlatPatternLengthMM & _
" x " & _
dFlatPatternWidthMM
' Schreibe kombinierten String in ein Custom Property mit dem Namen "Blechabmessungen"
iProperties.Value("Custom", "Blechabmessungen") = sCombinedString
Logger.Info(iLogicVb.RuleName & " | " & ThisDoc.FileName(True) & " | Blechabmessungen: " & sCombinedString)
End Sub
Im Post iLogic: Logging wurde bereits die Logging-Funktionalität von iLogic vorgestellt. Dieser zeigt bei ausführung des Codes die ermittelten Werte an:
