/// <summary> /// Creates IfcCartesianPoint object. /// </summary> /// <param name="file"> /// The IFC file. /// </param> /// <param name="measure"> /// The list of doubles to create the Cartesian point. /// </param> /// <returns> /// The handle. /// </returns> public static IFCAnyHandle CreateCartesianPoint(IFCFile file, IList <double> measure) { IList <double> cleanMeasure = new List <double>(); foreach (double value in measure) { double ceilMeasure = Math.Ceiling(value); double floorMeasure = Math.Floor(value); if (MathUtil.IsAlmostEqual(value, ceilMeasure)) { cleanMeasure.Add(ceilMeasure); } else if (MathUtil.IsAlmostEqual(value, floorMeasure)) { cleanMeasure.Add(floorMeasure); } else { cleanMeasure.Add(value); } } if (MathUtil.IsAlmostZero(cleanMeasure[0]) && MathUtil.IsAlmostZero(cleanMeasure[1])) { if (measure.Count == 2) { return(ExporterIFCUtils.GetGlobal2DOriginHandle()); } if (measure.Count == 3 && MathUtil.IsAlmostZero(cleanMeasure[2])) { return(ExporterIFCUtils.GetGlobal3DOriginHandle()); } } IFCAnyHandle pointHandle = IFCInstanceExporter.CreateCartesianPoint(file, cleanMeasure); return(pointHandle); }