private void button3_Click(object sender, EventArgs e) // Polygons { int nBits = CombIm.N_Bits; if (!EDGES) { MessageBox.Show("Click edge detection"); return; } if (!radioButton1.Checked && !radioButton2.Checked) { MessageBox.Show("Choose a radio button with 'Radii'"); return; } OrigIm.ImageToBitmapOld(BmpPictBox1, this); int maxL2 = 100000, maxV = 220000, maxArc = 40000; L = new CListLines(maxL2, maxV, maxArc); int marginX = (pictureBox2.Width - (int)(Scale1 * OrigIm.width)) / 2; int marginY = (pictureBox2.Height - (int)(Scale1 * OrigIm.height)) / 2; int PicBoxInd = 1; if (radioButton1.Checked) { Ins1 = new CInscript(PicBoxInd, 0.6, 0, 0, OrigIm.width, Color.Yellow, this); radio1_Checked = true; } else if (radioButton2.Checked) { Ins1 = new CInscript(PicBoxInd, 0.8, 0, 0, OrigIm.width, Color.Yellow, this); radio2_Checked = true; } PicBoxInd = 2; Ins2 = new CInscript(PicBoxInd, 0.5, 0, 0, OrigIm.width, Color.White, this); CombIm.nLoop = nLoop; CombIm.denomProg = denomProg; // 0 1 2 3 4 5 6 7 int[] minRad = { 10, 14, 23, 35, 53, 80, 120, 180 }; int[] maxRad = { 20, 30, 46, 70, 106, 160, 240, 360 }; double[] ProtEps = { 1.05, 1.15, 1.23, 1.35, 1.50, 1.67, 1.85, 2.0 }; double maxAngle1 = 0.0, maxAngle2 = 0.0; optVar1 = optVar2 = -1; optNcircle1 = optNcircle2 = 0; int nVar = 8; int maxCircle = 2000; nBest = 0; nCircle = new int[nVar]; Circle = new CCircle[nVar, maxCircle]; // declared in Form1 for (int iv = 0; iv < nVar; iv++) { for (int i = 0; i < maxCircle; i++) { Circle[iv, i] = new CCircle(); } } BestCircles1 = new CCircle[6000]; for (int i = 0; i < 600; i++) { BestCircles1[i] = new CCircle(); } BestCircles2 = new CCircle[600]; for (int i = 0; i < 600; i++) { BestCircles2[i] = new CCircle(); } int nArcs = 0, rv = 1; int iVarStart = 0, iVarEnd = 7; if (radioButton1.Checked) { iVarEnd = 4; } else if (radioButton2.Checked) { iVarStart = 3; } else { MessageBox.Show("Chose a radio button with 'Radii'"); } progressBar1.Value = 0; progressBar1.Visible = true; progressBar1.Step = 20; for (int iVar = iVarStart; iVar <= iVarEnd; iVar++) //=========================================== { progressBar1.PerformStep(); eps = ProtEps[iVar]; numericUpDown2.Value = (decimal)eps; rv = L.SearchPoly(ref CombIm, eps, this); if (rv < 0) { break; } double maxSinus = 0.7, maxProportion = 0.2; L.CheckSmooth(maxSinus, maxProportion); rv = L.DrawPolygons(pictureBox2, EdgeIm, this); EDGES = false; POLY = true; nArcs = L.MakeArcs3(pictureBox2, minRad[iVar], maxRad[iVar], eps, this); if (nArcs < 0) { break; } nBest = 0; nCircle[iVar] = 0; int[] iBestCircles1 = new int[100]; nCircle[iVar] = L.MakeCirclesEl(Circle, iVar, ref nCircle[iVar], minRad[iVar], maxRad[iVar], iBestCircles1, ref nBest); if (nCircle[iVar] < 0) { break; } double SumAngle; //if (nCircle[iVar] > 0) SumAngle = TestCircles(Circle, iVar, nCircle[iVar]); if (nCircle[iVar] > 0) { SumAngle = TestCircles(Circle, iVar, nCircle); } else { SumAngle = 0.0; } if (radioButton1.Checked) { int cnt = 0; if (SumAngle > maxAngle1) { cnt = 0; for (int iCircle = 0; iCircle < nCircle[iVar]; iCircle++) { if (Circle[iVar, iCircle].good) { BestCircles1[cnt] = Circle[iVar, iCircle]; cnt++; } } maxAngle1 = SumAngle; optVar1 = iVar; optNcircle1 = cnt; } } if (radioButton2.Checked) { int cnt = 0; if (SumAngle > maxAngle2) { cnt = 0; for (int iCircle = 0; iCircle < nCircle[iVar]; iCircle++) { if (Circle[iVar, iCircle].good) { BestCircles2[cnt] = Circle[iVar, iCircle]; cnt++; } } maxAngle2 = SumAngle; optVar2 = iVar; optNcircle2 = cnt; } } } //=========================== end for (int iVar... ================================== if (rv < 0) { return; } progressBar1.Visible = false; if (radioButton1.Checked) { nBest = L.ShowBestCircles3(BestCircles1, optNcircle1, 2.0, this); MessageBox.Show("Form1: Number of recognized circles is " + nBest); } if (radioButton2.Checked) { nBest = L.ShowBestCircles3(BestCircles2, optNcircle2, 1.0, this); MessageBox.Show("Form1: Number of recognized circles is " + nBest); } label5.Visible = true; label5.Text = "Recognized circles"; label6.Visible = true; label6.Text = "Polygons"; button4.Visible = true; button5.Visible = true; groupBox2.Visible = true; } //*************************** end Polygons *******************************