Okay I built a randomizer rule in the attached part. I did a little tweaking to randomizer bounds, but the shell does fail on update occasionally. The rule is as follows, but it is pretty specific to the parameter names in the part file:
Sub Main
Dim pDef As PartComponentDefinition = TryCast(ThisDoc.Document.ComponentDefinition, PartComponentDefinition)
If IsNothing(pDef) Then Exit Sub
Dim Iterations As Integer = 3
Dim scaleRanges As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
'LENGTH
scaleRanges.Add("OA_LENGTH", "7500 mm") 'LENGTH NO VARIATION [FOR VARIATION: "LOWER:UPPER" (EXAMPLE: "5000 mm:10000 mm")]
'BASE MAJOR ELLIPSE AXIS [SKETCH X AXIS]
scaleRanges.Add("BASE_ELLIPSE_MAJOR", "500 mm:1000 mm")'BASE MAJOR ELLIPSE AXIS [SKETCH X AXIS] VARIATION [FOR NO VARIATION: "SINGLE VALUE" (EXAMPLE: "700 mm")]
'BASE MINOR ELLIPSE AXIS [SKETCH Y AXIS]
scaleRanges.Add("BASE_ELLIPSE_MINOR", "120 mm:300 mm") 'BASE MinorR ELLIPSE AXIS [SKETCH X AXIS] VARIATION [FOR NO VARIATION: "SINGLE VALUE" (EXAMPLE: "190 mm")]
'TIP MAJOR ELLIPSE AXIS SCALE
scaleRanges.Add("OA_SCALE", ".50:.90") 'PERCENTAGE OF VARIATION FOR TIP_ELLIPSE_MAJOR/BASE_ELLIPSE_MAJOR
'BASE POINT 1
scaleRanges.Add("BP1_X_SCALE", ".25:.90") 'PERCENTAGE OF VARIATION FOR BP1_X/BASE_ELLIPSE_MAJOR [SKETCH X AXIS]
scaleRanges.Add("BP1_Y_SCALE", ".30:.90") 'PERCENTAGE OF VARIATION FOR BP1_Y/BASE_ELLIPSE_MINOR [SKETCH Y AXIS]
'BASE POINT 2
scaleRanges.Add("BP2_X_SCALE", ".05:.50") 'PERCENTAGE OF VARIATION FOR BP2_X/BASE_ELLIPSE_MAJOR [SKETCH X AXIS]
scaleRanges.Add("BP2_Y_SCALE", ".30:.90") 'PERCENTAGE OF VARIATION FOR BP2_Y/BASE_ELLIPSE_MINOR [SKETCH Y AXIS]
'BASE POINT 3
scaleRanges.Add("BP3_X_SCALE", ".40:.90") 'PERCENTAGE OF VARIATION FOR BP3_X/BASE_ELLIPSE_MAJOR [SKETCH X AXIS]
scaleRanges.Add("BP3_Y_SCALE", ".05:.40") 'PERCENTAGE OF VARIATION FOR BP3_Y/BASE_ELLIPSE_MINOR [SKETCH Y AXIS]
'TIP POINT 1
scaleRanges.Add("TP1_X_SCALE", ".25:.90") 'PERCENTAGE OF VARIATION FOR TP1_X/TIP_ELLIPSE_MAJOR [SKETCH X AXIS]
scaleRanges.Add("TP1_Y_SCALE", ".30:.90") 'PERCENTAGE OF VARIATION FOR TP1_Y/TIP_ELLIPSE_MINOR [SKETCH Y AXIS]
'TIP POINT 2
scaleRanges.Add("TP2_X_SCALE", ".05:.50") 'PERCENTAGE OF VARIATION FOR TP2_X/TIP_ELLIPSE_MAJOR [SKETCH X AXIS]
scaleRanges.Add("TP2_Y_SCALE", ".40:.90") 'PERCENTAGE OF VARIATION FOR TP2_Y/TIP_ELLIPSE_MINOR [SKETCH Y AXIS]
'TIP POINT 3
scaleRanges.Add("TP3_X_SCALE", ".40:.90") 'PERCENTAGE OF VARIATION FOR TP3_X/TIP_ELLIPSE_MAJOR [SKETCH X AXIS]
scaleRanges.Add("TP3_Y_SCALE", ".05:.40") 'PERCENTAGE OF VARIATION FOR TP3_Y/TIP_ELLIPSE_MINOR [SKETCH Y AXIS]
Call Randomizer(scaleRanges, Iterations)
End Sub
Sub Randomizer(Scales As NameValueMap, Count As Integer)
For i As Integer = 1 To Count
For j As Integer = 1 To Scales.Count
Dim isStatic As Boolean = False
Dim splitString As String() = Split(Scales.Value(Scales.Name(j)), ":")
If splitString.Length < 2 Then isStatic = True
If isStatic = True
actExpression = splitString(0)
Else
actExpression = RandomizeString(splitString)
End If
Logger.Trace(Scales.Name(j) & " = " & actExpression)
Parameter.Param(Scales.Name(j)).Expression = actExpression
Next
InventorVb.DocumentUpdate()
MessageBox.Show(i, "Iteration")
Next
Exit Sub
End Sub
Function RandomizeString(sRange As String()) As String
Dim Result As String = Nothing
Dim lower As Double = Val(sRange(0))
Dim upper As Double = Val(sRange(1))
Dim Random As Double = Round((((upper-lower)*Rnd)+lower), 2)
Result = Random.ToString
Return Result
End Function
Let me know if you have any questions, or if it is not working as intended