<?xml encoding=”UTF-8″>By Adam Nagy
If you want to show the current volume of the model inside a sketch text box, then you either need to keep updating a TextBox with the latest information yourself or base the TextBox information on a User or Model Parameter that is updated from the actual Volume of the model.

In case of our simple model you could easily calculate the Volume yourself based on the 3 dimensions of this box model. However, in case of a complicated model you would need to rely on the calculated value provided by Inventor, e.g. iProperties.Volume. This however requires a model geometry recalculation to be correct. So if you use it right after a model parameter changed, but before the model geometry got recalculated, then it will be incorrect.
If you subscribed the Rule to both Any Model Parameter Change and Part Geometry Change and your Rule relies on information that is calculated from geometry, like Volume, then Any Model Parameter Change event is too early and better to remove it from the list of events that trigger your rule:
If you did not do the above and your Rule is not forcing an update explicitly (e.g. using InventorVb.DocumentUpdate(False)) before reading the iProperties.Volume property then this would happen when changing parameters directly in the Parameters dialog:
So the above was enough to make sure that our own Volume User Parameter will always be up-to-date. Then to make the TextBox up-to-date as well, we can simply do this which will trigger an update after our Rule finished:
iLogicVb.UpdateWhenDone = True
We are also checking the Volume based on liters, so we use UnitsOfMeasure object to convert the Volume to liters. Here is the Rule code:
' This is in mm^3 because of the
' Part Document's unit settings
' You have to set the rule
' so that it's only triggered for
' "Part Geometry Change" event, so
' that the iProperties.Volume is correct
Volume = iProperties.Volume
' If we want it in liters
Dim uom As UnitsOfMeasure
uom = ThisApplication.ActiveDocument.UnitsOfMeasure
Dim lengthUnit As String
lengthUnit = uom.GetStringFromType(uom.LengthUnits)
' mm^3 to liters
VV = uom.ConvertUnits(Volume, lengthUnit + "^3", "l")
' In liters
V_needed = 2500
' Need to use accuracy
acc = .0001
' The values are equal or VV is bigger
If VV > V_needed - acc Then
iProperties.PartColor = "Green Pastel"
Else
iProperties.PartColor = "Red"
End If
' This is enough to get the sketch text updated
' to the new Volume value
iLogicVb.UpdateWhenDone = True
Sample model: Download Tank volume 2014



Leave a Reply