public static List <TickControlObject> CalcGraphS(TickControlObject S1, TickControlObject S2, long MinTickDert = 1)
        {
            if (S1 == null)
            {
                return(new List <TickControlObject>());
            }
            if (S2 == null)
            {
                return(new List <TickControlObject>());
            }
            if (MinTickDert < 1)
            {
                MinTickDert = 1;
            }
            //系数计算
            //0点坐标
            double B = pi / (((double)S2.Tick - (double)S1.Tick));
            double C = -B * S1.Tick;
            double A = Math.Abs(S1.Value - S2.Value) / 2;

            List <TickControlObject> ret = new List <TickControlObject>();

            for (long i = Math.Min(S1.Tick, S2.Tick); i <= Math.Max(S1.Tick, S2.Tick); i += MinTickDert)
            {
                if (S2.Value <= S1.Value)
                {
                    ret.Add(new TickControlObject(i, S2.Value + A + A * Math.Cos(B * i + C)));
                }
                else
                {
                    ret.Add(new TickControlObject(i, S1.Value + A - A * Math.Cos(B * i + C)));
                }
            }
            return(ret);
        }
Example #2
0
        public void ReplaceDynLine(List <TickControlObject> DynLine, bool KeepBound = true)
        {
            ClearCache();
            List <TickControlObject> poj = DynLine;

            if (poj.Count == 0)
            {
                return;
            }
            poj.Sort();


            TickSortList <TickControlObject> PL = partsObject.DynList;
            long st = poj[0].Tick;
            long et = poj[poj.Count - 1].Tick;

            if (KeepBound)
            {
                if (KeepBound)
                {
                    poj[0] = new TickControlObject(st, getDynValue(st));

                    poj[poj.Count - 1] = new TickControlObject(et, getDynValue(et));
                }
            }

            clearDyn(ref PL, st, et);
            partsObject.DynList.AddRange(poj);
            partsObject.DynList.Sort();
        }
 void ParamWindow_ParamAreaMouseDown(object sender, ParamMouseEventArgs e)
 {
     if (!_HandleEvents)
     {
         DynDragingStatus = PitchView.PitchDragingType.None;
         DynStP1          = null;
         DynTmpP0         = null;
         return;
     }
     if (_DynToolsStatus == PitchView.PitchDragingType.None)
     {
         return;
     }
     if (DynDragingStatus != PitchView.PitchDragingType.None)
     {
         return;
     }
     if (e.MouseEventArgs.Button != MouseButtons.Left)
     {
         return;
     }
     DynStP1          = new TickControlObject(e.Tick, e.TallPercent * 100 * Zoom - 100);
     DynDragingStatus = _DynToolsStatus;
     if (DynActionBegin != null)
     {
         DynActionBegin(DynDragingStatus);
     }
 }
 void ParamWindow_ParamAreaMouseMove(object sender, ParamMouseEventArgs e)
 {
     if (!_HandleEvents)
     {
         return;
     }
     CurValue = (e.TallPercent * 100 * Zoom);
     if (DynDragingStatus == PitchView.PitchDragingType.None)
     {
         return;
     }
     if (e.Tick == DynStP1.Tick)
     {
         return;
     }
     DynTmpP0 = new TickControlObject(e.Tick, e.TallPercent * 100 * Zoom - DynBase);
     if (_DynToolsStatus == PitchView.PitchDragingType.None)
     {
         ParamWindow.ParentForm.Cursor = Cursors.Arrow;
     }
     else
     {
         ParamWindow.ParentForm.Cursor = Cursors.Cross;
     }
 }
        public static List <TickControlObject> CalcLineSilk(TickControlObject S1, TickControlObject S2, long MinTickDert = 1)
        {
            if (S1 == null)
            {
                return(new List <TickControlObject>());
            }
            if (S2 == null)
            {
                return(new List <TickControlObject>());
            }
            if (MinTickDert < 1)
            {
                MinTickDert = 1;
            }

            TickControlObject M1 = S1;
            TickControlObject M2 = S2;

            if (S1.Tick >= S2.Tick)
            {
                M1 = S2;
                M2 = S1;
            }

            double pK, pB;

            if (M1.Value == M2.Value)
            {
                pK = 0;
            }
            else
            {
                pK = (M2.Value - M1.Value) / (M2.Tick - M1.Tick);
            }
            pB = M2.Value - pK * M2.Tick;
            double P1 = pK * M1.Tick + pB;
            double P2 = pK * M2.Tick + pB;
            List <TickControlObject> ret = new List <TickControlObject>();

            for (long i = M1.Tick; i <= M2.Tick; i += MinTickDert)
            {
                ret.Add(new TickControlObject(i, pK * i + pB));
            }
            return(ret);
        }
        void ParamWindow_ParamAreaMouseUp(object sender, ParamMouseEventArgs e)
        {
            if (!_HandleEvents)
            {
                return;
            }
            if (DynDragingStatus == PitchView.PitchDragingType.None)
            {
                return;
            }
            TickControlObject DynEdP2 = new TickControlObject(e.Tick, e.TallPercent * 100 * Zoom - DynBase);

            switch (DynDragingStatus)
            {
            case PitchView.PitchDragingType.DrawLine: replaceControlLine(ControlMathUtils.CalcLineSilk(DynStP1, DynEdP2)); break;

            case PitchView.PitchDragingType.DrawGraphJ: replaceControlLine(ControlMathUtils.CalcGraphJ(DynStP1, DynEdP2)); break;

            case PitchView.PitchDragingType.DrawGraphR: replaceControlLine(ControlMathUtils.CalcGraphR(DynStP1, DynEdP2)); break;

            case PitchView.PitchDragingType.DrawGraphS: replaceControlLine(ControlMathUtils.CalcGraphS(DynStP1, DynEdP2)); break;

            case PitchView.PitchDragingType.EarseArea: earseControlLine(DynStP1, DynEdP2); break;
            }
            PitchView.PitchDragingType EDStatus = DynDragingStatus;
            DynDragingStatus = PitchView.PitchDragingType.None;
            DynStP1          = null;
            DynTmpP0         = null;
            if (DynActionEnd != null)
            {
                DynActionEnd(EDStatus);
            }
            if (_DynToolsStatus == PitchView.PitchDragingType.None)
            {
                ParamWindow.ParentForm.Cursor = Cursors.Arrow;
            }
            else
            {
                ParamWindow.ParentForm.Cursor = Cursors.Cross;
            }
        }
 public static List <TickControlObject> CalcGraphR(TickControlObject S1, TickControlObject S2, long MinTickDert = 1)
 {
     return(CalcGraphJ(S2, S1, MinTickDert));
 }
 public void earseControlLine(TickControlObject P1, TickControlObject P2)
 {
     PartsObject.DynCompiler.ClearDynLine(Math.Min(P1.Tick, P2.Tick), Math.Max(P1.Tick, P2.Tick));
 }