Unit Conversion Utility Update
Originally Published inHere is a Revit 2013 update of the Revit 2011 unit conversion utility, originally posted and described for Revit 2010, by Harry Mattison ↗.
In his own words:
I was looking at the great unit conversion utility and created a new version upgraded to use the Revit 2013 API that I thought you readers might enjoy.
I ran into one issue that required a code enhancement to catch an exception thrown by many parameters, such as HVAC_Temperature, HVAC_Slope, etc.
The rest of the code handles error conditions nicely, so I was surprised to see these uncaught exceptions.
I solved it by adding a try/catch statement around the existing call to AddParameter in frmUnitConversions.cs:
if( null == _Parameter )
{
// Create a new parameter
try
{
_Parameter
= _DbDocument.FamilyManager.AddParameter(
parameterTypeToCreate.ToString(),
BuiltInParameterGroup.INVALID,
parameterTypeToCreate,
false );
}
catch( Exception ex )
{
TaskDialog.Show( "Error",
"Cannot create parameter '"
+ parameterTypeToCreate.ToString()
+ "' with parameter type '"
+ parameterTypeToCreate
+ "' because of exception\n"
+ ex.Message.ToString() );
return;
}
}
I think I figured out what is causing this and thought it would be interesting to share with your blog readers:
I am creating family parameters from a shared parameter file. Some parameters have types that are not supported in the version of Revit that I am currently using, which is Revit Architecture.
I created this function to detect the situation:
public static bool canGetFormatOptions(
Document doc,
FamilyParameter familyParameter )
{
try
{
UnitType parameterUnitType
= ConvertParameterTypeToUnitType(
familyParameter.Definition.ParameterType );
doc.ProjectUnit.get_FormatOptions(
parameterUnitType );
return true;
}
catch
{
return false;
}
}
I use it like this:
if( !canGetFormatOptions(
famDoc, familyParameter ) )
{
TaskDialog.Show( "Error",
"Cannot set parameter value.\nUnit Type "
+ ConvertParameterTypeToUnitType(
familyParameter.Definition.ParameterType )
+ " is not supported in Revit "
+ famDoc.Application.Product.ToString() );
}
Take care.
The updated code is provided above.
Many thanks to Harry for this update with his enhancement and analysis!