/// <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());
     }
 }
Ejemplo n.º 4
0
        /// <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());
        }
Ejemplo n.º 5
0
 public Bitmap getBitmap()
 {
     return(scanBmp.GetBitmap());
 }
 public Bitmap getPreciseBmp()
 {
     return(preciseMap.GetBitmap());
 }