protected override void OnMouseMove(DrawingMark sender, MouseEventArgs e)
        {
            //0   1
            //  4
            //2   3
            if (sender.Parent == null)
            {
                return;
            }
            switch (sender.Index)
            {
            case 0:
                ptStart.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                ptStart.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
                break;

            case 1:
                ptControl1.Y = designer.Marks[1].Y - Page.AutoScrollPosition.Y;
                ptControl1.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                break;

            case 2:
                ptControl2.Y = designer.Marks[2].Y - Page.AutoScrollPosition.Y;
                ptControl2.X = designer.Marks[2].X - Page.AutoScrollPosition.X;
                break;

            case 3:
                ptEnd.Y = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                ptEnd.X = designer.Marks[3].X - Page.AutoScrollPosition.X;
                break;

            case 4:
                int dx = designer.Marks[4].X - x0 - Page.AutoScrollPosition.X;
                int dy = designer.Marks[4].Y - y0 - Page.AutoScrollPosition.Y;
                for (int i = 0; i < 4; i++)
                {
                    designer.Marks[i].X += dx;
                    designer.Marks[i].Y += dy;
                }
                ptStart.Y    = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                ptStart.X    = designer.Marks[0].X - Page.AutoScrollPosition.X;
                ptControl1.Y = designer.Marks[1].Y - Page.AutoScrollPosition.Y;
                ptControl1.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                ptControl2.Y = designer.Marks[2].Y - Page.AutoScrollPosition.Y;
                ptControl2.X = designer.Marks[2].X - Page.AutoScrollPosition.X;
                ptEnd.Y      = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                ptEnd.X      = designer.Marks[3].X - Page.AutoScrollPosition.X;
                x0           = (ptStart.X + ptEnd.X) / 2;
                y0           = (ptStart.Y + ptEnd.Y) / 2;
                break;
            }
            if (sender.Index != 4)
            {
                x0 = (ptStart.X + ptEnd.X) / 2;
                y0 = (ptStart.Y + ptEnd.Y) / 2;
                designer.Marks[4].X = x0 + Page.AutoScrollPosition.X;
                designer.Marks[4].Y = y0 + Page.AutoScrollPosition.Y;
            }
            sender.Parent.Invalidate();
        }
 protected override void OnMouseMove(DrawingMark sender, MouseEventArgs e)
 {
     if (sender.Index == 0)
     {
         p1.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
         p1.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
         designer.Marks[1].X = (p1.X + p2.X) / 2 + Page.AutoScrollPosition.X;
         designer.Marks[1].Y = (p1.Y + p2.Y) / 2 + Page.AutoScrollPosition.Y;
     }
     else if (sender.Index == 1)
     {
         /*calculate the increases of x and y: dx, dy
          * new line: (x10,y10) - (x20,y20). new center: (x0,y0)
          * New center already know. Find (x10,y10) and (x20,y20)
          *	x0 = (x10 + X20)/2
          *      y0 = (y10 + y20)/2
          *      x1 + dx = x10
          *      y1 + dy = y10
          *      x2 + dx = x20
          *      y2 + dy = y20
          *      Calculate new points:
          *      x0 = (x1 + dx + x2 + dx)/2 = (x1 + x2)/2 + dx
          *      y0 = (y1 + dy + y2 + dy)/2 = (y1 + y2)/2 + dy
          *      dx = x0 - (x1 + x2)/2
          *      dy = y0 - (y1 + y2)/2
          */
         int dx = designer.Marks[1].X - (designer.Marks[0].X + designer.Marks[2].X) / 2;
         int dy = designer.Marks[1].Y - (designer.Marks[0].Y + designer.Marks[2].Y) / 2;
         p1.X += dx;
         p1.Y += dy;
         p2.X += dx;
         p2.Y += dy;
         designer.Marks[0].X = p1.X + Page.AutoScrollPosition.X;
         designer.Marks[0].Y = p1.Y + Page.AutoScrollPosition.Y;
         designer.Marks[2].X = p2.X + Page.AutoScrollPosition.X;
         designer.Marks[2].Y = p2.Y + Page.AutoScrollPosition.Y;
     }
     else if (sender.Index == 2)
     {
         p2.X = designer.Marks[2].X - Page.AutoScrollPosition.X;
         p2.Y = designer.Marks[2].Y - Page.AutoScrollPosition.Y;
         designer.Marks[1].X = (p1.X + p2.X) / 2 + Page.AutoScrollPosition.X;
         designer.Marks[1].Y = (p1.Y + p2.Y) / 2 + Page.AutoScrollPosition.Y;
     }
     calculateAttr();
     sender.Parent.Invalidate();
 }
        protected override void OnMouseMove(DrawingMark sender, MouseEventArgs e)
        {
            if (sender.Parent == null)
            {
                return;
            }
            Point ap = this.GetAbsolutePosition();
            int   dx = ap.X - pos.X;
            int   dy = ap.Y - pos.Y;

            switch (sender.Index)
            {
            case 0:
                double xo = designer.Marks[0].X - _size.Width / 2;
                double yo = designer.Marks[0].Y - _size.Height / 2;
                pos.X = (int)Math.Round(xo - Page.AutoScrollPosition.X, 0) - dx;
                pos.Y = (int)Math.Round(yo - Page.AutoScrollPosition.Y, 0) - dy;
                break;

            case 1:
                int x0 = designer.Marks[1].X - designer.Marks[0].X;
                int y0 = designer.Marks[1].Y - designer.Marks[0].Y;
                if (x0 != 0 || y0 != 0)
                {
                    if (x0 >= 0 && y0 >= 0)
                    {
                        if (y0 == 0)
                        {
                            Angle = 0;
                        }
                        else if (x0 == 0)
                        {
                            Angle = 90;
                        }
                        else
                        {
                            Angle = Math.Atan((double)y0 / (double)x0) * 180.0 / Math.PI;
                        }
                    }
                    else if (x0 < 0 && y0 >= 0)
                    {
                        if (y0 == 0)
                        {
                            Angle = 180;
                        }
                        else
                        {
                            Angle = 180 - Math.Atan((double)y0 / (-(double)x0)) * 180.0 / Math.PI;
                        }
                    }
                    else if (x0 >= 0 && y0 < 0)
                    {
                        y0    = -y0;
                        Angle = -Math.Atan((double)y0 / (double)x0) * 180.0 / Math.PI;
                    }
                    else
                    {
                        Angle = 180 + Math.Atan((double)y0 / (double)x0) * 180.0 / Math.PI;
                    }
                }
                break;
            }
            if (sender.Index != 1)
            {
                double angle = (Angle / 180) * Math.PI;
                designer.Marks[1].X = designer.Marks[0].X + (int)((_size.Width / 2.0) * Math.Cos(angle));
                designer.Marks[1].Y = designer.Marks[0].Y + (int)((_size.Width / 2.0) * Math.Sin(angle));
            }
            sender.Parent.Invalidate(Bounds);
        }
