C# カーブエディタ作成 右クリック動作

前の記事

bravememo.hatenablog.com

完成図

GAME DVR で録画してるので右クリックメニューが映りません。


CurveEditor 右クリック動作実装

右クリックでいろいろ

右クリックでコンテキストメニューを表示するにはcontextMenuStripが必要です。 Form上にcontextMenuStripを配置したらcontextMenuStripを選択すると入力項目が出るので、 下記画像のように入力すれば外観の完成です。

f:id:Brave345:20191216171533p:plain

あとは追加したメニューをダブルクリックしてクリックイベントを追加してイベントを実装してあげれば完成です。

点の追加と削除はいままで実装してたやつをそのまま使いました。

線を直線にする機能を開始点と終了点でベクトル取り、その中間点に制御点を置くことで実現しました。

グラフのリセット機能

いよいよいままで飾りだったメニューバーの実装です。 今回は新規作成とエディタの終了部分を実装しました。 項目は先ほどのcontextMenuStripと同じことをMenuStripでもやればできます。

f:id:Brave345:20191216171601p:plain

あとは新規作成の項目を選択して下記画像のようにショートカットキーを設定してあげれば完成です。 f:id:Brave345:20191216171643p:plain

以下参考URL

builder.japan.zdnet.com

ソースコード

いつものように差分だけ

//CurvePointControl.cs
       /// <summary>
        /// グラフの初期化
        /// </summary>
        public void CurveEditorInit()
        {
            m_SelectMode = SelectMode.None;
            CancelMovePoint();
            m_SelectPoint = 0;
            m_list.Clear();
            //初期の曲線設定
            BezierPoint startBezirPoint = new BezierPoint();
            startBezirPoint.startPoint = new Point(ScrrenLeftPosX, ScrrenBottomPosY);
            startBezirPoint.endPoint = new Point(ScrrenRightPosX, ScrrenTopPosY);
            //適当に右にずらした位置に制御点を置く
            startBezirPoint.controlPoint1 = new Point(ScrrenLeftPosX + 30, ScrrenCenterpPosY + 30);
            startBezirPoint.controlPoint2 = new Point(ScrrenLeftPosX + 30, ScrrenCenterpPosY - 30);
            m_list.Add(startBezirPoint);
        }
//Form.cs
    //右クリック動作----------------------------------------------------------------
        private void AddPointToolStripMenuItem_Click(object sender, EventArgs e)
        {
            m_CurvePointControl.AddPoint(m_MousePos);
            pictureBox1.Refresh();//再描画
        }

        private void DeletePointToolStripMenuItem_Click(object sender, EventArgs e)
        {
            m_CurvePointControl.DeletePoint();//点削除
            pictureBox1.Refresh();//再描画
        }
        /// <summary>
        /// 線を直線にする
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StraightLineEditToolStripMenuItem_Click(object sender, EventArgs e)
        {
            m_CurvePointControl.StraightLineEdit();
        }
        //  メニューバー--------------------------------------------------------------------------
        private void 新規作成NToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("現在あるグラフをリセットしてよろしいでしょうか?",
    "質問",
    MessageBoxButtons.OKCancel,
    MessageBoxIcon.Exclamation,
    MessageBoxDefaultButton.Button2);

            //何が選択されたか調べる
            if (result == DialogResult.OK)
            {
                //「はい」が選択された時
                m_CurvePointControl.CurveEditorInit();
                  pictureBox1.Refresh();//再描画
            }

        }
        /// <summary>
        /// エディタの終了
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void menuEnd_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("アプリケーションを終了してもよろしいでしょうか?",
"質問",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button2);

            //何が選択されたか調べる
            if (result == DialogResult.OK)
            {
                //「はい」が選択された時
                Close();
            }

        }

終わりに

次はグラフの保存とエディタでグラフの読み込みを実装していきたい。

次の記事

bravememo.hatenablog.com