OK. I added this section of code to your rule, just after the 3 values have been converted and sorted, but just before it starts the 'transaction', so that they will not be removed when the transaction is aborted.
'write values to custom iProperties with prompts for names
Dim sName1, sName2, sName3 As String
sName1 = InputBox("This value is " & minLength, "Assign Property Name", "")
If sName1 <> "" Then iProperties.Value("Custom", sName1) = minLength
sName2 = InputBox("This value is " & midLength, "Assign Property Name", "")
If sName2 <> "" Then iProperties.Value("Custom", sName2) = midLength
sName3 = InputBox("This value is " & maxLength, "Assign Property Name", "")
If sName3 <> "" Then iProperties.Value("Custom", sName3) = maxLength
...below is the whole thing, after that has been added in. I hope this works the way you want it to.
' Get the current Part document.
Dim partDoc As PartDocument = ThisDoc.Document
' Get the TransientBRep and TransientGeometry objects.
Dim transBRep As TransientBRep = ThisApplication.TransientBRep
Dim transGeom As TransientGeometry = ThisApplication.TransientGeometry
' Combine all bodies in Part into a single transient Surface Body.
Dim combinedBodies As SurfaceBody = Nothing
For Each surfBody As SurfaceBody In partDoc.ComponentDefinition.SurfaceBodies
If combinedBodies Is Nothing Then
combinedBodies = transBRep.Copy(surfBody)
Else
transBRep.DoBoolean(combinedBodies, surfBody, BooleanTypeEnum.kBooleanTypeUnion)
End If
Next
' Get the oriented mininum range box of all bodies in Part.
' NOTE: "OrientedMinimumRangeBox" was added in Inventor 2020.3/2021.
Dim minBox As OrientedBox = combinedBodies.OrientedMinimumRangeBox
' Get length of each side of mininum range box.
Dim dir1 As Double = minBox.DirectionOne.Length
Dim dir2 As Double = minBox.DirectionTwo.Length
Dim dir3 As Double = minBox.DirectionThree.Length
' Convert lengths to document's length units.
Dim uom As UnitsOfMeasure = partDoc.UnitsOfMeasure
dir1 = uom.ConvertUnits(dir1, "cm", uom.LengthUnits)
dir2 = uom.ConvertUnits(dir2, "cm", uom.LengthUnits)
dir3 = uom.ConvertUnits(dir3, "cm", uom.LengthUnits)
' Sort lengths from smallest to largest.
Dim lengths As New List(Of Double) From {dir1, dir2, dir3 }
lengths.Sort
Dim minLength As Double = lengths(0)
Dim midLength As Double = lengths(1)
Dim maxLength As Double = lengths(2)
'write values to custom iProperties with prompts for names
Dim sName1, sName2, sName3 As String
sName1 = InputBox("This value is " & minLength, "Assign Property Name", "")
If sName1 <> "" Then iProperties.Value("Custom", sName1) = minLength
sName2 = InputBox("This value is " & midLength, "Assign Property Name", "")
If sName2 <> "" Then iProperties.Value("Custom", sName2) = midLength
sName3 = InputBox("This value is " & maxLength, "Assign Property Name", "")
If sName3 <> "" Then iProperties.Value("Custom", sName3) = maxLength
' Create surface to represent oriented range box...
' Create starting box with dimensions of oriented rangebox.
Dim startBox As Box = transGeom.CreateBox()
Dim boxMaxPoint As Point = transGeom.CreatePoint(minBox.DirectionOne.Length, minBox.DirectionTwo.Length, minBox.DirectionThree.Length)
startBox.Extend(boxMaxPoint)
' Create transformation matrix to move box to correct location/orientation.
Dim transMatrix As Matrix = ThisApplication.TransientGeometry.CreateMatrix
transMatrix.SetCoordinateSystem(minBox.CornerPoint, minBox.DirectionOne.AsUnitVector.AsVector, minBox.DirectionTwo.AsUnitVector.AsVector, minBox.DirectionThree.AsUnitVector.AsVector)
' Create surface body for the range box.
Dim minBoxSurface As SurfaceBody = ThisApplication.TransientBRep.CreateSolidBlock(startBox)
' Transform range box surface body to the correct location/orientation.
ThisApplication.TransientBRep.Transform(minBoxSurface, transMatrix)
' Display range box on screen.
Dim transac As Transaction = ThisApplication.TransactionManager.StartTransaction(partDoc, "DisplayRangeBox")
Dim cGraphics As ClientGraphics
Try
cGraphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Add("OrientedRangeBox")
Dim surfacesNode As GraphicsNode = cGraphics.AddNode(1)
Dim surfGraphics As SurfaceGraphics = surfacesNode.AddSurfaceGraphics(minBoxSurface)
Dim targetAppearance As Asset
Try
targetAppearance = partDoc.Assets.Item("Clear - Blue")
Catch
Dim sourceAppearance As Asset = ThisApplication.AssetLibraries.Item("314DE259-5443-4621-BFBD-1730C6CC9AE9").AppearanceAssets.Item("InvGen-001-1-2") ' "Clear - Blue"
targetAppearance = sourceAppearance.CopyTo(partDoc)
End Try
surfacesNode.Appearance = targetAppearance
ThisApplication.ActiveView.Update
' Display message with minimum rangebox size.
MessageBox.Show("Oriented Minimum Rangebox Size: " &
minLength.ToString("#.###") & " x " & midLength.ToString("#.###") & " x " & maxLength.ToString("#.###"),
"Oriented Minimum Rangebox", MessageBoxButtons.OK, MessageBoxIcon.Information)
Finally
' Remove range box from screen.
transac.Abort
ThisApplication.ActiveView.Update
End Try
Wesley Crihfield

(Not an Autodesk Employee)