public static Vector3 GetPositionToAlignTo(IObject3D objectToAlignTo, FaceAlign boundingFacesToAlignTo, Vector3 extraOffset) { Vector3 positionToAlignTo = new Vector3(); if (IsSet(boundingFacesToAlignTo, FaceAlign.Left, FaceAlign.Right)) { positionToAlignTo.X = objectToAlignTo.GetAxisAlignedBoundingBox().minXYZ.X; } if (IsSet(boundingFacesToAlignTo, FaceAlign.Right, FaceAlign.Left)) { positionToAlignTo.X = objectToAlignTo.GetAxisAlignedBoundingBox().maxXYZ.X; } if (IsSet(boundingFacesToAlignTo, FaceAlign.Front, FaceAlign.Back)) { positionToAlignTo.Y = objectToAlignTo.GetAxisAlignedBoundingBox().minXYZ.Y; } if (IsSet(boundingFacesToAlignTo, FaceAlign.Back, FaceAlign.Front)) { positionToAlignTo.Y = objectToAlignTo.GetAxisAlignedBoundingBox().maxXYZ.Y; } if (IsSet(boundingFacesToAlignTo, FaceAlign.Bottom, FaceAlign.Top)) { positionToAlignTo.Z = objectToAlignTo.GetAxisAlignedBoundingBox().minXYZ.Z; } if (IsSet(boundingFacesToAlignTo, FaceAlign.Top, FaceAlign.Bottom)) { positionToAlignTo.Z = objectToAlignTo.GetAxisAlignedBoundingBox().maxXYZ.Z; } return(positionToAlignTo + extraOffset); }
public AlignObject3D(IObject3D item, FaceAlign boundingFacesToAlign, Vector3 positionToAlignTo, string name = "") { AxisAlignedBoundingBox bounds = item.GetAxisAlignedBoundingBox(); if (IsSet(boundingFacesToAlign, FaceAlign.Left, FaceAlign.Right)) { positionToAlignTo.X = positionToAlignTo.X - bounds.minXYZ.X; } if (IsSet(boundingFacesToAlign, FaceAlign.Right, FaceAlign.Left)) { positionToAlignTo.X = positionToAlignTo.X - bounds.minXYZ.X - (bounds.maxXYZ.X - bounds.minXYZ.X); } if (IsSet(boundingFacesToAlign, FaceAlign.Front, FaceAlign.Back)) { positionToAlignTo.Y = positionToAlignTo.Y - bounds.minXYZ.Y; } if (IsSet(boundingFacesToAlign, FaceAlign.Back, FaceAlign.Front)) { positionToAlignTo.Y = positionToAlignTo.Y - bounds.minXYZ.Y - (bounds.maxXYZ.Y - bounds.minXYZ.Y); } if (IsSet(boundingFacesToAlign, FaceAlign.Bottom, FaceAlign.Top)) { positionToAlignTo.Z = positionToAlignTo.Z - bounds.minXYZ.Z; } if (IsSet(boundingFacesToAlign, FaceAlign.Top, FaceAlign.Bottom)) { positionToAlignTo.Z = positionToAlignTo.Z - bounds.minXYZ.Z - (bounds.maxXYZ.Z - bounds.minXYZ.Z); } Matrix *= Matrix4X4.CreateTranslation(positionToAlignTo); Children.Add(item.Clone()); }
public AlignObject3D(IObject3D objectToAlign, FaceAlign boundingFacesToAlign, IObject3D objectToAlignTo, FaceAlign boundingFacesToAlignTo, double offsetX = 0, double offsetY = 0, double offsetZ = 0, string name = "") : this(objectToAlign, boundingFacesToAlign, GetPositionToAlignTo(objectToAlignTo, boundingFacesToAlignTo, new Vector3(offsetX, offsetY, offsetZ)), name) { if (objectToAlign == objectToAlignTo) { throw new Exception("You cannot align an object to itself."); } }
private static bool IsSet(FaceAlign variableToCheck, FaceAlign faceToCheckFor, FaceAlign faceToAssertNot) { if ((variableToCheck & faceToCheckFor) != 0) { if ((variableToCheck & faceToAssertNot) != 0) { throw new Exception("You cannot have both " + faceToCheckFor.ToString() + " and " + faceToAssertNot.ToString() + " set when calling Align. The are mutually exclusive."); } return(true); } return(false); }
public AlignObject3D(IObject3D objectToAlign, FaceAlign boundingFacesToAlign, Vector3 positionToAlignTo, double offsetX, double offsetY, double offsetZ, string name = "") : this(objectToAlign, boundingFacesToAlign, positionToAlignTo + new Vector3(offsetX, offsetY, offsetZ), name) { }
public AlignObject3D(IObject3D objectToAlign, FaceAlign boundingFacesToAlign, double positionToAlignToX = 0, double positionToAlignToY = 0, double positionToAlignToZ = 0, string name = "") : this(objectToAlign, boundingFacesToAlign, new Vector3(positionToAlignToX, positionToAlignToY, positionToAlignToZ), name) { }