Example #1
0
        /// <summary>
        /// 恾宍偺堏摦 (慄暘)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void ModifyFigure(FVIL.GDI.CFviGdiLineSegment figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            // 恾宍傪堏摦.
            if (info.iGripPosition < 0)
            {
                MoveFigure(figure, current, info, key);
                return;
            }

            // 儅僂僗墴壓帪偺忣曬偱嵗昗寁嶼偡傞.
            FVIL.Data.CFviPoint axis  = Math.Add(info.position, info.axis);
            FVIL.Data.CFviAngle angle = Math.Invert(info.angle);
            FVIL.Data.CFviPoint pos   = FVIL.Math.Rotate(current, axis, angle);

            // 恾宍偺曄宍.
            if (info.iGripPosition == 1)            // 巒揰.
            {
                figure.St = pos;
            }
            else if (info.iGripPosition == 2)       // 廔揰.
            {
                figure.Ed = pos;
            }

            // --- 婡幉偺曗惓.
            if (angle.Degree != 0.0)
            {
                figure.Axis = Math.Sub(axis, figure.Position);
            }
        }
Example #2
0
        /// <summary>
        /// 恾宍偺堏摦 (懭墌)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void ModifyFigure(FVIL.GDI.CFviGdiEllipse figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            // 恾宍傪堏摦.
            FVIL.GDI.RectPosition rectpos = (FVIL.GDI.RectPosition)info.iGripPosition;
            if ((rectpos & FVIL.GDI.RectPosition.ALL) == FVIL.GDI.RectPosition.ALL)
            {
                MoveFigure(figure, current, info, key);
                return;
            }

            // 儅僂僗墴壓帪偺忣曬偱嵗昗寁嶼偡傞.
            FVIL.Data.CFviPoint axis  = Math.Add(info.position, info.axis);
            FVIL.Data.CFviAngle angle = Math.Invert(info.angle);
            FVIL.Data.CFviPoint pos   = FVIL.Math.Rotate(current, axis, angle);

            // 恾宍偺曄宍.
            FVIL.Data.CFviRectangle clip = figure.GetClipRect();

            if ((rectpos & FVIL.GDI.RectPosition.Left) == FVIL.GDI.RectPosition.Left)
            {
                clip.Left = pos.X;
            }
            if ((rectpos & FVIL.GDI.RectPosition.Right) == FVIL.GDI.RectPosition.Right)
            {
                clip.Right = pos.X;
            }
            if ((rectpos & FVIL.GDI.RectPosition.Top) == FVIL.GDI.RectPosition.Top)
            {
                clip.Top = pos.Y;
            }
            if ((rectpos & FVIL.GDI.RectPosition.Bottom) == FVIL.GDI.RectPosition.Bottom)
            {
                clip.Bottom = pos.Y;
            }

            double radius_x = clip.Width / 2;
            double radius_y = clip.Height / 2;

            figure.X     = clip.X + radius_x;
            figure.Y     = clip.Y + radius_y;
            figure.AxisX = radius_x;
            figure.AxisY = radius_y;

            // --- 婡幉偺曗惓.
            if (angle.Degree != 0.0)
            {
                figure.Axis = Math.Sub(axis, figure.Position);
            }
        }
Example #3
0
        /// <summary>
        /// 恾宍偺堏摦 (斈梡)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void MoveFigure(FVIL.GDI.CFviGdiFigure figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            // 儃僞儞墴壓帪偐傜偺堏摦検傪寁嶼.
            FVIL.Data.CFviPoint move = Math.Sub(current, info.mouse);

            // 恾宍傪堏摦.
            figure.Position = Math.Add(info.position, move);
        }
Example #4
0
        /// <summary>
        /// 恾宍偺堏摦 (揰)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void ModifyFigure(FVIL.GDI.CFviGdiPoint figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            // 恾宍傪堏摦.
            if (info.iGripPosition != 0)
            {
                MoveFigure(figure, current, info, key);
                return;
            }
        }
