Casting Units in Visio’s ShapeSheet
If you work with different systems of units, you may have a need to convert ShapeSheet values to different units, without changing values. But when you Show Values in the ShapeSheet how can you specify exactly which units to use?
As an american ex-pat living in Munich, I personally run across this quite often. For instance I will be working in a metric drawing that uses millimeters for units, and I need to know a ShapeSheet value in inches.
There are a couple of reasons for this:
- I’m American. I simply understand inches better. (Stop laughing rest-of-world, and thanks a lot, Britannia!)
- Internal units. When you program against Visio, it’s convenient to use Visio internal units for numeric values. Internal units in Visio means inches.
To illustrate internal units, let’s look at a line of VB code:
visShp.CellsU(“Width”).ResultIU = 3.5
This sets the shape’s Width cell to 3.5 inches. Notice that we didn’t have to specify any units. That’s internal units! To set a value in units other than inches requires a more complicated line:
visShp.CellsU(“Width”).Result( Visio.VisUnitCodes.visMillimeters ) = 100
Let’s get back to the ShapeSheet. The simple trick to “cast” a value in the ShapeSheet is to add 0 units to the left of the value or formula.
In the illustration above, the Visio Guy shape displays his width value. He is 1-inch wide. The Guy on the right is also 1-inch wide, but has had his width formula altered:
Shape Transform.Width = 0mm + 1in
The 0mm on the left effectively casts the value to millimeters. The evaluation works from left-to-right, so 1in + 0mm will give you inch-values.
Casting Formulas in the ShapeSheet?
There are a few Visio ShapeSheet functions related to casting and unit-conversion, but deal only with angular quantities.
ANG360( angle_value ) Normalizes angle_value to between 0 and 360 degrees. The units of angle_value are returned, or the result is in radians if no units are specified.
DEG( radian_value ) Converts radian values to degrees.
FORMAT( expression, “formatpicture” ) Formats a value or formula using the format picture.Â You might have seen format pictures such as “0.00”, “0.##”, etc. that control the number of decimal places and the type of units to display.
FORMATEX( expression, “format”, [srcUnit], [dstUnit], [langID], [calID] )Â Converts a unitless number from one unit system to another, and formats it.Â For our metric Visio Guy, we would have: Width = FORMATEX( 1, “0.00u”, “in”, “mm” ) This means: “take 1 as an inch-value, convert it to mm, and show me the result to two decimal places.”
PI( ) 3.1415926535898
RAD( degree_value ) Converts degree values to radians.