PointF[] CalcBezier(int LeftsOffset, int RightsOffset, SideY SideY) { PointF[] Points = new PointF[4]; Points[0] = new PointF(0, LeftsOffset / 2f); Points[1] = CalcControlPoint(LeftsOffset, SideX.left); Points[2] = CalcControlPoint(RightsOffset, SideX.right); Points[3] = new PointF(1, RightsOffset / 2f); if (SideY == SideY.bottom) { for (int i = 0; i < Points.Length; i++) { Points[i].Y *= -1; Points[i].Y -= 1; } } return Points; }
public void ResizeY(SideY s = SideY.Up) { apprSideY = s; switch (s) { case SideY.Down: area.AxisY.Maximum = area.AxisY.Minimum + widthY; break; case SideY.Center: double center = (area.AxisY.Minimum + area.AxisY.Maximum) / 2; area.AxisY.Minimum = center - widthY / 2; area.AxisY.Maximum = center + widthY / 2; break; case SideY.Up: area.AxisY.Minimum = area.AxisY.Maximum - widthY; break; } centerY = area.AxisY.Minimum / 2 + area.AxisY.Maximum / 2; }
int Offset(Point Base, SideX SideX, SideY SideY) { int OffsetX = (SideX == SideX.left) ? 1 : -1; return SquareOffset(Base, OffsetX, SideY); }
int SquareOffset(Point Base, int OffsetX, SideY SideY) { if (IsTranslate(Base, OffsetX, (int)SideY * 1)) { if (IsTranslate(Base, OffsetX, (int)SideY * 2)) return 2; else return 1; } else if (IsTranslate(Base, OffsetX, 0)) return 0; else if (IsTranslate(Base, OffsetX, (int)SideY * -1)) return -1; else if (IsTranslate(Base, 0, (int)SideY * - 1)) return -2; else return 0; }
/// <summary> /// (перемещает этот объект в выбранном направлении) /// </summary> /// <param name="speed">(скорость перемещения)</param> /// <param name="typeX">(<see cref="SideX"/> направление по оси X)</param> /// <param name="typeY">(<see cref="SideY"/> направление по оси X)</param> public static void MoveAside(this ObjectSingle objectToMove, float speed, SideX typeX = SideX.middle, SideY typeY = SideY.middle) { int kX = 0; int kY = 0; switch (typeX) { case SideX.left: kX = -1; break; case SideX.middle: kX = 0; break; case SideX.right: kX = 1; break; } switch (typeY) { case SideY.up: kY = -1; break; case SideY.middle: kY = 0; break; case SideY.down: kY = 1; break; } Move(objectToMove, speed, kX.GridToX(), kY.GridToY()); }