コード例 #1
0
        /// <summary>
        /// 点の追加(ボタンver)
        /// </summary>
        public void AddPoint()
        {
            var         LastCnt         = m_list.Count() - 1;
            BezierPoint startBezirPoint = new BezierPoint();
            const int   ofsetX          = 30;

            //
            startBezirPoint.startPoint = new Point(Math.Min(m_list[LastCnt].startPoint.X + ofsetX, ScrrenRightPosX - 1), m_list[LastCnt].startPoint.Y);
            startBezirPoint.endPoint   = new Point(m_list[LastCnt].endPoint.X, m_list[LastCnt].endPoint.Y);
            //制御点は追加される開始点の少し右に生成させる
            var cpointX = CMath.Clamp(startBezirPoint.startPoint.X + 10, ScrrenLeftPosX, ScrrenRightPosX - 1);

            startBezirPoint.controlPoint1 = new Point(cpointX, m_list[LastCnt].startPoint.Y + 30);
            startBezirPoint.controlPoint2 = new Point(cpointX, m_list[LastCnt].startPoint.Y - 30);
            m_list.Add(startBezirPoint);//新しい点追加

            //追加前の最後の終了点を追加した最後の開始点とつなげる ここ大事!
            BezierPoint BezirPoint = new BezierPoint();

            BezirPoint          = m_list[LastCnt];
            BezirPoint.endPoint = m_list[LastCnt + 1].startPoint;//繋ぎなおす
            m_list[LastCnt]     = BezirPoint;
            //増やした点を選択状態に
            m_SelectPoint = LastCnt + 1;
        }
コード例 #2
0
        /// <summary>
        ///    開始点セット
        /// </summary>
        /// <param name="y"></param>
        public int SetStartPointX(int x)
        {
            BezierPoint sp = m_list[m_SelectPoint]; //最初の点

            if (isSelectFirstStartPoint())
            {
                return(0);
            }
            if (m_SelectMode == SelectMode.None)
            {
                return(0);
            }

            var BeforeSelectPoint = m_SelectPoint - 1;
            //X軸の移動 intervalPointPosを加算減算すること隣の点と同じ座標にならないようにする
            int minpx = m_list[BeforeSelectPoint].startPoint.X + intervalPointPos;
            int maxpx = sp.endPoint.X - intervalPointPos;

            sp.startPoint.X = CMath.Clamp(x, minpx, maxpx);
            //ひとつ前の終了点の移動
            BezierPoint sp2 = m_list[BeforeSelectPoint];

            sp2.endPoint = sp.startPoint;
            m_list[BeforeSelectPoint] = sp2;

            m_list[m_SelectPoint] = sp;
            return(x);
        }
コード例 #3
0
        /// <summary>
        /// CSVからデータを読み込み
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public List <CurvePointControl.BezierPoint> Load(string s)
        {
            List <CurvePointControl.BezierPoint> list = new List <CurvePointControl.BezierPoint>();
            StreamReader file = new StreamReader(s);

            //末尾まで繰り返す
            while (!file.EndOfStream)
            {
                // CSVファイルの一行を読み込む
                string line = file.ReadLine();
                // 読み込んだ一行をカンマ毎に分けて配列に格納する
                string[] values = line.Split(',');
                CurvePointControl.BezierPoint b = ToBezierPoint(values);
                list.Add(b);
            }
            file.Close();
            //例外処理
            var sx = CMath.ChageDecimalPosX(list[0].startPoint.X);
            var ex = CMath.ChageDecimalPosX(list[list.Count - 1].endPoint.X);

            if (sx != 0)
            {
                MessageBox.Show("グラフデータがおかしいです");
            }
            if (ex != 1)
            {
                MessageBox.Show("グラフデータがおかしいです");
            }

            return(list);
        }