Example #5
0
        /// <summary>
        /// 恾宍偺堏摦 (懡妏宍)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void ModifyFigure(FVIL.GDI.CFviGdiPolyline figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            if (figure.Close)
            {
                if (info.iGripPosition < 0)
                {
                    // 恾宍慡懱傪堏摦偡傞.
                    MoveFigure(figure, current, info, key);
                }
                else if (0 < info.iGripPosition && info.iGripPosition <= figure.Count)
                {
                    // 捀揰傪堏摦偟偰丄恾宍傪曄宍偡傞.
                    figure.Close = false;
                    ModifyFigure(figure, current, info, key);
                    figure.Close = true;
                }
            }
            else
            {
                // 儅僂僗墴壓帪偺忣曬偱嵗昗寁嶼偡傞.
                FVIL.Data.CFviPoint axis  = Math.Add(info.position, info.axis);
                FVIL.Data.CFviAngle angle = Math.Invert(info.angle);
                FVIL.Data.CFviPoint pos   = FVIL.Math.Rotate(current, axis, angle);

                if (info.iGripPosition < 0)
                {
                    // 恾宍慡懱傪堏摦偡傞.
                    MoveFigure(figure, current, info, key);
                }
                else if (0 < info.iGripPosition && info.iGripPosition <= figure.Count)
                {
                    // 捀揰傪堏摦偟偰丄恾宍傪曄宍偡傞.
                    int index = info.iGripPosition - 1;
                    figure[index] = pos;

                    // --- 婡幉偺曗惓.
                    if (angle.Degree != 0.0)
                    {
                        figure.Axis = Math.Sub(axis, figure.Position);
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// 恾宍偺堏摦 (捈慄)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void ModifyFigure(FVIL.GDI.CFviGdiLine figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            // 恾宍傪堏摦.
            if (info.iGripPosition < 0)
            {
                MoveFigure(figure, current, info, key);
                return;
            }

            // 儅僂僗墴壓帪偺忣曬偱嵗昗寁嶼偡傞.
            FVIL.Data.CFviPoint axis  = Math.Add(info.position, info.axis);
            FVIL.Data.CFviAngle angle = Math.Invert(info.angle);
            FVIL.Data.CFviPoint pos   = FVIL.Math.Rotate(current, axis, angle);

            // 仸捈慄偺巒揰偲廔揰偼 GetClipRect 偐傜庢摼偱偒傑偡偑丄孹偒傪峫椂偡傞昁梫偑偁傝傑偡.
            FVIL.Data.CFviLineSegment ls = new FVIL.Data.CFviLineSegment(info.clip.St, info.clip.Ed);
            if (info.position != info.clip.St)  // 巒揰偑嵍忋偱側偄.
            {
                ls.SX = info.clip.St.X;
                ls.SY = info.clip.Ed.Y;
                ls.EX = info.clip.Ed.X;
                ls.EY = info.clip.St.Y;
            }

            // 恾宍偺曄宍.
            if (info.iGripPosition == 1)            // 巒揰.
            {
                ls.St = pos;
                figure.CopyFrom(ls.ToCFviLine());
            }
            else if (info.iGripPosition == 2)       // 廔揰.
            {
                ls.Ed = pos;
                figure.CopyFrom(ls.ToCFviLine());
            }

            // --- 婡幉偺曗惓.
            //     仸捈慄偼 Size 偵傛偭偰巒揰偲廔揰偑曄峏偝傟傞偨傔丄婡幉偺曗惓偼偱偒傑偣傫.
            if (angle.Degree != 0.0)
            {
                figure.Axis = Math.Sub(axis, figure.Position);
            }
        }
Example #7
0
        /// <summary>
        /// 恾宍偺夞揮 (斈梡)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void RotateFigure(FVIL.GDI.CFviGdiFigure figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            FVIL.Data.CFviAngle st = Math.Angle(info.mouse, Math.Add(figure.Position, figure.Axis));
            FVIL.Data.CFviAngle ed = Math.Angle(current, Math.Add(figure.Position, figure.Axis));

            // 儃僞儞墴壓帪偐傜偺堏摦検傪寁嶼.
            FVIL.Data.CFviAngle move = Math.Sub(ed, st);

            // 恾宍傪夞揮.
            figure.Angle = Math.Add(info.angle, move);
        }
Example #8
0
        /// <summary>
        /// 妏搙偺嶼弌
        /// </summary>
        /// <param name="point">巜掕揰</param>
        /// <param name="axis">夞揮偺婡幉</param>
        /// <returns>
        ///		嶼弌偝傟偨妏搙傪曉偟傑偡丅
        /// </returns>
        public static FVIL.Data.CFviAngle Angle(FVIL.Data.CFviPoint point, FVIL.Data.CFviPoint axis)
        {
            FVIL.Data.CFviAngle angle = new FVIL.Data.CFviAngle();

            // 巜掕偝傟偨揰偺嵗昗偐傜妏搙傪嶼弌偡傞.
            double xL = point.X - axis.X;
            double yL = point.Y - axis.Y;

            if (!(xL == 0 && yL == 0))
            {
                double R = System.Math.Atan2(yL, xL);
                angle.Radian = R;
                if (angle.Degree < 0)
                {
                    angle = new FVIL.Data.CFviAngle(360 + angle.Degree);
                }
            }
            return(angle);
        }
Example #9
0
        /// <summary>
        /// 恾宍偺庢摼 (埵抲巜掕)
        /// </summary>
        /// <param name="location">巜掕埵抲 (僋儔僀傾儞僩嵗昗)</param>
        /// <returns>
        ///		巜掕埵抲偵偁傞恾宍傪曉偟傑偡丅
        ///		尒偮偐傟側偗傟偽 null 傪曉偟傑偡丅
        /// </returns>
        public virtual FVIL.GDI.CFviGdiFigure GetFigure(Point location)
        {
            // View僋儔僀傾儞僩椞堟忋偱偺嵗昗.
            // Scaling = true 偺帪偼丄夋憸嵗昗偵曄姺.
            FVIL.Data.CFviPoint position = (Scaling)
                ? DPtoIP(location, ScalingMode)
                : new FVIL.Data.CFviPoint(location);

            // 攝楍偺枛旜(倅曽岦偺慜柺)偐傜張棟偡傞.
            for (int i = Figures.Count - 1; i >= 0; i--)
            {
                FVIL.GDI.CFviGdiFigure figure = Figures[i];
                int iGripPosition             = figure.CheckFocusMarkPosition(position, 8 / Magnification);
                if (iGripPosition != 0)
                {
                    return(figure);
                }
            }
            return(null);
        }
Example #10
0
        /// <summary>
        /// 儅僂僗僇乕僜儖偑堏摦偟偰偄傞帪偺張棟
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected virtual void OnMouseMove(System.Object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (Active == false)
            {
                return;
            }

            if (m_MouseInfo.bGrip)
            {
                // View僋儔僀傾儞僩椞堟忋偱偺嵗昗.
                // Scaling = true 偺帪偼丄夋憸嵗昗偵曄姺.
                FVIL.Data.CFviPoint current = (Scaling)
                    ? DPtoIP(e.Location, ScalingMode)
                    : new FVIL.Data.CFviPoint(e.Location);

                FVIL.GDI.CFviGdiFigure figure = m_MouseInfo.figure;

                // 恾宍偺憖嶌.
                HandlingFigure(m_MouseInfo.figure, current, m_MouseInfo, m_KeyboardInfo);

                ((System.Windows.Forms.Control)sender).Refresh();
            }
        }
Example #11
0
        /// <summary>
        /// 儅僂僗僌儕僢僾壜斲敾掕
        /// </summary>
        /// <param name="sender">儅僂僗僀儀儞僩偑敪惗偟偨僐儞僩儘乕儖</param>
        /// <param name="e">敪惗偟偨儅僂僗僀儀儞僩</param>
        /// <param name="AllowGrip">僌儕僢僾嫋壜僗僥乕僞僗</param>
        public override void CanMouseGrip(System.Object sender, System.Windows.Forms.MouseEventArgs e, ref bool AllowGrip)
        {
            if (!Active)
            {
                return;             // 姳徛偟側偄.
            }
            if (AllowGrip)
            {
                try {
                    FVIL.Data.CFviPoint position = (Scaling)
                        ? DPtoIP(e.Location, ScalingMode)
                        : new FVIL.Data.CFviPoint(e.Location);

                    // 攝楍偺枛旜(倅曽岦偺慜柺)偐傜張棟偡傞.
                    for (int i = Figures.Count - 1; i >= 0; i--)
                    {
                        FVIL.GDI.CFviGdiFigure figure = Figures[i];
                        if (m_MouseInfo.bGrip == true)
                        {
                            if (ReferenceEquals(figure, m_MouseInfo.figure))
                            {
                                // 懠偺僆乕僶儗僀偱偺僌儕僢僾傪嫋壜偟側偄.
                                AllowGrip = false;
                                break;
                            }
                        }
                        else if (figure.Enable)
                        {
                            int iGripPosition = figure.CheckFocusMarkPosition(position, 8 / Magnification);
                            if (iGripPosition != 0)
                            {
                                if (figure is FVIL.GDI.CFviGdiPolyline)
                                {
                                    // (!) 懡妏宍偵懳偡傞巄掕揑側張抲.
                                    // CFviGdiPolyline 偑 Close 偺偲偒傕捀揰偱斀墳偝偣傞張抲.
                                    // 僗儗僢僪僙乕僼偱偼側偄偺偱拲堄.
                                    // 杮棃偼丄宲彸偟偰 CheckFocusMarkPosition 傪僆乕僶乕儔僀僪偡傞傋偒.

                                    FVIL.GDI.CFviGdiPolyline _figure = (FVIL.GDI.CFviGdiPolyline)figure;
                                    if (_figure.Close)
                                    {
                                        _figure.Close = false;
                                        int iGripVetex = _figure.CheckFocusMarkPosition(position, 8 / Magnification);
                                        _figure.Close = true;
                                        // 捀揰傑偨偼曈埲奜偱奜愙嬮宍撪偺偲偒偼堏摦(-1)偲偡傞.
                                        iGripPosition = (iGripVetex != 0) ? iGripVetex : -1;
                                    }
                                }

                                // View僋儔僀傾儞僩椞堟忋偱偺嵗昗.
                                // Scaling = true 偺帪偼丄夋憸嵗昗偵曄姺.
                                FVIL.Data.CFviPoint mouse = (Scaling)
                                    ? DPtoIP(e.Location, ScalingMode)
                                    : new FVIL.Data.CFviPoint(e.Location);

                                // 僌儕僢僾埵抲偲恾宍偺忬懺傪曐帩偡傞.
                                m_MouseInfo.bGrip         = true;
                                m_MouseInfo.iGripPosition = iGripPosition;
                                m_MouseInfo.mouse         = mouse;
                                m_MouseInfo.figure        = figure;
                                m_MouseInfo.position      = figure.Position;
                                m_MouseInfo.axis          = figure.Axis;
                                m_MouseInfo.angle         = figure.Angle;
                                m_MouseInfo.clip          = figure.GetClipRect();
                                Validate(ref m_MouseInfo);      // 桳岠壔.

                                // 懠偺僆乕僶儗僀偱偺僌儕僢僾傪嫋壜偟側偄.
                                AllowGrip = false;
                                break;
                            }
                        }
                    }
                }
                catch (System.Exception) {
                }
            }
            return;
        }
Example #12
0
 /// <summary>
 /// 揰嵗昗偺尭嶼
 /// </summary>
 /// <param name="ope1">嵍曈抣</param>
 /// <param name="ope2">塃曈抣</param>
 /// <returns>
 ///		尭嶼寢壥傪曉偟傑偡丅
 /// </returns>
 public static FVIL.Data.CFviPoint Sub(FVIL.Data.CFviPoint ope1, FVIL.Data.CFviPoint ope2)
 {
     ope1.X -= ope2.X;
     ope1.Y -= ope2.Y;
     return(ope1);
 }
Example #13
0
 /// <summary>
 /// 俀揰偺拞怱
 /// </summary>
 /// <param name="ope1">嵍曈抣</param>
 /// <param name="ope2">塃曈抣</param>
 /// <returns>
 ///		拞怱傪曉偟傑偡丅
 /// </returns>
 public static FVIL.Data.CFviPoint Center(FVIL.Data.CFviPoint ope1, FVIL.Data.CFviPoint ope2)
 {
     FVIL.Data.CFviPoint center = new FVIL.Data.CFviPoint((ope1.X + ope2.X) / 2, (ope1.Y + ope2.Y) / 2);
     return(center);
 }
Example #14
0
        /// <summary>
        /// 恾宍偺堏摦 (恀墌)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void ModifyFigure(FVIL.GDI.CFviGdiCircle figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            // 恾宍傪堏摦.
            FVIL.GDI.RectPosition rectpos = (FVIL.GDI.RectPosition)info.iGripPosition;
            if ((rectpos & FVIL.GDI.RectPosition.ALL) == FVIL.GDI.RectPosition.ALL)
            {
                MoveFigure(figure, current, info, key);
                return;
            }

            // 儅僂僗墴壓帪偺忣曬偱嵗昗寁嶼偡傞.
            FVIL.Data.CFviPoint axis  = Math.Add(info.position, info.axis);
            FVIL.Data.CFviAngle angle = Math.Invert(info.angle);
            FVIL.Data.CFviPoint mouse = FVIL.Math.Rotate(info.mouse, axis, angle);
            FVIL.Data.CFviPoint pos   = FVIL.Math.Rotate(current, axis, angle);
            FVIL.Data.CFviPoint move  = Math.Sub(pos, mouse);

            // 恾宍偺曄宍.
            bool L = ((rectpos & FVIL.GDI.RectPosition.Left) == FVIL.GDI.RectPosition.Left);
            bool R = ((rectpos & FVIL.GDI.RectPosition.Right) == FVIL.GDI.RectPosition.Right);
            bool T = ((rectpos & FVIL.GDI.RectPosition.Top) == FVIL.GDI.RectPosition.Top);
            bool B = ((rectpos & FVIL.GDI.RectPosition.Bottom) == FVIL.GDI.RectPosition.Bottom);

            FVIL.Data.CFviRectangle clip = figure.GetClipRect();

            if (L && T)
            {
                clip.Left = (mouse.X + move.X);
                clip.Top  = (mouse.Y + move.X);
            }
            else if (L && B)
            {
                clip.Left   = (mouse.X + move.X);
                clip.Bottom = (mouse.Y - move.X);
            }
            else if (R && T)
            {
                clip.Right = (mouse.X + move.X);
                clip.Top   = (mouse.Y - move.X);
            }
            else if (R && B)
            {
                clip.Right  = (mouse.X + move.X);
                clip.Bottom = (mouse.Y + move.X);
            }
            else if (L)
            {
                clip.Left    = (mouse.X + move.X);
                clip.Top    += move.X / 2;
                clip.Bottom -= move.X / 2;
            }
            else if (R)
            {
                clip.Right   = (mouse.X + move.X);
                clip.Top    -= move.X / 2;
                clip.Bottom += move.X / 2;
            }
            else if (T)
            {
                clip.Top    = (mouse.Y + move.Y);
                clip.Left  += move.Y / 2;
                clip.Right -= move.Y / 2;
            }
            else if (B)
            {
                clip.Bottom = (mouse.Y + move.Y);
                clip.Left  -= move.Y / 2;
                clip.Right += move.Y / 2;
            }

            double radius_x = clip.Width / 2;
            double radius_y = clip.Height / 2;

            figure.X = clip.X + radius_x;
            figure.Y = clip.Y + radius_y;

            if (L || R)
            {
                figure.Radius = clip.Width / 2;
            }
            else
            {
                figure.Radius = clip.Height / 2;
            }

            // --- 婡幉偺曗惓.
            if (angle.Degree != 0.0)
            {
                figure.Axis = Math.Sub(axis, figure.Position);
            }
        }
