/// <summary>
        /// チェックポイント削除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Delete_Click(object sender, EventArgs e)
        {
            if (null != EditCheckPoint)
            {
                CheckPoints.Remove(EditCheckPoint);
                EditCheckPoint = null;
                listbox_CheckPoint.SelectedIndex = -1;

                UpdateCheckPointList();
            }
        }
        /// <summary>
        /// チェックポイントをリストに追加
        /// </summary>
        /// <param name="newCP"></param>
        private void AddCheckPoint(CheckPointData newCP)
        {
            EditListIndex = listbox_CheckPoint.SelectedIndex;

            if (EditListIndex == -1)
            {
                // 新規追加(末尾)
                CheckPoints.Add(newCP);
            }
            else
            {
                // 挿入
                CheckPoints.Insert(EditListIndex, newCP);
            }

            string listItm = newCP.wdPosX.ToString() + "," + newCP.wdPosY.ToString();
            listbox_CheckPoint.Items.Add(listItm);
        }
        /// <summary>
        /// バイナリデータ ロード
        /// </summary>
        /// <param name="strm"></param>
        private void Read(BinaryReader strm)
        {
            strm.ReadInt32();   // FileVersion
            strm.ReadInt32();   // セクション数

            LRF_LogFileName = strm.ReadString();

            // マップレイヤー セクション
            {
                int numLayer = strm.ReadInt32();

                WaitProressBar.Value = 0;
                WaitProressBar.Maximum = numLayer;
                WaitProressBar.Step = 1;

                MapLyaer = new List<LayerData>();
                for (int i = 0; i < numLayer; i++)
                {
                    LayerData layer = new LayerData();
                    layer.Read(strm);

                    layer.MakeMapBmp(LRF_Range, LRF_ScaleOfPixel, LRF_PixelSize, colLayerPixel, colLayerBase);
                    MapLyaer.Add(layer);

                    WaitProressBar.PerformStep();
                }
            }

            // チェックポイント セクション
            {
                int numCp = strm.ReadInt32();

                CheckPoints = new List<CheckPointData>();
                for (int i = 0; i < numCp; i++)
                {
                    CheckPointData cp = new CheckPointData();
                    cp.Read(strm);
                }
                UpdateCheckPointList();
            }

            WaitProressBar.Value = 0;
        }
 /// <summary>
 /// リスト選択解除
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btn_DisSelect_Click(object sender, EventArgs e)
 {
     // 選択解除
     EditCheckPoint = null;
     listbox_CheckPoint.SelectedIndex = -1;
 }
        // チェックポイント マウス操作 ===============================================================================================================
        /// <summary>
        /// MouseButton Down
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pb_CPMap_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                if (rbtn_AddPoint.Checked)
                {
                    // チェックポイント新規 追加
                    CheckPointData newCP = new CheckPointData(e.X - ViewTransX, e.Y - ViewTransY);
                    AddCheckPoint(newCP);
                }
                else if (rbtn_Edit.Checked)
                {
                    // オブジェクト移動
                    wldMoveFlg = true;
                }
            }
            else if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                // View移動
                viewMoveFlg = true;
            }

            // 移動前の座標を記憶
            msX = e.X;
            msY = e.Y;

            if (null != EditCheckPoint)
            {
                stX = (int)EditCheckPoint.wdPosX;
                stY = (int)EditCheckPoint.wdPosY;
                //stAng = EditLayer.GetLocalAng();
            }

            if (viewMoveFlg)
            {
                stX = (int)ViewTransX;
                stY = (int)ViewTransY;
                stAng = ViewScale;
            }
        }
        /// <summary>
        /// リスト選択
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listbox_CheckPoint_SelectedIndexChanged(object sender, EventArgs e)
        {
            EditListIndex = listbox_CheckPoint.SelectedIndex;

            if (EditListIndex >= 0 && CheckPoints.Count > 0)
            {
                EditCheckPoint = CheckPoints[EditListIndex];
                //rbtn_AddPoint.Checked = false;
                //rbtn_Edit.Checked = true;
            }
            else
            {
                EditCheckPoint = null;
            }
        }
        /// <summary>
        /// チェックポイント マーカ表示
        /// </summary>
        /// <param name="g"></param>
        /// <param name="cp"></param>
        /// <param name="pastCp"></param>
        private void DrawCheckPoint(Graphics g, CheckPointData cp, CheckPointData pastCp, bool bSelected)
        {
            int nonScl = (int)(10.0 / ViewScale);
            int nonSclHf = nonScl / 2;
            int nonScl3Q = nonSclHf * 3 / 4;

            if (nonSclHf <= 0) nonSclHf = 1;
            if (nonScl3Q <= 0) nonScl3Q = 1;

            g.ResetTransform();
            // View
            g.ScaleTransform(ViewScale, ViewScale, MatrixOrder.Append);
            g.TranslateTransform(ViewTransX, ViewTransY, MatrixOrder.Append);

            // チェックポイント間のライン
            if (null != pastCp)
            {
                g.DrawLine(Pens.Blue,
                           (float)pastCp.wdPosX, (float)pastCp.wdPosY,
                           (float)cp.wdPosX, (float)cp.wdPosY);
            }

            // WorldPos
            g.TranslateTransform((float)cp.wdPosX, (float)cp.wdPosY, MatrixOrder.Prepend);

            // 菱型
            /*
            Point[] ps = {
                 new Point( 0, -nonScl3Q),
                 new Point(nonScl3Q, 0),
                 new Point(0, nonScl3Q),
                 new Point(-nonScl3Q, 0)
             };
            g.FillPolygon(Brushes.Yellow, ps);
            */
            Pen dPen = Pens.Cyan;
            if (bSelected) dPen = Pens.Yellow;

            g.DrawEllipse(dPen, -nonSclHf, -nonSclHf, nonScl, nonScl);
        }