/// <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 direction = null; IFCAnyHandle refDirection = null; IFCAnyHandle location = null; 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); direction = CreateDirection(file, axisPts); } if (exportzDirectionAndxDirection) { IList <double> axisPts = new List <double>(); axisPts.Add(xDirection.X); axisPts.Add(xDirection.Y); axisPts.Add(xDirection.Z); refDirection = CreateDirection(file, axisPts); } return(IFCInstanceExporter.CreateAxis2Placement3D(file, location, direction, refDirection)); }
private static IFCAnyHandle CopyRailingHandle(ExporterIFC exporterIFC, Element elem, ElementId catId, IFCAnyHandle origLocalPlacement, IFCAnyHandle origRailing) { IFCFile file = exporterIFC.GetFile(); IFCAnyHandle origRailingObjectPlacement = IFCAnyHandleUtil.GetInstanceAttribute(origRailing, "ObjectPlacement"); IFCAnyHandle railingRelativePlacement = IFCAnyHandleUtil.GetInstanceAttribute(origRailingObjectPlacement, "RelativePlacement"); IFCAnyHandle parentRelativePlacement = IFCAnyHandleUtil.GetInstanceAttribute(origLocalPlacement, "RelativePlacement"); IFCAnyHandle newRelativePlacement = null; IFCAnyHandle parentRelativeOrig = IFCAnyHandleUtil.GetInstanceAttribute(parentRelativePlacement, "Location"); if (!IFCAnyHandleUtil.IsNullOrHasNoValue(parentRelativeOrig)) { IList <double> parentVec = IFCAnyHandleUtil.GetCoordinates(parentRelativeOrig); IFCAnyHandle railingRelativeOrig = IFCAnyHandleUtil.GetInstanceAttribute(railingRelativePlacement, "Location"); if (!IFCAnyHandleUtil.IsNullOrHasNoValue(railingRelativeOrig)) { IList <double> railingVec = IFCAnyHandleUtil.GetCoordinates(railingRelativeOrig); IList <double> newMeasure = new List <double>(); newMeasure.Add(railingVec[0] - parentVec[0]); newMeasure.Add(railingVec[1] - parentVec[1]); newMeasure.Add(railingVec[2]); IFCAnyHandle locPtHnd = ExporterUtil.CreateCartesianPoint(file, newMeasure); newRelativePlacement = IFCInstanceExporter.CreateAxis2Placement3D(file, locPtHnd, null, null); } else { IList <double> railingMeasure = new List <double>(); railingMeasure.Add(-parentVec[0]); railingMeasure.Add(-parentVec[1]); railingMeasure.Add(0.0); IFCAnyHandle locPtHnd = ExporterUtil.CreateCartesianPoint(file, railingMeasure); newRelativePlacement = IFCInstanceExporter.CreateAxis2Placement3D(file, locPtHnd, null, null); } } IFCAnyHandle newLocalPlacement = IFCInstanceExporter.CreateLocalPlacement(file, origLocalPlacement, newRelativePlacement); IFCAnyHandle origRailingRep = IFCAnyHandleUtil.GetInstanceAttribute(origRailing, "Representation"); IFCAnyHandle newProdRep = ExporterUtil.CopyProductDefinitionShape(exporterIFC, elem, catId, origRailingRep); string ifcEnumTypeAsString = IFCAnyHandleUtil.GetEnumerationAttribute(origRailing, "PredefinedType"); IFCRailingType railingType = GetIFCRailingTypeFromString(ifcEnumTypeAsString); string copyGUID = GUIDUtil.CreateGUID(); IFCAnyHandle copyOwnerHistory = IFCAnyHandleUtil.GetInstanceAttribute(origRailing, "OwnerHistory"); string copyName = IFCAnyHandleUtil.GetStringAttribute(origRailing, "Name"); string copyDescription = IFCAnyHandleUtil.GetStringAttribute(origRailing, "Description"); string copyObjectType = IFCAnyHandleUtil.GetStringAttribute(origRailing, "ObjectType"); string copyElemId = IFCAnyHandleUtil.GetStringAttribute(origRailing, "Tag"); return(IFCInstanceExporter.CreateRailing(file, copyGUID, copyOwnerHistory, copyName, copyDescription, copyObjectType, newLocalPlacement, newProdRep, copyElemId, railingType)); }
/// <summary> /// Creates an IfcAxis2Placement3D object. /// </summary> /// <param name="file">The file.</param> /// <param name="location">The origin. If null, it will use the global origin handle.</param> /// <param name="axis">The Z direction.</param> /// <param name="refDirection">The X direction.</param> /// <returns>the handle.</returns> public static IFCAnyHandle CreateAxis2Placement3D(IFCFile file, XYZ location, XYZ axis, XYZ refDirection) { IFCAnyHandle locationHandle = null; if (location != null) { List <double> measure = new List <double>(); measure.Add(location.X); measure.Add(location.Y); measure.Add(location.Z); locationHandle = CreateCartesianPoint(file, measure); } else { locationHandle = ExporterIFCUtils.GetGlobal3DOriginHandle(); } bool exportDirAndRef = (axis != null && refDirection != null && (!MathUtil.IsAlmostEqual(axis[2], 1.0) || !MathUtil.IsAlmostEqual(refDirection[0], 1.0))); if ((axis != null) ^ (refDirection != null)) { exportDirAndRef = false; } IFCAnyHandle axisHandle = null; if (exportDirAndRef) { List <double> measure = new List <double>(); measure.Add(axis.X); measure.Add(axis.Y); measure.Add(axis.Z); axisHandle = CreateDirection(file, measure); } IFCAnyHandle refDirectionHandle = null; if (exportDirAndRef) { List <double> measure = new List <double>(); measure.Add(refDirection.X); measure.Add(refDirection.Y); measure.Add(refDirection.Z); refDirectionHandle = CreateDirection(file, measure); } return(IFCInstanceExporter.CreateAxis2Placement3D(file, locationHandle, axisHandle, refDirectionHandle)); }