Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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:");
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 /// <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);
     }
 }
Esempio n. 5
0
        /// <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);
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
 /// <summary>
 /// DerivedUnitExpectedTypes constructor.
 /// </summary>
 public DerivedUnitExpectedTypes(UnitName unitName, UnitSymbolType unitSymbol)
 {
     UnitName   = unitName;
     UnitSymbol = unitSymbol;
 }
Esempio n. 9
0
 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());
 }
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
 public static Rhino.UnitSystem ToRhinoLengthUnits(this DB.DisplayUnitType value) => value.ToUnitSystem();
Esempio n. 12
0
 public override System.Collections.IList GetDataSource(string key, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.DisplayUnitType unitType)
 {
     return(base.GetDataSource(key, document, unitType));
 }
Esempio n. 13
0
 /// <summary>
 /// DerivedUnitExpectedTypes constructor.
 /// </summary>
 public DerivedUnitExpectedTypes(UnitName unitName, UnitSymbolType unitSymbol)
 {
    UnitName = unitName;
    UnitSymbol = unitSymbol;
 }
Esempio n. 14
0
        /// <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;
        }
Esempio n. 15
0
 /// <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));
 }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        /// <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;
        }
Esempio n. 19
0
 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);
 }
Esempio n. 21
0
        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));
        }
Esempio n. 22
0
        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));
        }
Esempio n. 23
0
        /// <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);
        }
Esempio n. 24
0
        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);
        }
Esempio n. 25
0
        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);
        }
Esempio n. 26
0
 /// <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));
 }