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.

Screenshot of example sheet metal part

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.

API Overview Location for DocumentSubType

Mit dieser Information können über eine simple If-Schleife ausschließlich Blechbauteile im Code adressiert 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.

Screenshot of sheet metal part example

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.

API Overview Location HasFlatPattern Property

Eine Abwicklung mit iLogic erstellen

Die Information, ob bereits eine Abwicklung vorhanden 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:

  1. Prüfung, ob Abwicklung vorhanden ist und wenn nicht..
  2. …erstelle die Abwicklung mittels der Methode Unfold()
  3. wechsle aus der Abwicklungsansicht zurück in das “gefaltete” Modell mittels der Methode FlatPattern.ExitEdit()
  4. 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 Widthund Lenght. Beide sind vom Datentyp Double und in der API unter oDoc.ComponentDefinition.FlatPattern zu finden.

API Overview Location for Length and Width Properties

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.

API Overview Location for Thickness Property

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:

  1. Blechstärke, Länge und Breite der Abwicklung ermitteln
  2. Die ermittelten Werte von cm in mm konvertiert.
  3. Länge und Breite werden auf ganzzahlige Millimeter gerundet.
  4. Es wird ein kombinierter String erstellt mit dem Schema Stärke x Länge x Breite.
  5. 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:

Screenshot of iLogic Log Output

Ressources