private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            #region dibujar mayas_corner

            float refPoint_X = 0;
            float refPoint_Y = 0;
            float refPoint_Y_1 = 0;

            double delta_X_H = 0;
            float delta_Y_H = 0;
            double delta_X_V = 0;
            double delta_Y_V = 0;

            double dist_X_H = 0;
            float dist_Y_H = 0;
            double dist_X_V = 0;
            double dist_Y_V = 0;

            for (int k = 0; k < mayas_corner.Count ; k++)
            {
                Circle lstCirculos = mayas_corner[k];// 46 + 2 (drag & drop circles) =  48 insted (horizontal lines)
                                                                             //  28        (vertical lines)

                #region horizontal lines of the dynamic grid - Creation and Drawing

                int numHorizontalLines = (int)lstCirculos.getY();

                double distHorizontal1 = lstCirculos.circles[2].y - lstCirculos.circles[0].y;
                double intervalHorizonatal1 = distHorizontal1 / numHorizontalLines;

                double distHorizontal2 = lstCirculos.circles[3].y - lstCirculos.circles[1].y;
                double intervalHorizontal2 = distHorizontal2 / numHorizontalLines;

                double intervalHorizontalX1 = (lstCirculos.circles[2].x - lstCirculos.circles[0].x) * 1.0 / numHorizontalLines;
                double intervalHorizontalX2 = (lstCirculos.circles[3].x - lstCirculos.circles[1].x) * 1.0 / numHorizontalLines;

                for (int i = 0; i <= numHorizontalLines; i++)
                {

                    //e.Graphics.DrawLine(
                    //           new Pen(Color.Red, 1f),
                    //           new Point((int)((i * intervalHorizontalX1) + lstCirculos.circles[0].x), (int)((i * intervalHorizonatal1) + lstCirculos.circles[0].y)),
                    //           new Point((int)((i * intervalHorizontalX2) + lstCirculos.circles[1].x), (int)((i * intervalHorizontal2) + lstCirculos.circles[1].y)));

                }
                #endregion

                #region Vertical lines of the dynamic grid - Creation and Drawing - Creating lstAbsQuestion and lstAbsOnjects

                int numVerticalLines = (int)lstCirculos.getX();

                double distVertical1 = lstCirculos.circles[1].x - lstCirculos.circles[0].x;
                double intervalVertical1 = distVertical1 / numVerticalLines;

                double distVertical2 = lstCirculos.circles[3].x - lstCirculos.circles[2].x;
                double intervalVertical2 = distVertical2 / numVerticalLines;

                double intervalVerticalY1 = (lstCirculos.circles[1].y - lstCirculos.circles[0].y) * 1.0 / numVerticalLines;
                double intervalVerticalY2 = (lstCirculos.circles[3].y - lstCirculos.circles[2].y) * 1.0 / numVerticalLines;

                int index_x = 1;
                int aux_count = 0;
                int aux_indice_columna = 0;
                //pass throug of all the vertical lines
                for (int i = 0; i <= numVerticalLines; i++)
                {
                    #region Vertical lines of the dynamic grid - Drawing
                    //e.Graphics.DrawLine(
                    //           new Pen(Color.Red, 1f),
                    //           new Point((int)((i * intervalVertical1) + lstCirculos.circles[0].x), (int)((i * intervalVerticalY1) + lstCirculos.circles[0].y)),
                    //           new Point((int)((i * intervalVertical2) + lstCirculos.circles[2].x), (int)((i * intervalVerticalY2) + lstCirculos.circles[2].y)));
                    #endregion
                    if (k < 2)
                    //if(false)
                    {
                        #region Validation Areas of abstract DNI and Options Albergue

                        dist_X_V = Math.Abs(((i * intervalVertical1) + lstCirculos.circles[0].x) - ((i * intervalVertical2) + lstCirculos.circles[2].x));
                        dist_Y_V = Math.Abs(((i * intervalVerticalY1) + lstCirculos.circles[0].y) - ((i * intervalVerticalY2) + lstCirculos.circles[2].y));

                        delta_X_V = (dist_X_V * 1.0 / numHorizontalLines);
                        delta_Y_V = (dist_Y_V * 1.0 / numHorizontalLines);

                        int sign = 1;
                        if (lstCirculos.circles[2].x < lstCirculos.circles[0].x)
                        //if (lstCirculos.circles[2].x < lstCirculos.circles[0].x ||
                        //    lstCirculos.circles[1].x < lstCirculos.circles[3].x)
                            sign *= -1;

                        refPoint_X = (float)((i * intervalVertical1) + lstCirculos.circles[0].x);
                        refPoint_Y = (float)((i * intervalVerticalY1) + lstCirculos.circles[0].y);

                        for (int r = 0; r <= numHorizontalLines; r++)
                        {

                            float x = (refPoint_X + (r * (float)delta_X_V * sign));
                            float y = (refPoint_Y + (r * (float)delta_Y_V));

                            if (k == 0)
                            {

                                #region This is the DNI abstract area
                                int pos = (r * 8) + i;

                                abs_aux_DNI = lstAbsDNI[pos];
                                abs_aux_DNI.set_x(x);
                                abs_aux_DNI.set_y(y);

                                lstAbsDNI[pos] = abs_aux_DNI;

                                //my_pen = new Pen(Color.Green, 1f);
                                my_pen = new Pen(Color.LightGray, 1f);

                                #endregion
                            }
                            if (k == 1)
                            {
                                #region This is the Option Albergue abstract area
                                int pos = (r * 2) + i;

                                abs_aux_option = lstAbsOptions[pos];
                                abs_aux_option.set_x(x);
                                abs_aux_option.set_y(y);

                                lstAbsOptions[pos] = abs_aux_option;

                                //my_pen = new Pen(Color.PaleVioletRed, 1f);
                                my_pen = new Pen(Color.LightGray, 1f);

                                #endregion
                            }
                            e.Graphics.DrawEllipse(
                                    my_pen,
                                    x - lstCirculos.getRadio() / 2,
                                    y - lstCirculos.getRadio() / 2,
                                    lstCirculos.getRadio(), lstCirculos.getRadio());
                        }
                        #endregion
                    }
                    //else
                    if(k==2)
                    {
                        #region Validating areas of abstract questions, Sedes, ciclo y turno

                        if (i != 2 &&
                            i != 3 &&
                            i != 4 &&
                            i != 7 &&
                            i != 8 &&
                            i != 9 &&
                            i != 12 &&
                            i != 13 &&
                            i != 14 &&
                            i != 17 &&
                            i != 18 &&
                            i != 19 &&
                            i != 22 &&
                            i != 23 &&
                            i != 24)
                        {
                            dist_X_V = Math.Abs(((i * intervalVertical1) + lstCirculos.circles[0].x) - ((i * intervalVertical2) + lstCirculos.circles[2].x));
                            dist_Y_V = Math.Abs(((i * intervalVerticalY1) + lstCirculos.circles[0].y) - ((i * intervalVerticalY2) + lstCirculos.circles[2].y));

                            delta_X_V = (dist_X_V * 1.0 / numHorizontalLines);
                            delta_Y_V = (dist_Y_V * 1.0 / numHorizontalLines);

                            int sign = 1;
                            if (lstCirculos.circles[2].x < lstCirculos.circles[0].x)
                                sign *= -1;

                            refPoint_X = (float)((i * intervalVertical1) + lstCirculos.circles[0].x);
                            refPoint_Y = (float)((i * intervalVerticalY1) + lstCirculos.circles[0].y);

                            int index_y = 0;

                            //pass throug of all the validated horizontal lines
                            for (int r = 0; r <= numHorizontalLines; r++)
                            {
                                float x = (refPoint_X + (r * (float)delta_X_V * sign));
                                float y = (refPoint_Y + (r * (float)delta_Y_V));

                                //All vertical lines that belong to Sede , ciclo y turno
                                //avoiding not desiered horizontal lines
                                if (r != 5 && r != 26 &&
                                    r != 6 && r != 27 &&
                                    r != 7 && r != 28 &&
                                    r != 18 && r != 29 &&
                                    r != 19 && r != 30 &&
                                    r != 20 && r != 31 &&
                                    r != 22 && r != 32 &&
                                    r != 23 && r != 33 &&
                                    r != 24 && r != 34 && (i == 0 || i == 1))
                                {

                                    #region logic to save obstrat object to a lstAbsOjects of Sede , ciclo y turno

                                    if (r <= 4)
                                    {
                                        #region Sedes Abstrac area
                                        if (i == 1)
                                        {
                                            abs_aux_sede = lstAbsSede[r];
                                            abs_aux_sede.set_x(x);
                                            abs_aux_sede.set_y(y);

                                            lstAbsSede[r] = abs_aux_sede;

                                            //my_pen = new Pen(Color.Salmon, 1f);
                                            my_pen = new Pen(Color.LightGray, 1f);

                                        }
                                        #endregion
                                    }
                                    else
                                    {
                                        if (r <= 17)
                                        {
                                            #region Ciclo abstract area

                                            int index_pos = (i * 1) + ((r - 8) * 2);

                                            abs_aux_ciclo = lstAbsCiclo[index_pos];  // 8 - 17 -> fuera
                                            abs_aux_ciclo.set_x(x);
                                            abs_aux_ciclo.set_y(y);

                                            lstAbsCiclo[index_pos] = abs_aux_ciclo;

                                            //my_pen = new Pen(Color.Silver, 1f);
                                            my_pen = new Pen(Color.LightGray, 1f);

                                            #endregion
                                        }
                                        else
                                        {
                                            if (r <= 21)
                                            {
                                                #region Semestre abstract area
                                                int index_pos = (r - 21) + i;

                                                abs_aux_semestre = lstAbsSemestre[index_pos];
                                                abs_aux_semestre.set_x(x);
                                                abs_aux_semestre.set_y(y);

                                                lstAbsSemestre[index_pos] = abs_aux_semestre;

                                                //my_pen = new Pen(Color.Purple, 1f);
                                                my_pen = new Pen(Color.LightGray, 1f);

                                                #endregion
                                            }
                                            else
                                            {
                                                if (r <= 25)
                                                {
                                                    #region Turno abstract area
                                                    int index_pos = (r - 25) + i;

                                                    abs_aux_turno = lstAbsTurno[index_pos];
                                                    abs_aux_turno.set_x(x);
                                                    abs_aux_turno.set_y(y);

                                                    lstAbsTurno[index_pos] = abs_aux_turno;

                                                    //my_pen = new Pen(Color.Orange, 1f);
                                                    my_pen = new Pen(Color.LightGray, 1f);

                                                    #endregion
                                                }
                                            }

                                        }
                                    }

                                    if (!(r < 5 && i == 0))
                                    {
                                        e.Graphics.DrawEllipse(
                                               my_pen,
                                               x - lstCirculos.getRadio() / 2,
                                               y - lstCirculos.getRadio() / 2,
                                               lstCirculos.getRadio(), lstCirculos.getRadio());
                                    }

                                    #endregion
                                }
                                else
                                {
                                    //All vertical lines that belong to AbsQuestion
                                    if (i > 2)
                                    {
                                        #region logic to save ordered obstract question to a lstAbsQuestions

                                        //my_pen = new Pen(Color.Red, 1f);
                                        my_pen = new Pen(Color.LightGray, 1f);

                                        e.Graphics.DrawEllipse(
                                                my_pen,
                                                x - lstCirculos.getRadio() / 2,
                                                y - lstCirculos.getRadio() / 2,
                                                lstCirculos.getRadio(), lstCirculos.getRadio());

                                        //save abstract position on list
                                        if ((index_x % 2) == 1)
                                        {
                                            //add in the first columna the object to the  list
                                            abs_question.set_x1(x);
                                            abs_question.set_y1(y);

                                            abs_question.set_idQuestion(index_y + (35 * aux_indice_columna));
                                            abs_question.set_radio(lstCirculos.getRadio());

                                            lstAbsQuestions[index_y + (35 * aux_indice_columna)] = abs_question;

                                        }
                                        else
                                        {
                                            abs_aux_question.set_x1(lstAbsQuestions[index_y + (35 * aux_indice_columna)].get_x1());
                                            abs_aux_question.set_y1(lstAbsQuestions[index_y + (35 * aux_indice_columna)].get_y1());

                                            abs_aux_question.set_idQuestion(lstAbsQuestions[index_y].get_idQuestion());
                                            abs_aux_question.set_radio(lstAbsQuestions[index_y].get_radio());

                                            abs_aux_question.set_x2(x);
                                            abs_aux_question.set_y2(y);
                                            lstAbsQuestions[index_y + (35 * aux_indice_columna)] = abs_aux_question;

                                        }

                                        aux_count++;

                                        if (r == 34)
                                        {
                                            //for debug
                                            int ri = 0;
                                        }

                                        index_y++;

                                        if (aux_count % 70 == 0 && aux_count != 0)
                                        {
                                            aux_indice_columna++;
                                        }
                                        if (aux_count >= 350)
                                        {// set all vallues to zero

                                        }
                                        #endregion
                                    }

                                }

                            }

                            //not delete this count
                            index_x++;
                            //----------------------

                        }
                        #endregion
                    }

                    if (k == 3)
                    {
                        #region Validating areas of abstract questions, Sedes, ciclo y turno

                        if (i != 0 && i != COLUMNAS)
                        {
                            dist_X_V = Math.Abs(((i * intervalVertical1) + lstCirculos.circles[0].x) - ((i * intervalVertical2) + lstCirculos.circles[2].x));
                            dist_Y_V = Math.Abs(((i * intervalVerticalY1) + lstCirculos.circles[0].y) - ((i * intervalVerticalY2) + lstCirculos.circles[2].y));

                            delta_X_V = (dist_X_V * 1.0 / numHorizontalLines);
                            delta_Y_V = (dist_Y_V * 1.0 / numHorizontalLines);

                            int sign = 1;
                            if (lstCirculos.circles[2].x < lstCirculos.circles[0].x)
                                sign *= -1;

                            refPoint_X = (float)((i * intervalVertical1) + lstCirculos.circles[0].x);
                            refPoint_Y = (float)((i * intervalVerticalY1) + lstCirculos.circles[0].y);

                            int index_y = 0;

                            //pass throug of all the validated horizontal lines
                            for (int r = 0; r <= numHorizontalLines; r++)
                            {
                                float x = (refPoint_X + (r * (float)delta_X_V * sign));
                                float y = (refPoint_Y + (r * (float)delta_Y_V));

                                //All vertical lines that belong to Sede , ciclo y turno
                                //avoiding not desiered horizontal lines
                                if (true)
                                {
                                    //All vertical lines that belong to AbsQuestion
                                    //if (i > 2)
                                    if (r != 0 && r!= FILAS)
                                    //if(true)
                                    {
                                        #region logic to save ordered obstract question to a lstAbsQuestions

                                        //my_pen = new Pen(Color.Gray, 1f);
                                        //e.Graphics.DrawEllipse(
                                        //        my_pen,
                                        //        x - lstCirculos.getRadio() / 2,
                                        //        y - lstCirculos.getRadio() / 2,
                                        //        lstCirculos.getRadio(), lstCirculos.getRadio());

                                        abs_big_maya.set_x1(x);
                                        abs_big_maya.set_y1(y);

                                        abs_big_maya.set_idQuestion(index_x);
                                        abs_big_maya.set_radio(lstCirculos.getRadio());

                                        lstAbsBigMaya[index_x] = abs_big_maya;
                                        index_x++;

                                        #endregion
                                    }

                                }

                            }

                            float rr = lstAbsBigMaya[13].get_y1();
                        }
                        #endregion
                    }
                }

                #endregion

                #region draw the 4 squares that can be drag and drop
                if (k == 3)
                {
                    for (int i = 0; i < lstCirculos.circles.Count; i++)
                    {
                        e.Graphics.DrawRectangle(
                            new Pen(Color.Red, 2f),
                            lstCirculos.circles[i].getX() - (lstCirculos.circles[i].getRadio() / 2),
                            lstCirculos.circles[i].getY() - (lstCirculos.circles[i].getRadio() / 2),
                            lstCirculos.circles[i].getRadio(), lstCirculos.circles[i].getRadio());
                    }
                }
                #endregion
            }

            #endregion

            #region test - Drawing numbers of idQuestions
            int index = 0;
            for (int i = 0; i < lstAbsBigMaya.Count; i++)
            {

                //e.Graphics.DrawString((i + 1).ToString(), this.Font, Brushes.Black, lstAbsQuestions[i].get_x1(), lstAbsQuestions[i].get_y1());
                //e.Graphics.DrawString((i + 1).ToString(), this.Font, Brushes.Red, lstAbsQuestions[i].get_x2(), lstAbsQuestions[i].get_y2());

                //e.Graphics.DrawString(lstAbsDNI[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstAbsDNI[i].get_x(), lstAbsDNI[i].get_y());

                //e.Graphics.DrawString(lstAbsOptions[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstAbsOptions[i].get_x(), lstAbsOptions[i].get_y());

                //e.Graphics.DrawString(lstCiclo[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstCiclo[i].get_x(), lstCiclo[i].get_y());

                //e.Graphics.DrawString(lstSemestre[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstSemestre[i].get_x(), lstSemestre[i].get_y());

                //e.Graphics.DrawString(lstTurno[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstTurno[i].get_x(), lstTurno[i].get_y());

                //e.Graphics.DrawString(lstTurno[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstTurno[i].get_x(), lstTurno[i].get_y());

            //                lstAbsBigMaya[i].set_idQuestion(index);

            //                FontFamily fontFamily = new FontFamily("Arial");
            //Font f = new Font(
            //   fontFamily,
            //   6,
            //   FontStyle.Regular,
            //   GraphicsUnit.Pixel);

            //                e.Graphics.DrawString(lstAbsBigMaya[i].get_idQuestion().ToString(), f, Brushes.Black, lstAbsBigMaya[i].get_x1(), lstAbsBigMaya[i].get_y1());
                //e.Graphics.DrawString(lstAbsBigMaya[i].get_idQuestion().ToString(), this.Font, Brushes.Red, lstAbsBigMaya[i].get_x2(), lstAbsBigMaya[i].get_y2());

                index++;
            }
            #endregion
        }