/// <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); }
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; } }
static public void DrawMaker(Graphics g, Brush brush, DrawMarkPoint robot, int size = 8) { DrawMaker(g, 1.0f, brush, robot, size); }
/// <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; } } }
/* * /// <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); } }
static public void DrawMakerNoDir(Graphics g, Brush brush, DrawMarkPoint robot, int size = 8) { DrawMakerNoDir(g, brush, robot.x, robot.y, size); }