/// <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)); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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()); }