コード例 #4
0
        /// <summary>
        ///    制御点2Xセット
        /// </summary>
        /// <param name="y"></param>
        public int SetControl2PointX(int x)
        {
            if (m_SelectMode == SelectMode.None)
            {
                return(0);
            }

            BezierPoint sp = m_list[m_SelectPoint]; //選択している点

            sp.controlPoint2.X = CMath.Clamp(x, ScrrenLeftPosX, ScrrenRightPosX);

            //一番最初の開始点以外を選択しているなら
            if (!isSelectFirstStartPoint())
            {
                int minpx = m_list[m_SelectPoint - 1].endPoint.X + ControlOfSetX;
                sp.controlPoint2.X = CMath.Clamp(sp.controlPoint2.X, minpx, ScrrenRightPosX);
            }

            //一番最後の終了点以外を選択しているなら
            if (!isSelectLastEndPoint())
            {
                int maxpx = m_list[m_SelectPoint + 1].startPoint.X - ControlOfSetX;
                sp.controlPoint2.X = CMath.Clamp(sp.controlPoint2.X, ScrrenLeftPosX, maxpx);
            }
            m_list[m_SelectPoint] = sp;

            return(sp.controlPoint2.X);
        }
コード例 #5
0
        /// <summary>
        /// 点の追加(ダブルクリックVer)
        /// </summary>
        /// <param name="p"></param>
        public void AddPoint(Point p)
        {
            var         SelectNum       = SearchSelectStartPoint(p);//何番目の点になるか
            BezierPoint startBezirPoint = new BezierPoint();
            const int   ofsetY          = 30;

            startBezirPoint.startPoint = new Point(Math.Min(p.X, ScrrenRightPosX - 1), CMath.Clamp(p.Y, ScrrenTopPosY, ScrrenBottomPosY));
            startBezirPoint.endPoint   = new Point(m_list[SelectNum].endPoint.X, m_list[SelectNum].endPoint.Y);
            //制御点は追加される開始点の少し右に生成させる
            var cpointX = CMath.Clamp(startBezirPoint.startPoint.X + 10, ScrrenLeftPosX + ControlOfSetX, ScrrenRightPosX - ControlOfSetX);

            startBezirPoint.controlPoint1 = new Point(cpointX, CMath.Clamp(startBezirPoint.startPoint.Y + ofsetY, ScrrenTopPosY, ScrrenBottomPosY));
            startBezirPoint.controlPoint2 = new Point(cpointX, CMath.Clamp(startBezirPoint.startPoint.Y - ofsetY, ScrrenTopPosY, ScrrenBottomPosY));

            m_list.Insert(SelectNum + 1, startBezirPoint);//新しい点追加

            //追加前の最後の終了点を追加した最後の開始点とつなげる ここ大事!
            BezierPoint BezirPoint = new BezierPoint();

            BezirPoint          = m_list[SelectNum];
            BezirPoint.endPoint = m_list[SelectNum + 1].startPoint;//繋ぎなおす
            m_list[SelectNum]   = BezirPoint;

            //ダブルクリックで選択モードが解除されてるので選択モードに
            m_SelectMode = SelectMode.SelectStart;
            //増やした点を選択状態に
            m_SelectPoint = SelectNum + 1;
        }
コード例 #6
0
        /// <summary>
        /// 最初の開始点セット
        /// </summary>
        /// <param name="y"></param>
        public int SetFirstStartPoint(int y)
        {
            BezierPoint sp = m_list[0]; //最初の点

            sp.startPoint.Y = CMath.Clamp(y, ScrrenTopPosY, ScrrenBottomPosY);
            m_list[0]       = sp;
            return(sp.startPoint.Y);
        }
コード例 #7
0
        /// <summary>
        /// 最後の終了点の移動
        /// </summary>
        /// <param name="mouse"></param>
        public void MoveEndPoint(MouseEventArgs mouse)
        {
            int         LastCnt = m_list.Count() - 1;
            BezierPoint sp      = m_list[LastCnt]; //選択している点

            sp.endPoint.Y   = CMath.Clamp(mouse.Y, ScrrenTopPosY, ScrrenBottomPosY);;
            m_list[LastCnt] = sp;
        }
コード例 #8
0
        /// <summary>
        /// 最後の終了点セット
        /// </summary>
        /// <param name="y"></param>
        public int  SetEndPoint(int y)
        {
            var LastCnt = m_list.Count() - 1;

            BezierPoint sp = m_list[LastCnt]; //最後の点

            sp.endPoint.Y   = CMath.Clamp(y, ScrrenTopPosY, ScrrenBottomPosY);
            m_list[LastCnt] = sp;
            return(sp.endPoint.Y);
        }
