Beispiel #1
0
        public override ShapePath.FlagsAndCommand vertex(out double x, out double y)
        {
            x = 0;
            y = 0;
            ShapePath.FlagsAndCommand cmd = ShapePath.FlagsAndCommand.CommandStop;
            switch (m_idx)
            {
            case 0:
            case 1:
            case 2:
                cmd = m_stroke.vertex(out x, out y);
                break;

            case 3:
            case 4:
            case 5:
            case 6:
                cmd = m_ellipse.vertex(out x, out y);
                break;
            }

            if (!ShapePath.is_stop(cmd))
            {
                ParentToChildTransform.transform(ref x, ref y);
            }
            return(cmd);
        }
Beispiel #2
0
        public override void OnMouseMove(MouseEventArgs mouseEvent)
        {
            double x = mouseEvent.X;
            double y = mouseEvent.Y;

            ParentToChildTransform.inverse_transform(ref x, ref y);
            m_poly.OnMouseMove(new MouseEventArgs(mouseEvent, x, y));
        }
Beispiel #3
0
        /*
         * public override bool InRect(double x, double y)
         * {
         *  return false;
         * }
         */

        public override void OnMouseDown(MouseEventArgs mouseEvent)
        {
            double x = mouseEvent.X;
            double y = mouseEvent.Y;

            ParentToChildTransform.inverse_transform(ref x, ref y);
            m_poly.OnMouseDown(new MouseEventArgs(mouseEvent, x, y));
            Invalidate();
            base.OnMouseDown(mouseEvent);
        }
        public override void OnMouseDown(MouseEventArgs mouseEvent)
        {
            bool ret = false;

            m_node = -1;
            m_edge = -1;
            double x = mouseEvent.X;
            double y = mouseEvent.Y;

            ParentToChildTransform.InverseTransform(ref x, ref y);
            for (int i = 0; i < m_num_points; i++)
            {
                //check if the testpoint is in the area of a control point.
                //if our control point is circle ... the computation is expansive than square shape control point***
                if (Math.Sqrt((x - GetXN(i)) * (x - GetXN(i)) + (y - GetYN(i)) * (y - GetYN(i))) < m_point_radius)
                {
                    m_dx   = x - GetXN(i);
                    m_dy   = y - GetYN(i);
                    m_node = (int)(i);
                    ret    = true;
                    break;
                }
            }

            //check if on edge
            if (!ret)
            {
                for (int i = 0; i < m_num_points; i++)
                {
                    if (CheckEdge(i, x, y))
                    {
                        m_dx   = x;
                        m_dy   = y;
                        m_edge = (int)(i);
                        ret    = true;
                        break;
                    }
                }
            }

            if (!ret)
            {
                if (IsPointInPolygon(x, y))
                {
                    m_dx   = x;
                    m_dy   = y;
                    m_node = (int)(m_num_points);
                    ret    = true;
                }
            }

            Invalidate();
            base.OnMouseDown(mouseEvent);
        }
Beispiel #5
0
        public override void OnMouseMove(MouseEventArgs mouseEvent)
        {
            double x = mouseEvent.X;
            double y = mouseEvent.Y;

            ParentToChildTransform.inverse_transform(ref x, ref y);
            m_poly.OnMouseMove(new MouseEventArgs(mouseEvent, x, y));
            Invalidate();
            BoundsRelativeToParent = m_poly.BoundsRelativeToParent;
            Invalidate();
            base.OnMouseMove(mouseEvent);
        }
