Beispiel #1
0
        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);
        }
Beispiel #2
0
        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());
        }
Beispiel #3
0
 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.");
     }
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 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)
 {
 }
Beispiel #6
0
 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)
 {
 }