Zum Hauptinhalt springen
Featured image for iLogic: Modelldimensionen per RangeBox ermitteln

iLogic: Modelldimensionen per RangeBox ermitteln

·417 Wörter·2 min·
Inhaltsverzeichnis
Inventor iLogic - Dieser Artikel ist Teil einer Serie.
Teil 21: Dieser Artikel

Das Konzept einer Bounding Box ist in der CAD-Welt geläufig. Es stellt einen virtuellen umschließenden Rahmen um ein 3D-Modell dar, dessen Werte Aufschluss über dessen Größe geben und bspw. bei der Planung von etwaigen Lagerplatz hilfreich sein kann.

Die Inventor API nutzt zur Bestimmung ein sogenanntes Box Objekt. Dieses definiert die Bounding Box über zwei Werte (Max/Min) pro Achse und kann über das ComponentDefinition Objekt auf zweierlei Weisen benutzt werden:

RangeBox vs. PreciseRangeBox

Neben der RangeBox: stellt Inventor seit Version 2023 eine PreciseRangeBox zur Ermittlung der Bounding Box bereit.

RangeBox in der Inventor API

Autodesk definiert sie in ihrer Funktionsweise folgendermaßen:

RangeBox:

Property that returns a Box object which contains the opposing points of a rectangular box that is guaranteed to enclose this object.

PreciseRangeBox:

Gets a bounding box that tightly encloses all the solid and surface bodies under the ComponentDefinition.

Der elementare Unterschied besteht darin, dass die PreciseRangeBox auch dann ein korrektes minimal umgebendes Rechteck liefert, wenn Teile schief im Raum und nicht entlang der Achsen modelliert wurden. Nachteil ist, dass die PreciseRangeBox in großen Baugruppen spürbar rechenintensiver ist. Auch exkludiert sie Work Features, wie Ebenen, Achsen und Punkte.

Code

Der folgende Code ermittelt die Werte der Bounding Box in Abhängigkeit des Dokumententyps. Siehe dazu: iLogic: Dokumententypen.

Für Bauteile wird die PreciseRangeBox verwendet, für Baugruppen die RangeBox. Die ermittelten Werte werden anschließend, wie bereit im Post iLogic: Units of Measurement erläutert, von Inventors interner Längeneinheit Zentimeter in Millimeter konvertiert und mit der Ceil()-Methode auf den nächst höheren Ganzzahlwert gerundet. Der ermittelte Wert wird anschließend in ein Custom Property namens Dimensionen geschrieben.

Sub Main()
    Dim oDoc As Document = ThisDoc.Document
    Dim UOM As UnitsOfMeasure = oDoc.UnitsOfMeasure
    Dim oRangeBox As Box

    Select Case oDoc.DocumentType
        Case DocumentTypeEnum.kPartDocumentObject
            oRangeBox = oDoc.ComponentDefinition.PreciseRangeBox
        Case DocumentTypeEnum.kAssemblyDocumentObject
            oRangeBox = oDoc.ComponentDefinition.RangeBox
        Case Else
            Exit Sub
    End Select

    ' Max Werte
    Dim Xmax As Double = oRangeBox.MaxPoint.X
    Dim Ymax As Double = oRangeBox.MaxPoint.Y
    Dim Zmax As Double = oRangeBox.MaxPoint.Z

    ' Min Werte
    Dim Xmin As Double = oRangeBox.MinPoint.X
    Dim Ymin As Double = oRangeBox.MinPoint.Y
    Dim Zmin As Double = oRangeBox.MinPoint.Z

    ' Konvertiere in 'mm' und runde auf nächsten Ganzzahlwert
    Dim X As Double = Ceil(UOM.ConvertUnits(Xmax - Xmin, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits))
    Dim Y As Double = Ceil(UOM.ConvertUnits(Ymax - Ymin, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits))
    Dim Z As Double = Ceil(UOM.ConvertUnits(Zmax - Zmin, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kMillimeterLengthUnits))

    ' Erzeuge String im Format 'X x Y x Z [mm]'
    Dim Dimensions As String = String.Format("{0} x {1} x {2} [mm]", X, Y, Z)

    ' Schreibe Abmaße in Property und Logger
    iProperties.Value("Custom", "Dimensionen") = Dimensions
    Logger.Info("Dimensionen: {0}", Dimensions)
End Sub

Ergebnis

Inventor iLogic - Dieser Artikel ist Teil einer Serie.
Teil 21: Dieser Artikel