/// <summary> /// Сшивка по нажатию клавиши Enter /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainForm_KeyUp(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { if ((positionCounter == 0) && (crosslinker.getXY2()[0] >= 0)) { int[] real_coords = crosslinker.getRealCoords4(); Console.WriteLine("real_coords are " + real_coords[0] + "," + real_coords[1]); //на предсказанную карту нанесем последний скан for (int i = 0; i < crosslinker.scan1.xyScan.Count; i++) { predictedMap[crosslinker.scan1.xyScan[i][0] + real_coords[0], crosslinker.scan1.xyScan[i][1] + real_coords[1]] = new Pixel(Parameters.wallColor); } MainForm.drawBitmapOnPictureBox(pictureBox2, predictedMap.GetBitmap()); currentRobotPosX = crosslinker.getXY1()[0]; currentRobotPosY = crosslinker.getXY1()[1]; currentErrorX = currentRobotPosX - real_coords[0]; currentErrorY = currentRobotPosY - real_coords[1]; labelCoords.Text = "Real coords: " + currentRobotPosX + "," + currentRobotPosY + "\n" + "Supp coords: " + real_coords[0] + "," + real_coords[1] + "\n" + "Error: " + Math.Pow(currentErrorX * currentErrorX + currentErrorY * currentErrorY, 0.5); crosslinker.setCenter0(real_coords[0], real_coords[1]); crosslinker.scan0 = new Scan(crosslinker.scan1); crosslinker.setCenter1(-1, -1); Bitmap preciseMapBmp = mainForm.environment.preciseMap.GetBitmap(); Graphics graphics = Graphics.FromImage(preciseMapBmp); interfaceDrawing(preciseMapBmp, graphics); } } }
/// <summary> /// Рассчитывает карту indoor-среды для заданной карты. /// </summary> /// <param name="map"></param> /// <returns></returns> private static PixelMap calculateIndoorMap(PixelMap map) { Bitmap preciseIndoorMapBmp = map.GetBitmap(); Pen pen = new Pen(Parameters.wallColor); SolidBrush brush = new SolidBrush(Parameters.wallColor); Graphics graphics = Graphics.FromImage(preciseIndoorMapBmp); int r = Parameters.getR_robot() + Parameters.getR_robot() / 2; //увеличенные размеры робота, для того, чтобы на угловых участках траектории сглаживание происходило без проблем int d = Parameters.getD_robot() + Parameters.getR_robot(); for (int i = 0; i < map.Width; i++) { for (int j = 0; j < map.Height; j++) { if (map[i, j].Color == Parameters.wallColor) { try { FillCircle(ref graphics, ref pen, ref brush, r, d, ref i, ref j); } catch (Exception ex) { } } } } // preciseIndoorMapBmp.Save("C:\\Adocuments\\Library\\Clapeyron_ind\\task6 map creation\\PreciseIndoorMap13.png"); PixelMap preciseIndoorMap = new PixelMap(preciseIndoorMapBmp); return(preciseIndoorMap); }
public Mode2ManualMapCreation(MainForm mainForm) : base(mainForm) { if (this.mainForm != null) { initialize(); //устанавливаем размеры предсказанной карты такие же, как и оригинальной (оригинальная сразу должна быть с запасом) predictedMap = new PixelMap(mainForm.environment.getPreciseBmp().Width, mainForm.environment.getPreciseBmp().Height, 0, 0, 0); MainForm.drawBitmapOnPictureBox(pictureBox2, predictedMap.GetBitmap()); } }
/// <summary> /// Рисует сшитые сканы на одном холсте. /// </summary> /// <param name="X1_rl"></param> /// <param name="Y1_rl"></param> private void drawCrosslinkedScans(int X1_rl, int Y1_rl) { int X0 = crosslinker.getXY0()[0]; int Y0 = crosslinker.getXY0()[1]; // // int X2 = crosslinker.getXY2()[0]; // int Y2 = crosslinker.getXY2()[1]; // PixelMap scan01 = new PixelMap(Parameters.getD_scan1() + Parameters.getR_scan(), Parameters.getD_scan1() + Parameters.getR_scan(), 0, 0, 0); int C = (Parameters.getD_scan() + Parameters.getR_scan()) / 2; for (int i = 0; i < crosslinker.scan0.xyScan.Count; i++) { scan01[crosslinker.scan0.xyScan[i][0] + C, crosslinker.scan0.xyScan[i][1] + C] = new Pixel(Parameters.startColor); } for (int i = 0; i < crosslinker.scan1.xyScan.Count; i++) { scan01[crosslinker.scan1.xyScan[i][0] + X1_rl - X0 + C, crosslinker.scan1.xyScan[i][1] + Y1_rl - Y0 + C] = new Pixel(Parameters.finishColor); } MainForm.drawBitmapOnPictureBox(pictureBox4, scan01.GetBitmap()); }
public Bitmap getBitmap() { return(scanBmp.GetBitmap()); }
public Bitmap getPreciseBmp() { return(preciseMap.GetBitmap()); }