コード例 #9
0
        /// <summary>
        /// 制御点2Y
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ChangeControlPoint2Y(object sender, EventArgs e)
        {
            int num  = CMath.ChageNomalPosY(numericUpDown6.Value);
            int num2 = m_CurvePointControl.SetControl2PointY(num);

            numericUpDown6.Value = CMath.ChageDecimalPosY(num2);
            if (!m_CurvePointControl.isMoveSelectPoint())
            {
                pictureBox1.Refresh();                                          //再描画
            }
        }
コード例 #10
0
        //入力項目の同期-------------------------------------------------------------------------

        /// <summary>
        /// 選択点X
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ChangeSelectPointX(object sender, EventArgs e)
        {
            int num3 = CMath.ChageNomalPosX(numericUpDown1.Value);
            int num4 = m_CurvePointControl.SetStartPointX(num3);

            numericUpDown1.Value = CMath.ChageDecimalPosX(num4);
            if (!m_CurvePointControl.isMoveSelectPoint())
            {
                pictureBox1.Refresh();                                           //再描画
            }
        }
コード例 #11
0
        /// <summary>
        /// 終了点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ChangeEndPoint(object sender, EventArgs e)
        {
            int num  = CMath.ChageNomalPosY(numericUpDown7.Value);
            int num2 = m_CurvePointControl.SetEndPoint(num);;

            numericUpDown7.Value = CMath.ChageDecimalPosY(num2);
            if (!m_CurvePointControl.isMoveSelectPoint())
            {
                pictureBox1.Refresh();                                          //再描画
            }
            bp = m_CurvePointControl.GetBezierPoint();
        }
コード例 #12
0
 /// <summary>
 /// 点を動かした際同期を取る
 /// </summary>
 public void numericUpDownSync()
 {
     bp = m_CurvePointControl.GetBezierPoint();
     numericUpDown1.Value = CMath.ChageDecimalPosX(bp.startPoint.X);
     numericUpDown2.Value = CMath.ChageDecimalPosX(bp.controlPoint1.X);
     numericUpDown3.Value = CMath.ChageDecimalPosX(bp.controlPoint2.X);
     numericUpDown4.Value = CMath.ChageDecimalPosY(bp.startPoint.Y);
     numericUpDown5.Value = CMath.ChageDecimalPosY(bp.controlPoint1.Y);
     numericUpDown6.Value = CMath.ChageDecimalPosY(bp.controlPoint2.Y);
     numericUpDown7.Value = CMath.ChageDecimalPosY(m_CurvePointControl.GetEndPointY());
     numericUpDown8.Value = CMath.ChageDecimalPosY(m_CurvePointControl.GetFirstStartPointY());
 }
コード例 #13
0
        //保存されている点を描画
        public void PaintGraph(PaintEventArgs e)
        {
            var pontcnt = m_list.Count();

            for (int i = 0; i <= 100; i++)
            {
                int x = CMath.ChageNomalPosX((decimal)(0.01f * i));
                int y = CMath.ChageNomalPosY(EvaluateY((decimal)(0.01f * i)));
                //保存されている点を描画
                e.Graphics.FillEllipse(m_PointColor, x - m_cpSize / 2, y - m_cpSize / 2, m_cpSize, m_cpSize);
            }
            TestPrint();
        }
コード例 #14
0
        /// <summary>
        /// 選択点Y
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ChangeSelectPointY(object sender, EventArgs e)
        {
            int num  = CMath.ChageNomalPosY(numericUpDown4.Value);
            int num2 = m_CurvePointControl.SetStartPointY(num);

            numericUpDown4.Value = CMath.ChageDecimalPosY(num2);
            if (!m_CurvePointControl.isMoveSelectPoint())
            {
                pictureBox1.Refresh();                                          //再描画
            }
            //最初の開始点と同期を取る
            numericUpDown8.Value = CMath.ChageDecimalPosY(m_CurvePointControl.GetFirstStartPointY());
        }
コード例 #15
0
        /// <summary>
        ///    制御点2Yセット
        /// </summary>
        /// <param name="y"></param>
        public int SetControl2PointY(int y)
        {
            if (m_SelectMode == SelectMode.None)
            {
                return(0);
            }

            BezierPoint sp = m_list[m_SelectPoint];

            sp.controlPoint2.Y    = CMath.Clamp(y, ScrrenTopPosY, ScrrenBottomPosY);
            m_list[m_SelectPoint] = sp;
            return(sp.controlPoint2.Y);
        }
