/// <summary> /// Gets the unit of a type. /// </summary> /// <param name="unitType">The unit type.</param> /// <returns>The Unit object.</returns> public IFCUnit GetIFCProjectUnit(UnitType unitType) { IFCUnit projectUnit = null; if (m_ProjectUnitsDictionary.TryGetValue(unitType, out projectUnit)) { return(projectUnit); } else { //default units if (unitType == UnitType.UT_Length) { IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(unitType, UnitSystem.Metric, UnitName.DUT_METERS, 1.0 / 0.3048); m_ProjectUnitsDictionary[unitType] = unit; return(unit); } else if (unitType == UnitType.UT_Area) { IFCUnit projectLengthUnit = GetIFCProjectUnit(UnitType.UT_Length); UnitSystem unitSystem = projectLengthUnit.UnitSystem; UnitName unitName = unitSystem == UnitSystem.Metric ? UnitName.DUT_SQUARE_METERS : UnitName.DUT_SQUARE_FEET; double scaleFactor = unitSystem == UnitSystem.Metric ? (1.0 / 0.3048) * (1.0 / 0.3048) : 1.0; IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(unitType, unitSystem, unitName, scaleFactor); m_ProjectUnitsDictionary[unitType] = unit; return(unit); } else if (unitType == UnitType.UT_Volume) { IFCUnit projectLengthUnit = GetIFCProjectUnit(UnitType.UT_Length); UnitSystem unitSystem = projectLengthUnit.UnitSystem; UnitName unitName = unitSystem == UnitSystem.Metric ? UnitName.DUT_CUBIC_METERS : UnitName.DUT_CUBIC_FEET; double scaleFactor = unitSystem == UnitSystem.Metric ? (1.0 / 0.3048) * (1.0 / 0.3048) * (1.0 / 0.3048) : 1.0; IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(unitType, unitSystem, unitName, scaleFactor); m_ProjectUnitsDictionary[unitType] = unit; return(unit); } else if (unitType == UnitType.UT_Angle) { IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(unitType, UnitSystem.Metric, UnitName.DUT_DECIMAL_DEGREES, Math.PI / 180); m_ProjectUnitsDictionary[unitType] = unit; return(unit); } else if (unitType == UnitType.UT_HVAC_Temperature) { IFCUnit unit = IFCUnit.ProcessIFCDefaultUnit(unitType, UnitSystem.Metric, UnitName.DUT_KELVIN, 1.0); m_ProjectUnitsDictionary[unitType] = unit; return(unit); } } return(null); }
public static double GetConvertValue(this double value, Autodesk.Revit.DB.DisplayUnitType dut) { switch (dut) { case Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS: case DisplayUnitType.DUT_METERS: return(UnitUtils.Convert(value, DisplayUnitType.DUT_DECIMAL_FEET, dut)); case Autodesk.Revit.DB.DisplayUnitType.DUT_SQUARE_MILLIMETERS: return(UnitUtils.Convert(value, DisplayUnitType.DUT_SQUARE_FEET, dut)); case Autodesk.Revit.DB.DisplayUnitType.DUT_CUBIC_MILLIMETERS: return(UnitUtils.Convert(value, DisplayUnitType.DUT_CUBIC_FEET, dut)); case DisplayUnitType.DUT_SQUARE_METERS: return(UnitUtils.Convert(value, DisplayUnitType.DUT_SQUARE_FEET, dut)); case DisplayUnitType.DUT_CUBIC_METERS: return(UnitUtils.Convert(value, DisplayUnitType.DUT_CUBIC_FEET, dut)); case DisplayUnitType.DUT_DECIMAL_DEGREES: return(UnitUtils.Convert(value, DisplayUnitType.DUT_RADIANS, dut)); default: throw new Exception("Trường hợp này chưa xét tới:"); } }
public static Rhino.UnitSystem ToRhinoLengthUnits(this DB.DisplayUnitType value) { ToRhinoLengthUnitsStatic.Assert(); if (!DB.UnitUtils.IsValidDisplayUnit(DB.UnitType.UT_Length, value)) { throw new ConversionException($"{value} is not a length unit"); } switch (value) { case DB.DisplayUnitType.DUT_METERS: return(Rhino.UnitSystem.Meters); case DB.DisplayUnitType.DUT_METERS_CENTIMETERS: return(Rhino.UnitSystem.Meters); case DB.DisplayUnitType.DUT_DECIMETERS: return(Rhino.UnitSystem.Decimeters); case DB.DisplayUnitType.DUT_CENTIMETERS: return(Rhino.UnitSystem.Centimeters); case DB.DisplayUnitType.DUT_MILLIMETERS: return(Rhino.UnitSystem.Millimeters); case DB.DisplayUnitType.DUT_FRACTIONAL_INCHES: return(Rhino.UnitSystem.Inches); case DB.DisplayUnitType.DUT_DECIMAL_INCHES: return(Rhino.UnitSystem.Inches); case DB.DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES: return(Rhino.UnitSystem.Feet); case DB.DisplayUnitType.DUT_DECIMAL_FEET: return(Rhino.UnitSystem.Feet); } Debug.Fail($"{value} conversion is not implemented"); return(Rhino.UnitSystem.Unset); }
/// <summary> /// 将Revit内部值转换为由DisplayUnitType表示的值 /// </summary> /// <param name="value">Revit内部值</param> /// <param name="dut">DisplayUnitType</param> /// <returns>返回由DisplayUnitType表示的值</returns> public static XYZ Convert2FT(XYZ value, Autodesk.Revit.DB.DisplayUnitType dut) { if (dut == Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS) { return(MM2FT(value)); } else if (dut == Autodesk.Revit.DB.DisplayUnitType.DUT_CENTIMETERS) { return(CM2FT(value)); } else if (dut == Autodesk.Revit.DB.DisplayUnitType.DUT_METERS) { return(M2FT(value)); } else { return(value); } }
/// <summary> /// DisplayUnitType对应的转换值 /// </summary> /// <param name="dut">DisplayUnitType</param> /// <returns>返回由DisplayUnitType表示的值</returns> private static double ImperialDutRatio(Autodesk.Revit.DB.DisplayUnitType dut) { switch (dut) { case Autodesk.Revit.DB.DisplayUnitType.DUT_DECIMAL_FEET: return(1); case Autodesk.Revit.DB.DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES: return(1); case Autodesk.Revit.DB.DisplayUnitType.DUT_DECIMAL_INCHES: return(12); case Autodesk.Revit.DB.DisplayUnitType.DUT_FRACTIONAL_INCHES: return(12); case Autodesk.Revit.DB.DisplayUnitType.DUT_METERS: return(0.3048); case Autodesk.Revit.DB.DisplayUnitType.DUT_CENTIMETERS: return(30.48); case Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS: return(304.8); case Autodesk.Revit.DB.DisplayUnitType.DUT_METERS_CENTIMETERS: return(0.3048); default: return(1); } }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { string[] guidmain = value.Split(';'); List <Guid> guids = new List <Guid>(); for (int i = 0; i < guidmain.Length; i++) { Guid tempguid; if (!Guid.TryParse(guidmain[i].ToString(), out tempguid)) { return(null); } guids.Add(tempguid); } return(guids); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { string[] xyzmain = value.Split(';'); List <XYZ> xyzs = new List <XYZ>(); for (int i = 0; i < xyzmain.Length; i++) { if (!xyzmain[i].StartsWith("(")) { return(null); } if (!xyzmain[i].EndsWith(")")) { return(null); } xyzmain[i] = xyzmain[i].TrimStart('('); xyzmain[i] = xyzmain[i].TrimEnd(')'); string[] xyz = xyzmain[i].Split(','); if (xyz.Length != 3) { return(null); } double tempx; double tempy; double tempz; if (!double.TryParse(xyz[0], out tempx)) { return(null); } if (!double.TryParse(xyz[1], out tempy)) { return(null); } if (!double.TryParse(xyz[2], out tempz)) { return(null); } xyzs.Add(new XYZ(tempx, tempy, tempz)); } return(xyzs); }
/// <summary> /// DerivedUnitExpectedTypes constructor. /// </summary> public DerivedUnitExpectedTypes(UnitName unitName, UnitSymbolType unitSymbol) { UnitName = unitName; UnitSymbol = unitSymbol; }
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit) { return(value.ToString()); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { if (!value.StartsWith("(")) { return(null); } if (!value.EndsWith(")")) { return(null); } value = value.TrimStart('('); value = value.TrimEnd(')'); string[] uv = value.Split(','); if (uv.Length != 2) { return(null); } double tempu; double tempv; if (!double.TryParse(uv[0], out tempu)) { return(null); } if (!double.TryParse(uv[1], out tempv)) { return(null); } return(new UV(tempu, tempv)); }
public static Rhino.UnitSystem ToRhinoLengthUnits(this DB.DisplayUnitType value) => value.ToUnitSystem();
public override System.Collections.IList GetDataSource(string key, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.DisplayUnitType unitType) { return(base.GetDataSource(key, document, unitType)); }
/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="revit">An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view.</param> /// <param name="message">A message that can be set by the external application /// which will be displayed if a failure or cancellation is returned by /// the external command.</param> /// <param name="elements">A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation.</param> /// <returns>Return the status of the external command. /// A result of Succeeded means that the API external method functioned as expected. /// Cancelled can be used to signify that the user cancelled the external operation /// at some point. Failure should be returned if the application is unable to proceed with /// the operation.</returns> public Autodesk.Revit.UI.Result Execute(ExternalCommandData revit, ref String message, Autodesk.Revit.DB.ElementSet elements) { m_revit = revit; UnitType = m_revit.Application.ActiveUIDocument.Document.ProjectUnit.get_FormatOptions(Autodesk.Revit.DB.UnitType.UT_Length).Units; Transaction documentTransaction = new Transaction(revit.Application.ActiveUIDocument.Document, "Document"); documentTransaction.Start(); try { //Get every level by iterating through all elements systemLevelsDatum = new List<LevelsDataSource>(); FilteredElementCollector collector = new FilteredElementCollector(m_revit.Application.ActiveUIDocument.Document); ICollection<Element> collection = collector.OfClass(typeof(Level)).ToElements(); foreach (Element element in collection) { Level systemLevel = element as Level; LevelsDataSource levelsDataSourceRow = new LevelsDataSource(); levelsDataSourceRow.LevelIDValue = systemLevel.Id.IntegerValue; levelsDataSourceRow.Name = systemLevel.Name; Parameter elevationPara = systemLevel.get_Parameter(BuiltInParameter.LEVEL_ELEV); double temValue = Unit.CovertFromAPI(UnitType, elevationPara.AsDouble()); double temValue2 = double.Parse(temValue.ToString("#.0")); levelsDataSourceRow.Elevation = temValue2; systemLevelsDatum.Add(levelsDataSourceRow); } using (LevelsForm displayForm = new LevelsForm(this)) { displayForm.ShowDialog(); } } catch (Exception ex) { message = ex.Message; documentTransaction.RollBack(); return Autodesk.Revit.UI.Result.Failed; } documentTransaction.Commit(); return Autodesk.Revit.UI.Result.Succeeded; }
/// <summary> /// 将Revit内部值转换为由DisplayUnitType表示的值 /// </summary> /// <param name="to">Revit内部值</param> /// <param name="value">DisplayUnitType</param> /// <returns>返回由DisplayUnitType表示的值</returns> private static double ConvertFromAPI(Autodesk.Revit.DB.DisplayUnitType to, double value) { return(value *= ImperialDutRatio(to)); }
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit) { List <ElementId> elementids = value as List <ElementId>; string tempstring = ""; for (int i = 0; i < elementids.Count; i++) { tempstring += elementids[i].ToString(); tempstring += ";"; } if (tempstring.EndsWith(";")) { tempstring = tempstring.TrimEnd(';'); } return(tempstring); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { string[] elementidmain = value.Split(';'); List <ElementId> elementids = new List <ElementId>(); for (int i = 0; i < elementidmain.Length; i++) { int tempid; if (!int.TryParse(elementidmain[i].ToString(), out tempid)) { return(null); } ElementId eid = new ElementId(tempid); Element e = document.GetElement(eid); if (e == null) { return(null); } elementids.Add(eid); } return(elementids); }
/// <summary> /// Constructs a default IFCUnit of a specific type. /// </summary> /// <param name="unitType">The unit type.</param> /// <param name="unitSystem">The unit system.</param> /// <param name="unitName">The unit name.</param> /// <remarks>This is only intended to create a unit container for units that are necessary for the file, /// but are not found in the file. It should not be used for IfcUnit entities in the file.</remarks> public static IFCUnit ProcessIFCDefaultUnit(UnitType unitType, UnitSystem unitSystem, UnitName unitName, double? scaleFactor) { IFCUnit unit = new IFCUnit(); unit.UnitType = unitType; unit.UnitName = unitName; unit.UnitSystem = unitSystem; if (scaleFactor.HasValue) unit.ScaleFactor = scaleFactor.Value; unit.OffsetFactor = 0.0; return unit; }
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType) { return(value); }
public System.Collections.IList GetDataSource(string key, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.DisplayUnitType unitType) { return(null); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { if (!value.StartsWith("(")) { return(null); } if (!value.EndsWith(")")) { return(null); } value = value.TrimStart('('); value = value.TrimEnd(')'); string[] xyz = value.Split(','); if (xyz.Length != 3) { return(null); } double tempx; double tempy; double tempz; if (!double.TryParse(xyz[0], out tempx)) { return(null); } if (!double.TryParse(xyz[1], out tempy)) { return(null); } if (!double.TryParse(xyz[2], out tempz)) { return(null); } return(new XYZ(tempx, tempy, tempz)); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { Guid tempguid; if (!Guid.TryParse(value, out tempguid)) { return(null); } return(new Guid(value)); }
/// <summary> /// Constructs a default IFCUnit of a specific type. /// </summary> /// <param name="unitType">The unit type.</param> /// <param name="unitSystem">The unit system.</param> /// <param name="unitName">The unit name.</param> /// <remarks>This is only intended to create a unit container for units that are necessary for the file, /// but are not found in the file. It should not be used for IfcUnit entities in the file.</remarks> public static IFCUnit ProcessIFCDefaultUnit(UnitType unitType, UnitSystem unitSystem, UnitName unitName, double?scaleFactor) { IFCUnit unit = new IFCUnit(); unit.UnitType = unitType; unit.UnitName = unitName; unit.UnitSystem = unitSystem; if (scaleFactor.HasValue) { unit.ScaleFactor = scaleFactor.Value; } unit.OffsetFactor = 0.0; return(unit); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { int tempid; if (!int.TryParse(value, out tempid)) { return(null); } ElementId eid = new ElementId(tempid); Element e = document.GetElement(eid); if (e == null) { return(null); } return(eid); }
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType) { string[] uvmain = value.Split(';'); List <UV> uvs = new List <UV>(); for (int i = 0; i < uvmain.Length; i++) { if (!uvmain[i].StartsWith("(")) { return(null); } if (!uvmain[i].EndsWith(")")) { return(null); } uvmain[i] = uvmain[i].TrimStart('('); uvmain[i] = uvmain[i].TrimEnd(')'); string[] uv = uvmain[i].Split(','); if (uv.Length != 2) { return(null); } double tempu; double tempv; if (!double.TryParse(uv[0], out tempu)) { return(null); } if (!double.TryParse(uv[1], out tempv)) { return(null); } uvs.Add(new UV(tempu, tempv)); } return(uvs); }
/// <summary> /// 将由DisplayUnitType表示的值转换为Revit内部值 /// </summary> /// <param name="value">Revit内部值</param> /// <param name="from">DisplayUnitType </param> /// <returns> </returns> private static double ConvertToAPI(double value, Autodesk.Revit.DB.DisplayUnitType from) { return(value /= ImperialDutRatio(from)); }