Example #15
0
        /// <summary>
        /// 恾宍偺憖嶌 (暘婒)
        /// </summary>
        /// <param name="figure">恾宍</param>
        /// <param name="current">尰嵼偺儅僂僗埵抲</param>
        /// <param name="info">儃僞儞墴壓帪偺忣曬</param>
        /// <param name="key">儃僞儞墴壓帪偺僉乕儃乕僪忣曬</param>
        protected virtual void HandlingFigure(FVIL.GDI.CFviGdiFigure figure, FVIL.Data.CFviPoint current, MouseInfo info, KeyboardInfo key)
        {
            if (info.iGripPosition == 0)
            {
                return;
            }

            FigureHandlingMode mode = HandlingMode;

            // 儌乕僪偺愗傝懼偊.
            if (key.IsDown &&
                key.Control == true &&
                key.Alt == false &&
                key.Shift == false)
            {
                if (mode == FigureHandlingMode.Normal)
                {
                    mode = FigureHandlingMode.Rotate;
                }
                else if (mode == FigureHandlingMode.Rotate)
                {
                    mode = FigureHandlingMode.Normal;
                }
            }

            if (mode == FigureHandlingMode.Rotate)
            {
                // 恾宍偺夞揮.
                RotateFigure(figure, current, info, key);
            }
            else
            {
                // 恾宍偺曄宍傑偨偼堏摦.
                if (figure is FVIL.GDI.CFviGdiPoint)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiPoint)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiAnchor)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiAnchor)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiLine)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiLine)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiLineSegment)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiLineSegment)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiCircle)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiCircle)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiEllipse)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiEllipse)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiRectangle)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiRectangle)figure, current, info, key);
                }
                else if (figure is FVIL.GDI.CFviGdiPolyline)
                {
                    ModifyFigure((FVIL.GDI.CFviGdiPolyline)figure, current, info, key);
                }
                else
                {
                    MoveFigure(figure, current, info, key);
                }
            }
        }
