/// <summary> /// 调整曲线 刻度(直接修改) /// </summary> protected void AdjustLines() { if (!IsHaveLine) { return; } double xeveryone = (XLimt.Vec2 - XLimt.Vec1) / (_xTip.Count - 1); double yeveryone = (YLimt.Vec2 - YLimt.Vec1) / (_yTip.Count - 1); _everyDisForPiexl.Vec1 = (XLimt.Vec2 - XLimt.Vec1) / Draw.Width; _everyDisForPiexl.Vec2 = (YLimt.Vec2 - YLimt.Vec1) / Draw.Height; double cur = 0; ///计算偏移量 VectorChart2 offect = GetOffectValue(_centerOffect); foreach (var item in _xTip) { //item.Text = (cur * xeveryone + _xLimt.Vec1).ToString("0.00"); item.Text = (((double)item.GetValue(Canvas.LeftProperty) - _origPoint.X) * _everyDisForPiexl.Vec1 + offect.Vec1).ToString("0.0"); cur++; } cur = 0; foreach (var item in _yTip) { //item.Text = (cur * yeveryone + _yLimt.Vec1).ToString("0.00"); item.Text = (((double)item.GetValue(Canvas.BottomProperty) - _origPoint.Y) * _everyDisForPiexl.Vec2 + offect.Vec2).ToString("0.0"); cur++; } }
/// <summary> /// 根据偏差移动绘图区 /// </summary> /// <param name="offect"></param> /// <returns></returns> public bool MoveDrawLinesAndPoints(Point offect) { if (Math.Pow(offect.X, 2) + Math.Pow(offect.Y, 2) < 3 * 3) { return(false); } _centerOffect.Vec1 += offect.X; _centerOffect.Vec2 += offect.Y; VectorChart2 offectValue = GetOffectValue(_centerOffect); if (XLimt.Vec1 + offectValue.Vec1 <= ScaleLimt.Vec1 || XLimt.Vec2 + offectValue.Vec1 >= ScaleLimt.Vec2 || YLimt.Vec1 + offectValue.Vec2 <= ScaleLimt.Vec3 || YLimt.Vec2 + offectValue.Vec2 >= ScaleLimt.Vec4) { _centerOffect.Vec1 -= offect.X; _centerOffect.Vec2 -= offect.Y; return(false); } Point curp = new Point(Canvas.GetLeft(DrawLineAndPoint), Draw.Height - Canvas.GetBottom(DrawLineAndPoint)); curp.X += offect.X; curp.Y += offect.Y; Canvas.SetLeft(DrawLineAndPoint, curp.X); Canvas.SetBottom(DrawLineAndPoint, Draw.Height - curp.Y); AdjustLines(); return(true); }
/// <summary> /// 鼠标滚轮事件 /// </summary> /// <param name="e"></param> protected override void OnMouseWheel(MouseWheelEventArgs e) { base.OnMouseWheel(e); VectorChart2 curPDraw = (VectorChart2)e.GetPosition(Draw); VectorChart2 curPLinesAndPoint = (VectorChart2)e.GetPosition(DrawLineAndPoint); double delta = 1; if (e.Delta >= 120) { delta = 1.2; } else if (e.Delta <= -120) { delta = (double)5 / (double)6; } if (IsXZoom) { DrawLineAndPoint.Width *= delta; curPDraw.Vec1 *= delta; curPLinesAndPoint.Vec1 *= delta; } if (IsYZoom) { DrawLineAndPoint.Height *= delta; curPDraw.Vec2 *= delta; curPLinesAndPoint.Vec2 *= delta; } _currentLinesScale.Vec4 *= delta; //Canvas.SetLeft(DrawLineAndPoint, curPDraw.Vec1 - curPLinesAndPoint.Vec1); //Canvas.SetBottom(DrawLineAndPoint, -(DrawArea.Vec2 - (curPLinesAndPoint.Vec2 - curPDraw.Vec2))); ///调整刻度 AdjustLines(); AdjustLinesAndPoints(); }
/// <summary> /// 根据具体的值获取应该的偏移量 /// </summary> /// <param name="offectValue"></param> /// <returns></returns> protected VectorChart2 GetOffectPoint(VectorChart2 offectValue) { return(new VectorChart2(offectValue.Vec1 / _everyDisForPiexl.Vec1, offectValue.Vec2 / _everyDisForPiexl.Vec2)); }
/// <summary> /// 获取偏移量 /// </summary> /// <returns></returns> protected VectorChart2 GetOffectValue(VectorChart2 offectValue) { return(new VectorChart2(-offectValue.Vec1 * _everyDisForPiexl.Vec1, offectValue.Vec2 * _everyDisForPiexl.Vec2)); }