コード例 #16
0
        /// <summary>
        ///  //座標を0~1の間に変換し文字列化させる
        /// </summary>
        /// <param name="bs"></param>
        /// <returns></returns>
        public string[] ToSting(CurvePointControl.BezierPoint bs)
        {
            //座標を0~1の間に変換し文字列化させる
            string[] name = new string[4];
            name[0] = CMath.ChageDecimalPosX(bs.startPoint.X).ToString()
                      + "," + CMath.ChageDecimalPosY(bs.startPoint.Y).ToString();
            name[1] = CMath.ChageDecimalPosX(bs.controlPoint1.X).ToString()
                      + "," + CMath.ChageDecimalPosY(bs.controlPoint1.Y).ToString();
            name[2] = CMath.ChageDecimalPosX(bs.controlPoint2.X).ToString()
                      + "," + CMath.ChageDecimalPosY(bs.controlPoint2.Y).ToString();
            name[3] = CMath.ChageDecimalPosX(bs.endPoint.X).ToString()
                      + "," + CMath.ChageDecimalPosY(bs.endPoint.Y).ToString();

            return(name);
        }
コード例 #17
0
        /// <summary>
        /// 開始点の移動
        /// </summary>
        /// <param name="mouse"></param>
        public void MoveStartPoint(MouseEventArgs mouse)
        {
            BezierPoint sp = m_list[m_SelectPoint]; //選択している点

            sp.startPoint.Y = CMath.Clamp(mouse.Y, ScrrenTopPosY, ScrrenBottomPosY);
            // 一番最初の開始点だけY軸にしか動かせないように
            if (!isSelectFirstStartPoint())
            {
                var BeforeSelectPoint = m_SelectPoint - 1;
                //X軸の移動 intervalPointPosを加算減算すること隣の点と同じ座標にならないようにする
                int minpx = m_list[BeforeSelectPoint].startPoint.X + intervalPointPos;
                int maxpx = sp.endPoint.X - intervalPointPos;
                sp.startPoint.X = CMath.Clamp(mouse.X, minpx, maxpx);
                //ひとつ前の終了点の移動
                BezierPoint sp2 = m_list[BeforeSelectPoint];
                sp2.endPoint = sp.startPoint;
                m_list[BeforeSelectPoint] = sp2;
            }

            m_list[m_SelectPoint] = sp;
        }
コード例 #18
0
        /// <summary>
        /// 制御点1の移動
        /// </summary>
        /// <param name="mouse"></param>
        public void MoveControl1Point(MouseEventArgs mouse)
        {
            BezierPoint sp = m_list[m_SelectPoint]; //選択している点

            sp.controlPoint1.X = CMath.Clamp(mouse.X, ScrrenLeftPosX + intervalPointPos, ScrrenRightPosX - intervalPointPos);
            sp.controlPoint1.Y = CMath.Clamp(mouse.Y, ScrrenTopPosY, ScrrenBottomPosY);
            //X軸の移動
            if (!isSelectFirstStartPoint())
            {
                int minpx = m_list[m_SelectPoint - 1].endPoint.X + ControlOfSetX;
                sp.controlPoint1.X = CMath.Clamp(sp.controlPoint1.X, minpx, ScrrenRightPosX - 1);
            }

            //X軸の移動
            if (!(isSelectLastEndPoint()))
            {
                int maxpx = m_list[m_SelectPoint + 1].startPoint.X - ControlOfSetX;
                sp.controlPoint1.X = CMath.Clamp(sp.controlPoint1.X, ScrrenLeftPosX, maxpx);
            }
            m_list[m_SelectPoint] = sp;
        }
