/// <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); } } } }
/// <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; }