Example #1
0
        /// <summary>
        /// マーカー描画
        /// </summary>
        /// <param name="g"></param>
        /// <param name="fScale"></param>
        /// <param name="robot"></param>
        /// <param name="brush"></param>
        /// <param name="size"></param>
        static public void DrawMaker(Graphics g, float fScale, Brush brush, DrawMarkPoint robot, int size)
        {
            double mkX   = robot.x * fScale;
            double mkY   = robot.y * fScale;
            double mkDir = robot.theta;

            DrawMaker(g, brush, mkX, mkY, mkDir, (double)size);
        }
Example #2
0
        private void DrawMakerLine(Graphics g, float fScale, DrawMarkPoint robotA, DrawMarkPoint robotB, Pen pen, int size)
        {
            var P1 = new PointF(
                (float)(robotA.x * fScale),
                (float)(robotA.y * fScale));
            var P2 = new PointF(
                (float)(robotB.x * fScale),
                (float)(robotB.y * fScale));

            g.DrawLine(pen, P1, P2);
        }
        private void picbox_AreaMap_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                //
                if (bMouseMove)
                {
                    viewMoveAddX = (MouseStX - e.X);
                    viewMoveAddY = (MouseStY - e.Y);
                }
                else if (selCpIndex != -1)
                {
                    LocationSystem LocSys = BrainCtrl.LocSys;

                    int       msPosX    = (e.X - MouseStX);
                    int       msPosY    = (e.Y - MouseStY);
                    MarkPoint _checkPos = new MarkPoint(new DrawMarkPoint(msPosX, msPosY, 0.0), LocSys);

                    Vector3 baseCpPos = new Vector3((moveCpPos.x + _checkPos.x)
                                                    , (moveCpPos.y + _checkPos.y)
                                                    , 0.0);

                    Vector3 nowCpPos = LocSys.RTS.GetCheckPoint(selCpIndex);

                    if (nowCpPos != baseCpPos)
                    {
                        LocSys.RTS.SetCheckPoint(selCpIndex, baseCpPos);
                    }
                }
            }
            else if (e.Button == MouseButtons.Right)
            {
            }
            else
            {
                if (checkBoxCheckPointModifi.Checked)
                {
                    //if (radioButtonPointMove.Checked && (Control.ModifierKeys & Keys.Control) == Keys.Control)
                    {
                        LocationSystem LocSys = BrainCtrl.LocSys;

                        DrawMarkPoint drawCenter = new DrawMarkPoint(LocSys.R1, LocSys);

                        // センターを左下にずらす Width x 0.1, Height x 0.1
                        double viewCenterX = (picbox_AreaMap.Width * 0.5) - (picbox_AreaMap.Width * 0.1);
                        double viewCenterY = (picbox_AreaMap.Height * 0.5) + (picbox_AreaMap.Height * 0.1);

                        int msPosX = e.X - (int)((-drawCenter.x + viewCenterX) - viewScrollX);
                        int msPosY = e.Y - (int)((-drawCenter.y + viewCenterY) - viewScrollY);

                        MarkPoint mouseRosPos = new MarkPoint(new DrawMarkPoint(msPosX, msPosY, 0.0), LocSys);

                        {
                            // 移動チェックポイント選択
                            selCpIndex = LocSys.GetCheckPointIndex(mouseRosPos.x, mouseRosPos.y);
                            if (selCpIndex != -1)
                            {
                                // 移動チェックポイント取得
                                moveCpPos = LocSys.RTS.GetCheckPoint(selCpIndex);
                            }
                        }
                    }
                }
            }
        }
        // -----------------------------------------------------------------
        // マップスクロール
        private void picbox_AreaMap_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left /*&& selAreaMapMode == MAP_MODE.AREA_MAP*/)
            {
                //どの修飾子キー(Shift、Ctrl、およびAlt)が押されているか

                /*
                 * if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
                 *  Console.WriteLine("Shiftキーが押されています。");
                 * if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
                 *  Console.WriteLine("Ctrlキーが押されています。");
                 * if ((Control.ModifierKeys & Keys.Alt) == Keys.Alt)
                 *  Console.WriteLine("Altキーが押されています。");
                 */
                if (checkBoxCheckPointModifi.Checked)
                {
                    LocationSystem LocSys = BrainCtrl.LocSys;

                    DrawMarkPoint drawCenter = new DrawMarkPoint(LocSys.R1, LocSys);

                    // センターを左下にずらす Width x 0.1, Height x 0.1
                    double viewCenterX = formDraw.GetMapWndowCenterX(picbox_AreaMap); // (picbox_AreaMap.Width * 0.5) - (picbox_AreaMap.Width * 0.1);
                    double viewCenterY = formDraw.GetMapWndowCenterY(picbox_AreaMap); //(picbox_AreaMap.Height * 0.5) + (picbox_AreaMap.Height * 0.1);

                    int       msPosX      = e.X - (int)((-drawCenter.x + viewCenterX) - viewScrollX);
                    int       msPosY      = e.Y - (int)((-drawCenter.y + viewCenterY) - viewScrollY);
                    MarkPoint mouseRosPos = new MarkPoint(new DrawMarkPoint(msPosX, msPosY, 0.0), LocSys);

                    if (radioButtonPointMove.Checked && (Control.ModifierKeys & Keys.Control) == Keys.Control)
                    {
                        // 移動チェックポイント選択
                        selCpIndex = LocSys.GetCheckPointIndex(mouseRosPos.x, mouseRosPos.y);
                        if (selCpIndex != -1)
                        {
                            // 移動チェックポイント取得
                            moveCpPos = LocSys.RTS.GetCheckPoint(selCpIndex);
                        }
                        else
                        {
                            // スクロール
                            bMouseMove = true;
                        }
                    }
                    else if (radioButtonPointAdd.Checked)
                    {
                        // チェックポイント新規追加
                        Vector3 baseCpPos = new Vector3(mouseRosPos.x, mouseRosPos.y, 0.0);

                        LocSys.RTS.AddCheckPoint((int)numericUD_CheckPoint.Value, baseCpPos);
                    }
                    else if (radioButtonPointDelete.Checked)
                    {
                        // チェックポイント削除
                        Vector3 baseCpPos = new Vector3(mouseRosPos.x, mouseRosPos.y, 0.0);

                        selCpIndex = LocSys.GetCheckPointIndex(mouseRosPos.x, mouseRosPos.y);
                        if (selCpIndex != -1)
                        {
                            LocSys.RTS.RemoveCheckPoint(selCpIndex);
                        }
                        selCpIndex = -1;
                    }
                    else
                    {
                        // スクロール
                        bMouseMove = true;
                    }
                }
                else
                {
                    // スクロール
                    bMouseMove = true;
                }

                MouseStX     = e.X;
                MouseStY     = e.Y;
                viewMoveAddX = 0;
                viewMoveAddY = 0;
            }
        }
