public void CloseContour(ILIneFactory factory) { RemoveLines(); if (curContour.myPoints.Count < 2) { curContour.lines.Clear(); } if (curContour.myPoints.Count == 2) { if (curContour.lines.Count > 1) { RemoveLastLine(); } curContour.lines.Add(factory.Create(lastPoint, firstPoint)); } if (curContour.myPoints.Count > 2) { /*if (factory.Create(lastPoint, firstPoint).TypeEqualTo(curContour.lines.Last())) * return;*/ RemoveLastLine(); curContour.lines.Add(factory.Create(lastPoint, firstPoint)); } RemoveLines(); }
private void DeletePoint(ILIneFactory factory, int n) { /*for (int i = 0; i < curContour.lines.Count; i++) * { * foreach(MyPoint p in curContour.lines[i].GetPoints()) * { * if (p.EqualTo(curContour.myPoints[n])) * { * curContour.lines[i] = factory.Create(curContour.myPoints[n - 1 >= 0 ? n - 1: curContour.myPoints.Count - n - 1], * curContour.myPoints[curContour.myPoints.Count > n + 1 ? n + 1 : n + 1 - curContour.myPoints.Count]); * break; * } * } * }*/ //int i = n / 2; if (curContour.lines.Count > n) { curContour.lines.RemoveAt(n); } if (curContour.lines.Count == 1) { curContour.myPoints.RemoveAt(n); return; } int i = n - 1 >= 0 ? n - 1 : curContour.lines.Count - 1; // curContour.lines.RemoveAt(i); curContour.lines[i] = factory.Create(curContour.myPoints[n - 1 >= 0 ? n - 1 : curContour.myPoints.Count - n - 1], curContour.myPoints[curContour.myPoints.Count > n + 1 ? n + 1 : n + 1 - curContour.myPoints.Count]); curContour.myPoints.RemoveAt(n); //lastPoint = curContour.myPoints.Last();*/ }
private void RadioButton_CheckedChanged(object sender, EventArgs e) { if ((sender as RadioButton).Checked) { factory = (ILIneFactory)(sender as RadioButton).Tag; } Invalidate(); }
public void PointIn(PointF p, ILIneFactory factory, ILIneFactory fact, ScreenConverter sc) { if (curContour != null) { int n = SearchMyPoint(p, sc); if (n != -1) { curPoint = curContour.myPoints[n]; if (curContour.myPoints[n].Current) { curContour.myPoints[n].Current = false; } else { curContour.myPoints[n].Current = true; } return; } if (SearchPoint(p, sc) != null) { curPoint = SearchPoint(p, sc); return; } else { if (lastPoint == null) { curContour.myPoints.Add(new MyPoint(sc.XX((int)p.X), sc.YY((int)p.Y))); if (curContour.myPoints.Count == 1) { curContour.myPoints[0].First = true; firstPoint = curContour.myPoints[0]; } lastPoint = curContour.myPoints.Last(); } else { if (curContour.myPoints.Count >= 2) { RemoveLastLine(); } MyPoint curP = new MyPoint(sc.XX((int)p.X), sc.YY((int)p.Y)); curContour.lines.Add(factory.Create(lastPoint, curP)); curContour.myPoints.Add(curP); lastPoint = curContour.myPoints.Last(); } if (curContour.myPoints.Count >= 2) { CloseContour(fact); } } } }
private void LastRadioButton_CheckedChanged(object sender, EventArgs e) { if (LastLineRadioButton.Checked) { fact = new LineFactory(); } if (LastBezierRadioButton.Checked) { fact = new BezieFactory(); } workSpace.CloseContour(fact); WorkPanel.Invalidate(); }
public MainForm() { InitializeComponent(); MouseWheel += new MouseEventHandler(MainForm_MouseWheel); typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, WorkPanel, new object[] { true }); workSpace = new WorkSpace(WorkPanel.Width, WorkPanel.Height); con = new ScreenConverter(0, 0, 1, 1, WorkPanel.Width, WorkPanel.Height); System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); LineRadioButton.Tag = new LineFactory(); BezieRadioButton.Tag = new BezieFactory(); factory = new LineFactory(); fact = new LineFactory(); }
public void DeletePoints(ILIneFactory factory, ILIneFactory fact) { for (int i = 0; i < curContour.myPoints.Count; i++) { if (curContour.myPoints[i].Current) { if (curContour.myPoints[i].First) { firstPoint = curContour.myPoints[curContour.myPoints.Count > i + 1 ? i + 1 : 0]; curContour.myPoints[curContour.myPoints.Count > i + 1 ? i + 1 : 0].First = true; } DeletePoint(factory, i); /*if (i == curContour.myPoints.Count) * CloseContour(fact);*/ //curContour.myPoints.RemoveAt(i); i--; } } RemoveLastLine(); if (curContour.myPoints.Count > 1) { lastPoint = curContour.myPoints.Last(); if (!lastPoint.EqualTo(curContour.myPoints.Last())) { CloseContour(fact); } return; // lastPoint = curContour.myPoints.Last(); } if (curContour.myPoints.Count == 1) { lastPoint = firstPoint; return; } else { lastPoint = null; firstPoint = null; } //CloseContour(fact); //RemoveLastLine(); }