Beispiel #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.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);
                    }
                }
            }
        }
Beispiel #2
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;
        }