Example #5
0
 static public void DrawMaker(Graphics g, Brush brush, DrawMarkPoint robot, int size = 8)
 {
     DrawMaker(g, 1.0f, brush, robot, size);
 }
Example #6
0
        /// <summary>
        /// PictureBox内へのワールドマップ描画
        /// </summary>
        /// <param name="g"></param>
        /// <param name="CersioCt"></param>
        /// <param name="BrainCtrl"></param>
        public void AreaMap_Draw_WorldMap(Graphics g, PictureBox picbox_AreaMap, ref LocationSystem LocSys, int scrollX, int scrollY)
        {
            // 全体マップ描画
            float   viewScale = 1.0f;// viewScaleWorld;
            MapData mapData   = LocSys.mapData;


            // マップ外カラー
            g.FillRectangle(Brushes.DarkGray, 0, 0, picbox_AreaMap.Width, picbox_AreaMap.Height);

            {
                float wdAspect = (float)LocSys.mapBmp.Width / (float)worldMapBmp.Width;
                float htAspect = (float)LocSys.mapBmp.Height / (float)worldMapBmp.Height;

                if (wdAspect < htAspect)
                {
                    viewScale = (float)(1.0 / htAspect);
                }
                else
                {
                    viewScale = (float)(1.0 / wdAspect);
                }
            }


            g.ResetTransform();
            //g.TranslateTransform(-ctrX, -ctrY, MatrixOrder.Append);
            //g.RotateTransform((float)layer.wAng, MatrixOrder.Append);
            //g.ScaleTransform(viewScale, viewScale, MatrixOrder.Append);
            g.TranslateTransform((float)(-scrollX),
                                 (float)(-scrollY),
                                 MatrixOrder.Append);

            if (null != worldMapBmp)
            {
                g.DrawImage(worldMapBmp, 0, 0);
            }

            g.ResetTransform();
            g.TranslateTransform((float)(-(mapData.MapOrign.x / mapData.Resolution) * viewScale) - scrollX,
                                 (float)(-(mapData.MapOrign.y / mapData.Resolution) * viewScale) - scrollY,
                                 MatrixOrder.Append);

            //g.ResetTransform();

            // 各マーカーの位置を描画
            //LocSys.DrawWorldMap(g, viewScale);
            DrawMaker(g, viewScale, Brushes.Red, new DrawMarkPoint(LocSys.R1, LocSys), 10);

            // チェックポイント描画
            {
                double dir = 0;

                DrawMarkPoint prvPos = new DrawMarkPoint(LocSys.R1, LocSys);

                for (int i = LocSys.RTS.GetCheckPointIdx(); i < LocSys.RTS.GetNumCheckPoints(); i++)
                {
                    Vector3 tgtPos = LocSys.RTS.GetCheckPoint(i);
                    //BrainCtrl.RTS.getNowTargetDir(ref dir);
                    DrawMarkPoint tgtMk = new DrawMarkPoint(new MarkPoint(tgtPos.x, tgtPos.y, dir), LocSys);

                    // ターゲットまでのライン
                    DrawMakerLine(g, viewScale, prvPos, tgtMk, Pens.Olive, 1);

                    g.DrawString(i.ToString("D2"), fntMini, Brushes.Green, (int)(tgtMk.x * viewScale), (int)(tgtMk.y * viewScale));

                    prvPos.x = tgtMk.x;
                    prvPos.y = tgtMk.y;
                }
            }
        }