Пример #4
0
        protected override void OnMouseMove(DrawingMark sender, MouseEventArgs e)
        {
            //0   1
            //  4
            //2   3
            if (sender.Parent == null)
            {
                return;
            }
            switch (sender.Index)
            {
            case 0:
                designer.Marks[1].Y = designer.Marks[0].Y;
                designer.Marks[2].X = designer.Marks[0].X;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                center.X            = designer.Marks[4].X - Page.AutoScrollPosition.X;
                center.Y            = designer.Marks[4].Y - Page.AutoScrollPosition.Y;
                if (designer.Marks[0].X > designer.Marks[4].X)
                {
                    radius = designer.Marks[0].X - designer.Marks[4].X;
                }
                else
                {
                    radius = designer.Marks[4].X - designer.Marks[0].X;
                }
                break;

            case 1:
                designer.Marks[0].Y = designer.Marks[1].Y;
                designer.Marks[3].X = designer.Marks[1].X;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                center.X            = designer.Marks[4].X - Page.AutoScrollPosition.X;
                center.Y            = designer.Marks[4].Y - Page.AutoScrollPosition.Y;
                if (designer.Marks[0].X > designer.Marks[4].X)
                {
                    radius = designer.Marks[0].X - designer.Marks[4].X;
                }
                else
                {
                    radius = designer.Marks[4].X - designer.Marks[0].X;
                }
                break;

            case 2:
                designer.Marks[0].X = designer.Marks[2].X;
                designer.Marks[3].Y = designer.Marks[2].Y;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                center.X            = designer.Marks[4].X - Page.AutoScrollPosition.X;
                center.Y            = designer.Marks[4].Y - Page.AutoScrollPosition.Y;
                if (designer.Marks[0].X > designer.Marks[4].X)
                {
                    radius = designer.Marks[0].X - designer.Marks[4].X;
                }
                else
                {
                    radius = designer.Marks[4].X - designer.Marks[0].X;
                }
                break;

            case 3:
                designer.Marks[1].X = designer.Marks[3].X;
                designer.Marks[2].Y = designer.Marks[3].Y;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                center.X            = designer.Marks[4].X - Page.AutoScrollPosition.X;
                center.Y            = designer.Marks[4].Y - Page.AutoScrollPosition.Y;
                if (designer.Marks[0].X > designer.Marks[4].X)
                {
                    radius = designer.Marks[0].X - designer.Marks[4].X;
                }
                else
                {
                    radius = designer.Marks[4].X - designer.Marks[0].X;
                }
                break;

            case 4:
                designer.Marks[0].X = designer.Marks[4].X - radius;
                designer.Marks[0].Y = designer.Marks[4].Y - radius;
                designer.Marks[1].X = designer.Marks[4].X + radius;
                designer.Marks[1].Y = designer.Marks[4].Y - radius;
                designer.Marks[2].X = designer.Marks[4].X - radius;
                designer.Marks[2].Y = designer.Marks[4].Y + radius;
                designer.Marks[3].X = designer.Marks[4].X + radius;
                designer.Marks[3].Y = designer.Marks[4].Y + radius;
                center.X            = designer.Marks[4].X - Page.AutoScrollPosition.X;
                center.Y            = designer.Marks[4].Y - Page.AutoScrollPosition.Y;
                break;
            }
            sender.Parent.Invalidate();
        }
 protected override void OnMouseMove(DrawingMark sender, MouseEventArgs e)
 {
     if (sender.Parent == null || pts == null)
     {
         return;
     }
     if (sender.Index == 0)
     {
         //move
         double dx = designer.Marks[0].X - x0 - Page.AutoScrollPosition.X;
         double dy = designer.Marks[0].Y - y0 - Page.AutoScrollPosition.Y;
         for (int i = 0; i < pts.Length; i++)
         {
             pts[i].X += (int)dx;
             pts[i].Y += (int)dy;
             designer.Marks[i + nBaseIndex].X = pts[i].X + Page.AutoScrollPosition.X;
             designer.Marks[i + nBaseIndex].Y = pts[i].Y + Page.AutoScrollPosition.Y;
         }
         designer.Marks[1].X += (int)dx;
         designer.Marks[1].Y += (int)dy;
         x0 = designer.Marks[0].X - Page.AutoScrollPosition.X;
         y0 = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
         calculateBrounds();
     }
     else if (sender.Index == 1)
     {
         //set rotate angle
         double dx = designer.Marks[1].X - designer.Marks[0].X;
         double dy = designer.Marks[1].Y - designer.Marks[0].Y;
         double dd = 0;
         if (Math.Abs(dx) < 0.0001)
         {
             if (dy > 0)
             {
                 dd = 90;
             }
             else
             {
                 dd = 270;
             }
         }
         else
         {
             dd = (Math.Atan(Math.Abs(dy / dx)) / Math.PI) * 180.0;
             if (dx > 0)
             {
                 if (dy < 0)
                 {
                     dd = 360 - dd;
                 }
             }
             else
             {
                 if (dy > 0)
                 {
                     dd = 180 - dd;
                 }
                 else
                 {
                     dd = 180 + dd;
                 }
             }
         }
         if (Angle != dd)
         {
             double angle = dd - Angle;
             nMinX = 20000;
             nMaxX = 0;
             nMinY = 20000;
             nMaxY = 0;
             //
             //angle = (angle/180)*Math.PI;
             double xc = designer.Marks[0].X;
             double yc = designer.Marks[0].Y;
             double xo;
             double yo;
             if (pts != null)
             {
                 for (int i = 0; i < pts.Length; i++)
                 {
                     xo = designer.Marks[i + nBaseIndex].X;
                     yo = designer.Marks[i + nBaseIndex].Y;
                     DrawingItem.Rotate(xo, yo, xc, yc, -angle, out xo, out yo);
                     designer.Marks[i + nBaseIndex].X = (int)Math.Round(xo, 0);
                     designer.Marks[i + nBaseIndex].Y = (int)Math.Round(yo, 0);
                     pts[i].X = (int)Math.Round(xo - Page.AutoScrollPosition.X, 0);
                     pts[i].Y = (int)Math.Round(yo - Page.AutoScrollPosition.Y, 0);
                     if (nMinX > pts[i].X)
                     {
                         nMinX = pts[i].X;
                     }
                     if (nMaxX < pts[i].X)
                     {
                         nMaxX = pts[i].X;
                     }
                     if (nMinY > pts[i].Y)
                     {
                         nMinY = pts[i].Y;
                     }
                     if (nMaxY < pts[i].Y)
                     {
                         nMaxY = pts[i].Y;
                     }
                 }
             }
             Angle = dd;
         }
     }
     else
     {
         //drag corner point
         pts[sender.Index - nBaseIndex].X = designer.Marks[sender.Index].X - Page.AutoScrollPosition.X;
         pts[sender.Index - nBaseIndex].Y = designer.Marks[sender.Index].Y - Page.AutoScrollPosition.Y;
         calculateBrounds();
     }
     if (sender.Index >= nBaseIndex)
     {
         x0 = 0;
         y0 = 0;
         for (int i = 0; i < pts.Length; i++)
         {
             x0 += pts[i].X;
             y0 += pts[i].Y;
         }
         x0 /= pts.Length;
         y0 /= pts.Length;
         designer.Marks[0].X = x0 + Page.AutoScrollPosition.X;
         designer.Marks[0].Y = y0 + Page.AutoScrollPosition.Y;
         calculateBrounds();
     }
     sender.Parent.Invalidate(Bounds);
 }
        protected override void OnMouseMove(DrawingMark sender, MouseEventArgs e)
        {
            //0   1
            //  4
            //2   3
            if (sender.Parent == null)
            {
                return;
            }
            switch (sender.Index)
            {
            case 0:
                designer.Marks[1].Y = designer.Marks[0].Y;
                designer.Marks[2].X = designer.Marks[0].X;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                if (designer.Marks[0].X > designer.Marks[1].X)
                {
                    rc.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                }
                else
                {
                    rc.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
                }
                if (designer.Marks[0].Y > designer.Marks[3].Y)
                {
                    rc.Y = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                }
                else
                {
                    rc.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                }
                rc.Width  = Math.Abs(designer.Marks[0].X - designer.Marks[1].X);
                rc.Height = Math.Abs(designer.Marks[0].Y - designer.Marks[2].Y);
                break;

            case 1:
                designer.Marks[0].Y = designer.Marks[1].Y;
                designer.Marks[3].X = designer.Marks[1].X;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                if (designer.Marks[0].X > designer.Marks[1].X)
                {
                    rc.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                }
                else
                {
                    rc.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
                }
                if (designer.Marks[0].Y > designer.Marks[3].Y)
                {
                    rc.Y = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                }
                else
                {
                    rc.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                }
                rc.Width  = Math.Abs(designer.Marks[0].X - designer.Marks[1].X);
                rc.Height = Math.Abs(designer.Marks[0].Y - designer.Marks[2].Y);
                break;

            case 2:
                designer.Marks[3].Y = designer.Marks[2].Y;
                designer.Marks[0].X = designer.Marks[2].X;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                if (designer.Marks[0].X > designer.Marks[1].X)
                {
                    rc.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                }
                else
                {
                    rc.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
                }
                if (designer.Marks[0].Y > designer.Marks[3].Y)
                {
                    rc.Y = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                }
                else
                {
                    rc.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                }
                rc.Width  = Math.Abs(designer.Marks[0].X - designer.Marks[1].X);
                rc.Height = Math.Abs(designer.Marks[0].Y - designer.Marks[2].Y);
                break;

            case 3:
                designer.Marks[2].Y = designer.Marks[3].Y;
                designer.Marks[1].X = designer.Marks[3].X;
                designer.Marks[4].X = (designer.Marks[0].X + designer.Marks[3].X) / 2;
                designer.Marks[4].Y = (designer.Marks[0].Y + designer.Marks[3].Y) / 2;
                if (designer.Marks[0].X > designer.Marks[1].X)
                {
                    rc.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                }
                else
                {
                    rc.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
                }
                if (designer.Marks[0].Y > designer.Marks[3].Y)
                {
                    rc.Y = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                }
                else
                {
                    rc.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                }
                rc.Width  = Math.Abs(designer.Marks[0].X - designer.Marks[1].X);
                rc.Height = Math.Abs(designer.Marks[0].Y - designer.Marks[2].Y);
                break;

            case 4:
                designer.Marks[0].X = designer.Marks[4].X - rc.Width / 2;
                designer.Marks[0].Y = designer.Marks[4].Y - rc.Height / 2;
                designer.Marks[1].X = designer.Marks[4].X + rc.Width / 2;
                designer.Marks[1].Y = designer.Marks[4].Y - rc.Height / 2;
                designer.Marks[2].X = designer.Marks[4].X - rc.Width / 2;
                designer.Marks[2].Y = designer.Marks[4].Y + rc.Height / 2;
                designer.Marks[3].X = designer.Marks[4].X + rc.Width / 2;
                designer.Marks[3].Y = designer.Marks[4].Y + rc.Height / 2;
                if (designer.Marks[0].X > designer.Marks[1].X)
                {
                    rc.X = designer.Marks[1].X - Page.AutoScrollPosition.X;
                }
                else
                {
                    rc.X = designer.Marks[0].X - Page.AutoScrollPosition.X;
                }
                if (designer.Marks[0].Y > designer.Marks[3].Y)
                {
                    rc.Y = designer.Marks[3].Y - Page.AutoScrollPosition.Y;
                }
                else
                {
                    rc.Y = designer.Marks[0].Y - Page.AutoScrollPosition.Y;
                }
                break;
            }
            sender.Parent.Invalidate();
        }