Guest User

Untitled

a guest
Nov 30th, 2011
622
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using Autodesk.Revit.DB;
  4.  
  5. namespace ITCRevitIntegration.Helpers.Revit
  6. {
  7.     public static class ParameterUnitConverter
  8.     {
  9.         private const double METERS_IN_FEET = 0.3048;
  10.  
  11.         /// <summary>
  12.         /// Get double value parameter in ProjectUnits
  13.         /// </summary>
  14.         /// <param name="param"></param>
  15.         /// <returns></returns>
  16.         public static double AsProjectUnitTypeDouble(this Parameter param)
  17.         {
  18.             if (param.StorageType != StorageType.Double)
  19.                 throw new NotSupportedException("Parameter does not have double value");
  20.  
  21.            
  22.             double imperialValue = param.AsDouble();
  23.            
  24.             Document document = param.Element.Document;
  25.             UnitType ut = ConvertParameterTypeToUnitType(param.Definition.ParameterType);
  26.             FormatOptions fo = document.ProjectUnit.get_FormatOptions(ut);
  27.  
  28.             DisplayUnitType dut = fo.Units;
  29.  
  30.             // Unit Converter
  31.             // http://www.asknumbers.com/
  32.  
  33.             switch (dut)
  34.             {
  35.                 #region Length
  36.                
  37.                 case DisplayUnitType.DUT_METERS:
  38.                     return imperialValue*METERS_IN_FEET; //feet
  39.                 case DisplayUnitType.DUT_CENTIMETERS:
  40.                     return imperialValue*METERS_IN_FEET*100;
  41.                 case DisplayUnitType.DUT_DECIMAL_FEET:
  42.                     return imperialValue;
  43.                 case DisplayUnitType.DUT_DECIMAL_INCHES:
  44.                     return imperialValue*12;
  45.                 case DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES:
  46.                     NotSupported(dut);
  47.                     break;                    
  48.                 case DisplayUnitType.DUT_FRACTIONAL_INCHES:
  49.                     NotSupported(dut);
  50.                     break;
  51.                 case DisplayUnitType.DUT_METERS_CENTIMETERS:
  52.                     return imperialValue*METERS_IN_FEET; //feet
  53.                 case DisplayUnitType.DUT_MILLIMETERS:
  54.                     return imperialValue*METERS_IN_FEET*1000;
  55.  
  56.                 #endregion
  57.  
  58.                 #region Area
  59.  
  60.                 case DisplayUnitType.DUT_SQUARE_FEET:
  61.                     return imperialValue;
  62.                 case DisplayUnitType.DUT_ACRES:
  63.                     return imperialValue*1/43560.039;
  64.                 case DisplayUnitType.DUT_HECTARES:
  65.                     return imperialValue*1/107639.104;
  66.                 case DisplayUnitType.DUT_SQUARE_CENTIMETERS:
  67.                     return imperialValue*Math.Pow(METERS_IN_FEET * 100, 2);
  68.                 case DisplayUnitType.DUT_SQUARE_INCHES:
  69.                     return imperialValue*Math.Pow(12, 2);
  70.                 case DisplayUnitType.DUT_SQUARE_METERS:
  71.                     return imperialValue*Math.Pow(METERS_IN_FEET, 2);
  72.                 case DisplayUnitType.DUT_SQUARE_MILLIMETERS:
  73.                     return imperialValue * Math.Pow(METERS_IN_FEET * 1000, 2);
  74.  
  75.                 #endregion
  76.  
  77.  
  78.                 #region Volume
  79.                 case DisplayUnitType.DUT_CUBIC_FEET:
  80.                     return imperialValue;
  81.                 case DisplayUnitType.DUT_CUBIC_CENTIMETERS:
  82.                     return imperialValue * Math.Pow(METERS_IN_FEET * 100, 3);
  83.                 case DisplayUnitType.DUT_CUBIC_INCHES:
  84.                     return imperialValue * Math.Pow(12, 3);
  85.                 case DisplayUnitType.DUT_CUBIC_METERS:
  86.                     return imperialValue * Math.Pow(METERS_IN_FEET, 3);
  87.                 case DisplayUnitType.DUT_CUBIC_MILLIMETERS:
  88.                     return imperialValue * Math.Pow(METERS_IN_FEET * 1000, 3);
  89.                 case DisplayUnitType.DUT_CUBIC_YARDS:
  90.                     return imperialValue*1/Math.Pow(3, 3);
  91.                 case DisplayUnitType.DUT_GALLONS_US:
  92.                     return imperialValue*7.5;
  93.                 case DisplayUnitType.DUT_LITERS:
  94.                     return imperialValue*28.31684;
  95.  
  96.                 #endregion
  97.  
  98.                 default:
  99.                     NotSupported(dut);
  100.                     break;
  101.             }
  102.  
  103.             throw new NotSupportedException();
  104.         }
  105.  
  106.  
  107.         /// <summary>
  108.         /// Get douuble value of parameter in meters unit.
  109.         /// E.g. Length in meters, Area in square meters and Volume in Cubic_meters
  110.         /// Other units not supported yet
  111.         /// </summary>
  112.         /// <param name="param">Parameter</param>
  113.         /// <returns>Parameter value</returns>
  114.         public static double AsMetersValue(this Parameter param)
  115.         {
  116.             if (param.StorageType != StorageType.Double)
  117.                 throw new NotSupportedException("Parameter does not have double value");
  118.  
  119.            
  120.             double imperialValue = param.AsDouble();
  121.            
  122.             UnitType ut = ConvertParameterTypeToUnitType(param.Definition.ParameterType);
  123.  
  124.             switch (ut)
  125.             {
  126.                     case UnitType.UT_Length:
  127.                         return imperialValue*METERS_IN_FEET;
  128.                     case UnitType.UT_Area:
  129.                         return imperialValue * Math.Pow(METERS_IN_FEET, 2);
  130.                     case UnitType.UT_Volume:
  131.                         return imperialValue * Math.Pow(METERS_IN_FEET, 3);
  132.             }
  133.  
  134.             throw new NotSupportedException();
  135.         }
  136.  
  137.         static void NotSupported(DisplayUnitType dut)
  138.         {
  139.             throw new NotSupportedException(string.Format("Not supported type: {0} - {1}",
  140.                 dut.ToString(),
  141.                 LabelUtils.GetLabelFor(dut)));
  142.         }
  143.  
  144.         /// <summary>
  145.         /// This function returns the UnitType for the ParameterType provided (where possible).
  146.         /// </summary>
  147.         /// <param name="forParameterType">The ParameterType for which we need to know the UnitType</param>
  148.         /// <returns></returns>
  149.         /// <exception cref="ArgumentException">Thrown if it is not possible to convert the ParameterType to a UnitType.</exception>
  150.         public static UnitType ConvertParameterTypeToUnitType(ParameterType parameterType)
  151.         {
  152.  
  153.             // The conversion will from the in-memory dictionary.
  154.             foreach (KeyValuePair<UnitType, ParameterType> kvp in BuildUnitTypeToParameterTypeMapping())
  155.             {
  156.                 if (kvp.Value == parameterType)
  157.                 {
  158.                     return kvp.Key;
  159.                 }
  160.             }
  161.             // If we made it this far, there's no entry in the dictionary.
  162.             throw new ArgumentException("Cannot convert ParameterType '" + parameterType.ToString() +
  163.                                         "' to a UnitType.");
  164.         }
  165.  
  166.         #region Private Helper Functions
  167.  
  168.         /// <summary>
  169.         /// This method builds up the dictionary object which relates the UnitType enum values to their
  170.         /// ParameterType enum counterpart values.
  171.         /// </summary>
  172.         /// <remarks>
  173.         /// </remarks>
  174.         /// <example>
  175.         /// UnitType.UT_Angle = ParameterType.Angle
  176.         /// </example>
  177.         private static Dictionary<UnitType, ParameterType> BuildUnitTypeToParameterTypeMapping()
  178.         {
  179.  
  180.             // This data could come from a file, or (better yet) from Revit itself...
  181.  
  182.             // Use a local variable with a shorter name as a quick reference to the module-level referenced dictionary
  183.             Dictionary<UnitType, ParameterType> result = new Dictionary<UnitType, ParameterType>();
  184.  
  185.             result.Add(UnitType.UT_Angle, ParameterType.Angle);
  186.             result.Add(UnitType.UT_Area, ParameterType.Area);
  187.             result.Add(UnitType.UT_AreaForce, ParameterType.AreaForce);
  188.             result.Add(UnitType.UT_AreaForcePerLength, ParameterType.AreaForcePerLength);
  189.             //map.Add(UnitType.UT_AreaForceScale, ParameterType.???);
  190.             result.Add(UnitType.UT_Color_Temperature, ParameterType.ColorTemperature);
  191.             result.Add(UnitType.UT_Currency, ParameterType.Currency);
  192.             //map.Add(UnitType.UT_DecSheetLength, ParameterType.???);
  193.             result.Add(UnitType.UT_Electrical_Apparent_Power, ParameterType.ElectricalApparentPower);
  194.             result.Add(UnitType.UT_Electrical_Current, ParameterType.ElectricalCurrent);
  195.             result.Add(UnitType.UT_Electrical_Efficacy, ParameterType.ElectricalEfficacy);
  196.             result.Add(UnitType.UT_Electrical_Frequency, ParameterType.ElectricalFrequency);
  197.             result.Add(UnitType.UT_Electrical_Illuminance, ParameterType.ElectricalIlluminance);
  198.             result.Add(UnitType.UT_Electrical_Luminance, ParameterType.ElectricalLuminance);
  199.             result.Add(UnitType.UT_Electrical_Luminous_Flux, ParameterType.ElectricalLuminousFlux);
  200.             result.Add(UnitType.UT_Electrical_Luminous_Intensity, ParameterType.ElectricalLuminousIntensity);
  201.             result.Add(UnitType.UT_Electrical_Potential, ParameterType.ElectricalPotential);
  202.             result.Add(UnitType.UT_Electrical_Power, ParameterType.ElectricalPower);
  203.             result.Add(UnitType.UT_Electrical_Power_Density, ParameterType.ElectricalPowerDensity);
  204.             result.Add(UnitType.UT_Electrical_Wattage, ParameterType.ElectricalWattage);
  205.             result.Add(UnitType.UT_Force, ParameterType.Force);
  206.             result.Add(UnitType.UT_ForceLengthPerAngle, ParameterType.ForceLengthPerAngle);
  207.             result.Add(UnitType.UT_ForcePerLength, ParameterType.ForcePerLength);
  208.             //map.Add(UnitType.UT_ForceScale, ParameterType.???);
  209.             result.Add(UnitType.UT_HVAC_Airflow, ParameterType.HVACAirflow);
  210.             result.Add(UnitType.UT_HVAC_Airflow_Density, ParameterType.HVACAirflowDensity);
  211.             result.Add(UnitType.UT_HVAC_Airflow_Divided_By_Cooling_Load, ParameterType.HVACAirflowDividedByCoolingLoad);
  212.             result.Add(UnitType.UT_HVAC_Airflow_Divided_By_Volume, ParameterType.HVACAirflowDividedByVolume);
  213.             result.Add(UnitType.UT_HVAC_Area_Divided_By_Cooling_Load, ParameterType.HVACAreaDividedByCoolingLoad);
  214.             result.Add(UnitType.UT_HVAC_Area_Divided_By_Heating_Load, ParameterType.HVACAreaDividedByHeatingLoad);
  215.             result.Add(UnitType.UT_HVAC_CoefficientOfHeatTransfer, ParameterType.HVACCoefficientOfHeatTransfer);
  216.             result.Add(UnitType.UT_HVAC_Cooling_Load, ParameterType.HVACCoolingLoad);
  217.             result.Add(UnitType.UT_HVAC_Cooling_Load_Divided_By_Area, ParameterType.HVACCoolingLoadDividedByArea);
  218.             result.Add(UnitType.UT_HVAC_Cooling_Load_Divided_By_Volume, ParameterType.HVACCoolingLoadDividedByVolume);
  219.             result.Add(UnitType.UT_HVAC_CrossSection, ParameterType.HVACCrossSection);
  220.             result.Add(UnitType.UT_HVAC_Density, ParameterType.HVACDensity);
  221.             result.Add(UnitType.UT_HVAC_DuctSize, ParameterType.HVACDuctSize);
  222.             result.Add(UnitType.UT_HVAC_Energy, ParameterType.HVACEnergy);
  223.             result.Add(UnitType.UT_HVAC_Factor, ParameterType.HVACFactor);
  224.             result.Add(UnitType.UT_HVAC_Friction, ParameterType.HVACFriction);
  225.             result.Add(UnitType.UT_HVAC_HeatGain, ParameterType.HVACHeatGain);
  226.             result.Add(UnitType.UT_HVAC_Heating_Load, ParameterType.HVACHeatingLoad);
  227.             result.Add(UnitType.UT_HVAC_Heating_Load_Divided_By_Area, ParameterType.HVACHeatingLoadDividedByArea);
  228.             result.Add(UnitType.UT_HVAC_Heating_Load_Divided_By_Volume, ParameterType.HVACHeatingLoadDividedByVolume);
  229.             result.Add(UnitType.UT_HVAC_Power, ParameterType.HVACPower);
  230.             result.Add(UnitType.UT_HVAC_Power_Density, ParameterType.HVACPowerDensity);
  231.             result.Add(UnitType.UT_HVAC_Pressure, ParameterType.HVACPressure);
  232.             result.Add(UnitType.UT_HVAC_Roughness, ParameterType.HVACRoughness);
  233.             result.Add(UnitType.UT_HVAC_Slope, ParameterType.HVACSlope);
  234.             result.Add(UnitType.UT_HVAC_Temperature, ParameterType.HVACTemperature);
  235.             result.Add(UnitType.UT_HVAC_Velocity, ParameterType.HVACVelocity);
  236.             result.Add(UnitType.UT_HVAC_Viscosity, ParameterType.HVACViscosity);
  237.             result.Add(UnitType.UT_Length, ParameterType.Length);
  238.             result.Add(UnitType.UT_LinearForce, ParameterType.LinearForce);
  239.             result.Add(UnitType.UT_LinearForceLengthPerAngle, ParameterType.LinearForceLengthPerAngle);
  240.             result.Add(UnitType.UT_LinearForcePerLength, ParameterType.LinearForcePerLength);
  241.             // map.Add(UnitType.UT_LinearForceScale, ParameterType.???);
  242.             result.Add(UnitType.UT_LinearMoment, ParameterType.LinearMoment);
  243.             // map.Add(UnitType.UT_LinearMomentScale, ParameterType.???);
  244.             result.Add(UnitType.UT_Moment, ParameterType.Moment);
  245.             ///map.Add(UnitType.UT_MomentScale, ParameterType.???);
  246.             result.Add(UnitType.UT_Number, ParameterType.Number);
  247.             result.Add(UnitType.UT_PipeSize, ParameterType.PipeSize);
  248.             result.Add(UnitType.UT_Piping_Density, ParameterType.PipingDensity);
  249.             result.Add(UnitType.UT_Piping_Flow, ParameterType.PipingFlow);
  250.             result.Add(UnitType.UT_Piping_Friction, ParameterType.PipingFriction);
  251.             result.Add(UnitType.UT_Piping_Pressure, ParameterType.PipingPressure);
  252.             result.Add(UnitType.UT_Piping_Roughness, ParameterType.PipingRoughness);
  253.             result.Add(UnitType.UT_Piping_Slope, ParameterType.PipingSlope);
  254.             result.Add(UnitType.UT_Piping_Temperature, ParameterType.PipingTemperature);
  255.             result.Add(UnitType.UT_Piping_Velocity, ParameterType.PipingVelocity);
  256.             result.Add(UnitType.UT_Piping_Viscosity, ParameterType.PipingViscosity);
  257.             result.Add(UnitType.UT_Piping_Volume, ParameterType.PipingVolume);
  258.             //map.Add(UnitType.UT_SheetLength, ParameterType.???);
  259.             //map.Add(UnitType.UT_SiteAngle, ParameterType.???);
  260.             result.Add(UnitType.UT_Slope, ParameterType.Slope);
  261.             result.Add(UnitType.UT_Stress, ParameterType.Stress);
  262.             result.Add(UnitType.UT_TemperalExp, ParameterType.TemperalExp);
  263.             result.Add(UnitType.UT_UnitWeight, ParameterType.UnitWeight);
  264.             result.Add(UnitType.UT_Volume, ParameterType.Volume);
  265.             result.Add(UnitType.UT_WireSize, ParameterType.WireSize);
  266.  
  267.             return result;
  268.         }
  269.  
  270.  
  271.         #endregion Private Helper Functions
  272.     }
  273. }
  274.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×