Beispiel #6
0
        public override void OnMouseDown(MouseEventArgs mouseEvent)
        {
            bool ret = false;

            m_node = -1;
            m_edge = -1;
            double x = mouseEvent.X;
            double y = mouseEvent.Y;

            ParentToChildTransform.inverse_transform(ref x, ref y);
            for (int i = 0; i < m_num_points; i++)
            {
                if (Math.Sqrt((x - GetXN(i)) * (x - GetXN(i)) + (y - GetYN(i)) * (y - GetYN(i))) < m_point_radius)
                {
                    m_dx   = x - GetXN(i);
                    m_dy   = y - GetYN(i);
                    m_node = (int)(i);
                    ret    = true;
                    break;
                }
            }

            if (!ret)
            {
                for (int i = 0; i < m_num_points; i++)
                {
                    if (check_edge(i, x, y))
                    {
                        m_dx   = x;
                        m_dy   = y;
                        m_edge = (int)(i);
                        ret    = true;
                        break;
                    }
                }
            }

            if (!ret)
            {
                if (point_in_polygon(x, y))
                {
                    m_dx   = x;
                    m_dy   = y;
                    m_node = (int)(m_num_points);
                    ret    = true;
                }
            }

            Invalidate();
            base.OnMouseDown(mouseEvent);
        }
Beispiel #7
0
        public override ShapePath.FlagsAndCommand vertex(out double x, out double y)
        {
            ShapePath.FlagsAndCommand cmd = ShapePath.FlagsAndCommand.Stop;
            double r = m_point_radius;

            if (m_status == 0)
            {
                cmd = m_stroke.vertex(out x, out y);
                if (!ShapePath.is_stop(cmd))
                {
                    ParentToChildTransform.transform(ref x, ref y);
                    return(cmd);
                }
                if (m_node >= 0 && m_node == (int)(m_status))
                {
                    r *= 1.2;
                }
                m_ellipse.init(GetXN(m_status), GetYN(m_status), r, r, 32);
                ++m_status;
            }
            cmd = m_ellipse.vertex(out x, out y);
            if (!ShapePath.is_stop(cmd))
            {
                ParentToChildTransform.transform(ref x, ref y);
                return(cmd);
            }
            if (m_status >= m_num_points)
            {
                return(ShapePath.FlagsAndCommand.Stop);
            }
            if (m_node >= 0 && m_node == (int)(m_status))
            {
                r *= 1.2;
            }
            m_ellipse.init(GetXN(m_status), GetYN(m_status), r, r, 32);
            ++m_status;
            cmd = m_ellipse.vertex(out x, out y);
            if (!ShapePath.is_stop(cmd))
            {
                ParentToChildTransform.transform(ref x, ref y);
            }
            return(cmd);
        }
Beispiel #8
0
        public override void OnMouseMove(MouseEventArgs mouseEvent)
        {
            bool   handled = false;
            double dx;
            double dy;
            double x = mouseEvent.X;
            double y = mouseEvent.Y;

            ParentToChildTransform.inverse_transform(ref x, ref y);
            if (m_node == (int)(m_num_points))
            {
                dx = x - m_dx;
                dy = y - m_dy;
                for (int i = 0; i < m_num_points; i++)
                {
                    SetXN(i, GetXN(i) + dx);
                    SetYN(i, GetYN(i) + dy);
                }
                m_dx    = x;
                m_dy    = y;
                handled = true;
            }
            else
            {
                if (m_edge >= 0)
                {
                    int n1 = (int)m_edge;
                    int n2 = (n1 + m_num_points - 1) % m_num_points;
                    dx = x - m_dx;
                    dy = y - m_dy;
                    SetXN(n1, GetXN(n1) + dx);
                    SetYN(n1, GetYN(n1) + dy);
                    SetXN(n2, GetXN(n2) + dx);
                    SetYN(n2, GetYN(n2) + dy);
                    m_dx    = x;
                    m_dy    = y;
                    handled = true;
                }
                else
                {
                    if (m_node >= 0)
                    {
                        SetXN((int)m_node, x - m_dx);
                        SetYN((int)m_node, y - m_dy);
                        handled = true;
                    }
                }
            }

            // TODO: set bounds correctly and invalidate
            if (handled)
            {
                if (Changed != null)
                {
                    Changed(this, null);
                }
                RecalculateBounds();
            }

            base.OnMouseMove(mouseEvent);
        }