Exemplo n.º 1
0
 /// <summary>
 /// Convert a value from its SI unit to destination unit
 /// </summary>
 public static double ConvertFromSI(string destinationUnit, double value, UnitCategoryEnum unitCategory = UnitCategoryEnum.Empty)
 {
     if (unitCategory == UnitCategoryEnum.Empty)
     {
         unitCategory = SearchUnitCategoryByUnitName(destinationUnit);
     }
     return(UnitConvert(destinationUnit, value, GetSIUnit(unitCategory), unitCategory));
 }
Exemplo n.º 2
0
 /// <summary>
 /// Convert a value from its origin unit to SI unit
 /// </summary>
 public static double ConvertToSI(double value, string originUnit, UnitCategoryEnum unitCategory = UnitCategoryEnum.Empty)
 {
     if (unitCategory == UnitCategoryEnum.Empty)
     {
         unitCategory = SearchUnitCategoryByUnitName(originUnit);
     }
     return(UnitConvert(GetSIUnit(unitCategory), value, originUnit, unitCategory));
 }
Exemplo n.º 3
0
 /// <summary>
 /// Get SI unit
 /// </summary>
 public static string GetSIUnit(UnitCategoryEnum unitCategory)
 {
     foreach (XmlNode node in unitCategoryList)
     {
         if (unitCategory.ToString() == node.SelectSingleNode("Category")?.InnerText)
         {
             return(node.SelectSingleNode("SI_Unit")?.InnerText);
         }
     }
     return(null);
 }
Exemplo n.º 4
0
 /// <summary>
 /// real parameter
 /// </summary>
 /// <paramCollection name="unitCategory">unit type</paramCollection>
 /// <paramCollection name="mode">if set to Input, the value won't change with unit in default window</paramCollection>
 public CapeRealParameter(string name, UnitCategoryEnum unitCategory,
                          CapeParamMode mode, double minVal = double.MinValue,
                          double maxVal = double.MaxValue, double defaultVal = double.NaN)
     : base(name, CapeParamType.CAPE_REAL, mode, unitCategory)
 {
     this.LowerBound     = minVal;
     this.UpperBound     = maxVal;
     this.DefaultValue   = defaultVal;
     DoubleValue         = DefaultValue;
     CurrentUnitCategory = unitCategory;
     CurrentUnit         = Units.GetSIUnit(unitCategory);
 }
Exemplo n.º 5
0
 /// <summary>
 /// Get physical dimensionality, contains 8 number, represent in order Length|Mass|Time|ElectricalCurrent|Temperature|AmountOfSubstance|Luminous|Currency
 /// </summary>
 public static IEnumerable <double> GetDimensionality(UnitCategoryEnum unitCategory)
 {
     double[] dimension = new double[8];
     foreach (XmlNode node in unitCategoryList)
     {
         if (unitCategory.ToString() == node.SelectSingleNode("Category")?.InnerText)
         {
             dimension[0] = Convert.ToDouble(node.SelectSingleNode("Length")?.InnerText);
             dimension[1] = Convert.ToDouble(node.SelectSingleNode("Mass")?.InnerText);
             dimension[2] = Convert.ToDouble(node.SelectSingleNode("Time")?.InnerText);
             dimension[3] = Convert.ToDouble(node.SelectSingleNode("ElectricalCurrent")?.InnerText);
             dimension[4] = Convert.ToDouble(node.SelectSingleNode("Temperature")?.InnerText);
             dimension[5] = Convert.ToDouble(node.SelectSingleNode("AmountOfSubstance")?.InnerText);
             dimension[6] = Convert.ToDouble(node.SelectSingleNode("Luminous")?.InnerText);
             dimension[7] = Convert.ToDouble(node.SelectSingleNode("Currency")?.InnerText);
             return(dimension);
         }
     }
     return(null);
 }
Exemplo n.º 6
0
 /// <summary>
 ///
 /// </summary>
 protected CapeParameterBase(string name, CapeParamType type, CapeParamMode mode, UnitCategoryEnum unitCategory)
     : base(name, "", false)
 {
     ValStatus = CapeValidationStatus.CAPE_NOT_VALIDATED;
     //value = null;
     Mode           = mode;
     Type           = type;
     Dimensionality = Units.GetDimensionality(unitCategory);
 }
Exemplo n.º 7
0
        /// <summary>
        /// Convert from origin unit to destination unit
        /// </summary>
        public static double UnitConvert(string destinationUnit, double value, string originUnit, UnitCategoryEnum unitCategory = UnitCategoryEnum.Empty)
        {
            if (unitCategory == UnitCategoryEnum.Empty)
            {
                unitCategory = SearchUnitCategoryByUnitName(destinationUnit);
            }

            double destinationConvTimes = 0;
            double destinationConvPlus  = 0;
            double originConvTimes      = 0;
            double originConvPlus       = 0;
            string destUnitType         = null;
            string originUnitType       = null;

            foreach (XmlNode node in unitNodeList)
            {
                if (destinationUnit == node.SelectSingleNode("CurrentUnit")?.InnerText &&
                    node.SelectSingleNode("Category")?.InnerText == unitCategory.ToString())
                {
                    destinationConvTimes = Convert.ToDouble(node.SelectSingleNode("ConversionTimes")?.InnerText);
                    destinationConvPlus  = Convert.ToDouble(node.SelectSingleNode("ConversionPlus")?.InnerText);
                    destUnitType         = node.SelectSingleNode("Category")?.InnerText;
                }
                if (originUnit == node.SelectSingleNode("CurrentUnit")?.InnerText &&
                    node.SelectSingleNode("Category")?.InnerText == unitCategory.ToString())
                {
                    originConvTimes = Convert.ToDouble(node.SelectSingleNode("ConversionTimes")?.InnerText);
                    originConvPlus  = Convert.ToDouble(node.SelectSingleNode("ConversionPlus")?.InnerText);
                    originUnitType  = node.SelectSingleNode("Category")?.InnerText;
                }
            }
            if (destUnitType == null || destUnitType != originUnitType)
            {
                throw new ECapeUnknownException(
                          $"\"{destinationUnit}\" and \"{originUnit}\" is not in a same category.");
            }
            return(((value * originConvTimes + originConvPlus) - destinationConvPlus) / destinationConvTimes);
        }
Exemplo n.º 8
0
 /// <summary>
 /// Get unit list of specified category
 /// </summary>
 public static List <string> GetUnitList(UnitCategoryEnum unitCategory)
 {
     return((from XmlNode node in unitNodeList
             where node.SelectSingleNode("Category")?.InnerText == unitCategory.ToString()
             select node.SelectSingleNode("CurrentUnit")?.InnerText).ToList());
 }