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 }