public Align2D(IVertexSource objectToAlign, Side2D boundingFacesToAlign, IVertexSource objectToAlignTo, Side2D boundingFacesToAlignTo, double offsetX = 0, double offsetY = 0, string name = "") : this(objectToAlign, boundingFacesToAlign, GetPositionToAlignTo(objectToAlignTo, boundingFacesToAlignTo, new Vector2(offsetX, offsetY)), name) { if (objectToAlign == objectToAlignTo) { throw new Exception("You cannot align an object to itself."); } }
private static bool IsSet(Side2D variableToCheck, Side2D faceToCheckFor, Side2D 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 static Vector2 GetPositionToAlignTo(IVertexSource objectToAlignTo, Side2D boundingFacesToAlignTo, Vector2 extraOffset) { Vector2 positionToAlignTo = new Vector2(); if (IsSet(boundingFacesToAlignTo, Side2D.Left, Side2D.Right)) { positionToAlignTo.X = objectToAlignTo.GetBounds().Left; } if (IsSet(boundingFacesToAlignTo, Side2D.Right, Side2D.Left)) { positionToAlignTo.X = objectToAlignTo.GetBounds().Right; } if (IsSet(boundingFacesToAlignTo, Side2D.Bottom, Side2D.Top)) { positionToAlignTo.Y = objectToAlignTo.GetBounds().Bottom; } if (IsSet(boundingFacesToAlignTo, Side2D.Top, Side2D.Bottom)) { positionToAlignTo.Y = objectToAlignTo.GetBounds().Top; } return(positionToAlignTo + extraOffset); }
public Align2D(IVertexSource item, Side2D boundingFacesToAlign, Vector2 positionToAlignTo, string name = "") { var bounds = item.GetBounds(); if (IsSet(boundingFacesToAlign, Side2D.Left, Side2D.Right)) { positionToAlignTo.X = positionToAlignTo.X - bounds.Left; } if (IsSet(boundingFacesToAlign, Side2D.Right, Side2D.Left)) { positionToAlignTo.X = positionToAlignTo.X - bounds.Left - (bounds.Right - bounds.Left); } if (IsSet(boundingFacesToAlign, Side2D.Bottom, Side2D.Top)) { positionToAlignTo.Y = positionToAlignTo.Y - bounds.Bottom; } if (IsSet(boundingFacesToAlign, Side2D.Top, Side2D.Bottom)) { positionToAlignTo.Y = positionToAlignTo.Y - bounds.Bottom - (bounds.Top - bounds.Bottom); } Transform = Affine.NewTranslation(positionToAlignTo); VertexSource = item; }
public Align2D(IVertexSource objectToAlign, Side2D boundingFacesToAlign, Vector2 positionToAlignTo, double offsetX, double offsetY, string name = "") : this(objectToAlign, boundingFacesToAlign, positionToAlignTo + new Vector2(offsetX, offsetY), name) { }
public Align2D(IVertexSource objectToAlign, Side2D boundingFacesToAlign, double positionToAlignToX = 0, double positionToAlignToY = 0, string name = "") : this(objectToAlign, boundingFacesToAlign, new Vector2(positionToAlignToX, positionToAlignToY), name) { }