Example #7
0
/*
 *      /// <summary>
 *      /// エリアマップ生成
 *      /// </summary>
 *      /// <param name="worldBMP"></param>
 *      /// <param name="picbox_AreaMap"></param>
 *      /// <returns></returns>
 *      public Bitmap MakePictureBoxAreaMap(Bitmap worldBMP, PictureBox picbox_AreaMap, ref LocationSystem LocSys, int scrollX, int scrollY)
 *      {
 *          {
 *              //int picW = (int)(viewScale * worldBMP.Width + 0.5);
 *              //int picH = (int)(viewScale * worldBMP.Height + 0.5);
 *
 *              areaMapBmp = new Bitmap(picbox_AreaMap.Width, picbox_AreaMap.Height);
 *              Graphics g = Graphics.FromImage(areaMapBmp);
 *
 *              DrawMarkPoint drawCenter = new DrawMarkPoint(LocSys.R1, LocSys);
 *
 *              g.ResetTransform();
 *              g.TranslateTransform( (float)(-drawCenter.x - (worldBMP.Width * 0.5) + (picbox_AreaMap.Width*0.5)) - scrollX,
 *                                    (float)(-drawCenter.y - (worldBMP.Height * 0.5) + (picbox_AreaMap.Height * 0.5)) - scrollY,
 *                                    MatrixOrder.Append);
 *              //g.RotateTransform((float)layer.wAng, MatrixOrder.Append);
 *              //g.ScaleTransform(viewScale, viewScale, MatrixOrder.Append);
 *
 *              g.DrawImage(worldBMP, 0, 0);
 *
 *              g.Dispose();
 *          }
 *
 *          return areaMapBmp;
 *      }
 */
        /// <summary>
        /// PictureBox内へのマップ描画(等倍)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void AreaMap_Draw_Area(Graphics g, PictureBox picbox_AreaMap, ref LocationSystem LocSys, int scrollX, int scrollY, int selCpIndex, bool bHandleTarget)
        {
            Bitmap  worldBMP = LocSys.mapBmp;
            MapData mapData  = LocSys.mapData;
            //Bitmap areaBMP = MakePictureBoxAreaMap(worldBMP, picbox_AreaMap, ref LocSys, scrollX, scrollY);
            //float viewScale = 1.0f;

            DrawMarkPoint drawCenter = new DrawMarkPoint(LocSys.R1, LocSys);

            // センターを左下にずらす Width x 0.1, Height x 0.1
            double viewCenterX = GetMapWndowCenterX(picbox_AreaMap); // (picbox_AreaMap.Width * 0.5) - (picbox_AreaMap.Width * 0.1);
            double viewCenterY = GetMapWndowCenterY(picbox_AreaMap); //(picbox_AreaMa.pHeight * 0.5) + (picbox_AreaMap.Height * 0.1);

            // エリアマップ描画
            g.ResetTransform();
            g.TranslateTransform((float)(-drawCenter.x + (mapData.MapOrign.x / mapData.Resolution) + viewCenterX) - scrollX,
                                 (float)(-drawCenter.y + (mapData.MapOrign.y / mapData.Resolution) + viewCenterY) - scrollY,
                                 MatrixOrder.Append);
            //g.RotateTransform((float)layer.wAng, MatrixOrder.Append);
            //g.ScaleTransform(1.0f, -1.0f, MatrixOrder.Append);

            g.InterpolationMode = InterpolationMode.NearestNeighbor;
            g.DrawImage(worldBMP, 0, 0);

            // ------------------------

            g.ResetTransform();
            g.TranslateTransform((float)(-drawCenter.x + viewCenterX) - scrollX,
                                 (float)(-drawCenter.y + viewCenterY) - scrollY,
                                 MatrixOrder.Append);
            //g.ScaleTransform(1.0f, -1.0f, MatrixOrder.Append);

            // 現在位置描画
            DrawMaker(g, Brushes.Red, new DrawMarkPoint(LocSys.R1, LocSys), 8);

            // チェックポイント描画
            {
                double prvPosX = LocSys.R1.x;
                double prvPosY = LocSys.R1.y;

                for (int i = LocSys.RTS.GetCheckPointIdx(); i < LocSys.RTS.GetNumCheckPoints(); i++)
                {
                    //Vector3 checkPnt = LocSys.RTS.GetCheckPoint(i);
                    Vector3 checkPnt = LocSys.RTS.GetCheckPointToWayPoint(i);

                    //BrainCtrl.RTS.getNowTargetDir(ref dir);
                    DrawMarkPoint checkPntMk = new DrawMarkPoint(new MarkPoint(checkPnt.x, checkPnt.y, 0.0), LocSys);
                    checkPntMk.theta = -checkPnt.z;

                    if (selCpIndex == i)
                    {
                        // 選択中のチェックポイント
                        DrawMaker(g, Brushes.Purple, checkPntMk, 8);
                    }
                    else
                    {
                        DrawMaker(g, Brushes.GreenYellow, checkPntMk, 8);
                    }

                    // ターゲットまでのライン
                    DrawMakerLine(g, 1.0f,
                                  new DrawMarkPoint(new MarkPoint(prvPosX, prvPosY, 0), LocSys),
                                  checkPntMk,
                                  Pens.Olive, 1);

                    g.DrawString(i.ToString("D2"), fntMini, Brushes.Green, checkPntMk.x, checkPntMk.y);

                    prvPosX = checkPnt.x;
                    prvPosY = checkPnt.y;
                }
            }

            // ターゲット描画(ハンドル操作がVRの場合)
            if (bHandleTarget)
            {
                Vector3       nowtgtPos = LocSys.RTS.GetNowTargetPositon();
                DrawMarkPoint tgtMk     = new DrawMarkPoint(new MarkPoint(nowtgtPos.x, nowtgtPos.y, 0.0), LocSys);

                DrawMakerNoDir(g, Brushes.DeepPink, tgtMk, 6);

                // ターゲットまでのライン
                DrawMakerLine(g, 1.0f,
                              new DrawMarkPoint(LocSys.R1, LocSys),
                              tgtMk,
                              Pens.DeepPink, 1);
            }
        }
Example #8
0
 static public void DrawMakerNoDir(Graphics g, Brush brush, DrawMarkPoint robot, int size = 8)
 {
     DrawMakerNoDir(g, brush, robot.x, robot.y, size);
 }