Example #16
0
        /// <summary>
        /// 儅僂僗僇乕僜儖偺宍忬曄峏壜斲敾掕
        /// </summary>
        /// <param name="sender">儅僂僗僀儀儞僩偑敪惗偟偨僐儞僩儘乕儖</param>
        /// <param name="e">敪惗偟偨儅僂僗僀儀儞僩</param>
        /// <param name="AllowChange">僇乕僜儖曄峏嫋壜僗僥乕僞僗</param>
        public override void CanChangeCursor(System.Object sender, System.Windows.Forms.MouseEventArgs e, ref bool AllowChange)
        {
            if (!Active)
            {
                return;             // 姳徛偟側偄.
            }
            try {
                System.Windows.Forms.Cursor cursor = System.Windows.Forms.Cursors.Default;

                // sender 傑偨偼 e 偑柍岠側応崌偼柍帇偡傞.
                if (ReferenceEquals(sender, null))
                {
                    return;
                }
                if (ReferenceEquals(e, null))
                {
                    return;
                }

                System.Windows.Forms.Control control = (System.Windows.Forms.Control)sender;

                //
                // 張棟懳徾偺恾宍.
                //
                bool selected = false;
                bool redraw   = false;

                // View僋儔僀傾儞僩椞堟忋偱偺嵗昗.
                // Scaling = true 偺帪偼丄夋憸嵗昗偵曄姺.
                FVIL.Data.CFviPoint position = (Scaling)
                    ? DPtoIP(e.Location, ScalingMode)
                    : new FVIL.Data.CFviPoint(e.Location);

                // 攝楍偺枛旜(倅曽岦偺慜柺)偐傜張棟偡傞.
                for (int i = Figures.Count - 1; i >= 0; i--)
                {
                    FVIL.GDI.CFviGdiFigure figure = Figures[i];
                    if (m_MouseInfo.bGrip == true)
                    {
                        if (ReferenceEquals(figure, m_MouseInfo.figure))
                        {
                            if (figure.Select != true)
                            {
                                redraw = true;
                            }
                            figure.Select = true;
                            selected      = true;
                        }
                    }
                    else if (figure.Enable)
                    {
                        int iGripPosition = figure.CheckFocusMarkPosition(position, 8 / Magnification);
                        if (iGripPosition != 0 && selected == false)
                        {
                            if (figure.Select != true)
                            {
                                redraw = true;
                            }
                            figure.Select = true;
                            selected      = true;
                        }
                        else
                        {
                            if (figure.Select != false)
                            {
                                redraw = true;
                            }
                            figure.Select = false;
                        }
                    }
                }

                if (redraw)
                {
                    ((System.Windows.Forms.Control)sender).Refresh();
                }

                cursor = System.Windows.Forms.Cursors.SizeAll;

                // (!) 僇乕僜儖宍忬偺曄峏張棟
                //     AllowChange 偼丄懠偺僆乕僶儗僀偺僇乕僜儖曄峏張棟偲姳徛偟側偄傛偆偵偡傞堊偺僼儔僌偱偡.
                //     婛偵 AllowChange 偑 false 偺帪偼丄偙偺僆乕僶儗僀偱偺僇乕僜儖曄峏張棟傪峴偄傑偣傫丅
                //     AllowChange 偑 true 偺帪丄僇乕僜儖宍忬偺曄峏張棟傪峴偄傑偡丅
                //     僇乕僜儖曄峏屻丄AllowChange 傪 false 偵曄峏偟傑偡丅

                // 僇乕僜儖曄峏.
                if (AllowChange && selected == true)
                {
                    control.Cursor = cursor;
                    AllowChange    = false; // 曄峏傪嫋壜偟側偄.
                }
            }
            catch (System.Exception) {
            }
            return;
        }
Example #17
0
 /// <summary>
 /// 揰嵗昗偺壛嶼
 /// </summary>
 /// <param name="ope1">嵍曈抣</param>
 /// <param name="ope2">塃曈抣</param>
 /// <returns>
 ///		壛嶼寢壥傪曉偟傑偡丅
 /// </returns>
 public static FVIL.Data.CFviPoint Add(FVIL.Data.CFviPoint ope1, FVIL.Data.CFviPoint ope2)
 {
     ope1.X += ope2.X;
     ope1.Y += ope2.Y;
     return(ope1);
 }