/// <summary> /// Creates IfcMappedItem object. /// </summary> /// <param name="file"> /// The IFC file. /// </param> /// <param name="repMap"> /// The handle to be mapped. /// </param> /// <param name="orig"> /// The orig for mapping transformation. /// </param> /// <returns> /// The handle. /// </returns> public static IFCAnyHandle CreateDefaultMappedItem(IFCFile file, IFCAnyHandle repMap, XYZ orig) { IFCAnyHandle origin = file.CreateCartesianPoint(orig); IFCMeasureValue scale = IFCMeasureValue.Create(1.0); IFCAnyHandle mappingTarget = file.CreateCartesianTransformationOperator3D(IFCAnyHandle.Create(), IFCAnyHandle.Create(), origin, scale, IFCAnyHandle.Create()); return file.CreateMappedItem(repMap, mappingTarget); }
/// <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 = file.CreateCartesianPoint(cleanMeasure); return pointHandle; }