/// <summary> /// Creates IfcAxis2Placement3D object. /// </summary> /// <param name="file"> /// The IFC file. /// </param> /// <param name="origin"> /// The origin. /// </param> /// <param name="zDirection"> /// The Z direction. /// </param> /// <param name="xDirection"> /// The X direction. /// </param> /// <returns> /// The handle. /// </returns> public static IFCAnyHandle CreateAxis(IFCFile file, XYZ origin, XYZ zDirection, XYZ xDirection) { IFCAnyHandle directionOpt = IFCAnyHandle.Create(); IFCAnyHandle refOpt = IFCAnyHandle.Create(); IFCAnyHandle location = IFCAnyHandle.Create(); if (origin != null) { IList<double> measure = new List<double>(); measure.Add(origin.X); measure.Add(origin.Y); measure.Add(origin.Z); location = CreateCartesianPoint(file, measure); } else { location = ExporterIFCUtils.GetGlobal3DOriginHandle(); } bool exportzDirectionAndxDirection = (zDirection != null && xDirection != null && (!MathUtil.IsAlmostEqual(zDirection[2], 1.0) || !MathUtil.IsAlmostEqual(xDirection[0], 1.0))); if (exportzDirectionAndxDirection) { IList<double> axisPts = new List<double>(); axisPts.Add(zDirection.X); axisPts.Add(zDirection.Y); axisPts.Add(zDirection.Z); directionOpt = CreateDirection(file, axisPts); } if (exportzDirectionAndxDirection) { IList<double> axisPts = new List<double>(); axisPts.Add(xDirection.X); axisPts.Add(xDirection.Y); axisPts.Add(xDirection.Z); refOpt = CreateDirection(file, axisPts); } return file.CreateAxis2Placement3D(location, directionOpt, refOpt); }