コード例 #19
0
 /// <summary>
 /// 文字列から座標に変換
 /// </summary>
 /// <param name="values"></param>
 CurvePointControl.BezierPoint ToBezierPoint(string[] values)
 {
     //文字列を数値に変換
     CurvePointControl.BezierPoint bp = new CurvePointControl.BezierPoint();
     try
     {
         bp.startPoint.X    = CMath.ChageNomalPosX(decimal.Parse(values[0]));
         bp.startPoint.Y    = CMath.ChageNomalPosY(decimal.Parse(values[1]));
         bp.controlPoint1.X = CMath.ChageNomalPosX(decimal.Parse(values[2]));
         bp.controlPoint1.Y = CMath.ChageNomalPosY(decimal.Parse(values[3]));
         bp.controlPoint2.X = CMath.ChageNomalPosX(decimal.Parse(values[4]));
         bp.controlPoint2.Y = CMath.ChageNomalPosY(decimal.Parse(values[5]));
         bp.endPoint.X      = CMath.ChageNomalPosX(decimal.Parse(values[6]));
         bp.endPoint.Y      = CMath.ChageNomalPosY(decimal.Parse(values[7]));
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message);
         Console.WriteLine(e.Message);       // エラーメッセージを表示
     }
     return(bp);
 }
コード例 #20
0
        /// <summary>
        ///    開始点セット
        /// </summary>
        /// <param name="y"></param>
        public int SetStartPointY(int y)
        {
            if (m_SelectMode == SelectMode.None)
            {
                return(0);
            }

            BezierPoint sp = m_list[m_SelectPoint]; //最初の点のY

            sp.startPoint.Y       = CMath.Clamp(y, ScrrenTopPosY, ScrrenBottomPosY);
            m_list[m_SelectPoint] = sp;

            //最初の開始点を選択してないなら前の終了点も移動させる
            if (!isSelectFirstStartPoint())
            {
                var         BeforeSelectPoint = m_SelectPoint - 1;
                BezierPoint sp2 = m_list[BeforeSelectPoint];
                sp2.endPoint = sp.startPoint;
                m_list[BeforeSelectPoint] = sp2;
            }
            return(sp.startPoint.Y);
        }
コード例 #21
0
        public void SetList(List <CurvePointControl.BezierPoint> list)
        {
            m_list = list;
            m_Csvlist.Clear();
            foreach (CurvePointControl.BezierPoint item in m_list)
            {
                CSVPoint cp = new CSVPoint();
                cp.startPoint       = new decimal[2];
                cp.controlPoint1    = new decimal[2];
                cp.controlPoint2    = new decimal[2];
                cp.endPoint         = new decimal[2];
                cp.startPoint[0]    = CMath.ChageDecimalPosX(item.startPoint.X);
                cp.startPoint[1]    = CMath.ChageDecimalPosY(item.startPoint.Y);
                cp.controlPoint1[0] = CMath.ChageDecimalPosX(item.controlPoint1.X);
                cp.controlPoint1[1] = CMath.ChageDecimalPosY(item.controlPoint1.Y);
                cp.controlPoint2[0] = CMath.ChageDecimalPosX(item.controlPoint2.X);
                cp.controlPoint2[1] = CMath.ChageDecimalPosY(item.controlPoint2.Y);
                cp.endPoint[0]      = CMath.ChageDecimalPosX(item.endPoint.X);
                cp.endPoint[1]      = CMath.ChageDecimalPosY(item.endPoint.Y);

                m_Csvlist.Add(cp);
            }
        }
コード例 #22
0
        /// <summary>
        /// すべての制御点の位置を整理させる
        /// </summary>
        public void OrganizeControlPoint()
        {
            int ListMax = m_list.Count();
            int LastNum = m_list.Count() - 1;

            //制御点がいてはいけない場所なら位置を補正する
            for (int i = 0; i < ListMax; i++)
            {
                BezierPoint sp = m_list[i]; //選択している点
                //左端以外なら
                if (i != 0)
                {
                    sp.controlPoint1.X = CMath.Clamp(sp.controlPoint1.X, m_list[i - 1].endPoint.X + ControlOfSetX, ScrrenRightPosX);
                    sp.controlPoint2.X = CMath.Clamp(sp.controlPoint2.X, m_list[i - 1].endPoint.X + ControlOfSetX, ScrrenRightPosX);
                }
                //右端以外なら
                if (i != LastNum)
                {
                    sp.controlPoint1.X = CMath.Clamp(sp.controlPoint1.X, ScrrenLeftPosX, m_list[i + 1].startPoint.X - ControlOfSetX);
                    sp.controlPoint2.X = CMath.Clamp(sp.controlPoint2.X, ScrrenLeftPosX, m_list[i + 1].startPoint.X - ControlOfSetX);
                }
                m_list[i] = sp;
            }
        }