public PolyLine(Line line) { LineSegment lineSegment = new LineSegment(new PointF(line.x1 * 3.0F + 10.0F, line.y1 * 3.0F + 10.0F), new PointF(line.x2 * 3.0F + 10.0F, line.y2 * 3.0F + 10.0F)); lineSegment.IsDecorationSegment = true; shapeSegments = new ArrayList(); shapeSegments.Add(lineSegment); }
internal bool Add(Line line) { LineSegment lineSegment = new LineSegment(new PointF(line.x1 * 3.0F + 10.0F, line.y1 * 3.0F + 10.0F), new PointF(line.x2 * 3.0F + 10.0F, line.y2 * 3.0F + 10.0F)); lineSegment.IsDecorationSegment = true; if ((shapeSegments != null) && (shapeSegments.Count > 0) && (shapeSegments[shapeSegments.Count - 1] is LineSegment)) { LineSegment oldLineSegment = shapeSegments[shapeSegments.Count - 1] as LineSegment; if (oldLineSegment.GetEndPoint() == lineSegment.GetStartPoint()) { shapeSegments.Add(lineSegment); return true; } } return false; }
private void splitToLine() { LineSegment lineSegment = new LineSegment(saveStartPoint, new PointF(saveNewPosX, saveNewPosY)); LineSegment lineSegmentNext = new LineSegment(new PointF(saveNewPosX, saveNewPosY), saveEndPoint); if (saveSegment is LineSegment && (saveSegment as LineSegment).IsDecorationSegment) { lineSegment.IsDecorationSegment = true; lineSegmentNext.IsDecorationSegment = true; } shapeSegments.Remove(saveSegment); shapeSegments.Insert(saveIndex, lineSegment); shapeSegments.Insert(saveIndex + 1, lineSegmentNext); if (Changed != null) Changed(this, new EventArgs()); }
public Contour(Color color, ArrayList arr, PointF[] pStart, PointF[] point1, PointF[] point2, PointF[] pEnd) { Segment s = null; shapeSegments = new ArrayList(); if (arr != null) { for (int i = 0; i < arr.Count; ++i) { if (arr[i] is LineSegment) s = new LineSegment(pStart[i], pEnd[i]); if (arr[i] is BezierSegment) { s = new BezierSegment(); (s as BezierSegment).points[0] = pStart[i]; (s as BezierSegment).points[1] = point1[i]; (s as BezierSegment).points[2] = point2[i]; (s as BezierSegment).points[3] = pEnd[i]; } shapeSegments.Add(s); } } fillColor = color; }
// Constructors public Contour(Color color, int grdSize) { if (grdSize > 25) Coef = 7; else Coef = 14; shapeSegments = new ArrayList(); // Segment s1 = new LineSegment(new PointF(10, 10), new PointF(210, 10)); // Segment s2 = new LineSegment(new PointF(210, 10), new PointF(210, 210)); // Segment s3 = new LineSegment(new PointF(210, 210), new PointF(10, 210)); // Segment s4 = new LineSegment(new PointF(10, 210), new PointF(10, 10)); Segment s1 = new LineSegment(new PointF(grdSize, grdSize), new PointF(Coef * grdSize, grdSize)); Segment s2 = new LineSegment(new PointF(Coef * grdSize, grdSize), new PointF(Coef * grdSize, Coef * grdSize)); Segment s3 = new LineSegment(new PointF(Coef * grdSize, Coef * grdSize), new PointF(grdSize, Coef * grdSize)); Segment s4 = new LineSegment(new PointF(grdSize, Coef * grdSize), new PointF(grdSize, grdSize)); shapeSegments.Add(s1); shapeSegments.Add(s2); shapeSegments.Add(s3); shapeSegments.Add(s4); fillColor = color; }
internal void splitToBezier() { PointF pt0, pt3; pt0 = new PointF(saveNewPosX, saveNewPosY); pt3 = saveEndPoint; BezierSegment newBezierSegment = new BezierSegment(); LineSegment newLineSegment = new LineSegment(saveStartPoint, new PointF(saveNewPosX, saveNewPosY)); if (saveSegment is LineSegment && (saveSegment as LineSegment).IsDecorationSegment) { newBezierSegment.IsDecorationSegment = true; newLineSegment.IsDecorationSegment = true; } shapeSegments.Remove(saveSegment); shapeSegments.Insert(saveIndex, newLineSegment); newBezierSegment.points[0] = pt0; newBezierSegment.points[1] = new PointF(((pt0.X) * 2 + pt3.X) / 3, ((pt0.Y) * 2 + pt3.Y) / 3); newBezierSegment.points[2] = new PointF(((pt0.X) / 2 + pt3.X) * 2 / 3, ((pt0.Y) / 2 + pt3.Y) * 2 / 3); newBezierSegment.points[3] = pt3; shapeSegments.Insert(saveIndex + 1, newBezierSegment); if (Changed != null) Changed(this, new EventArgs()); }
internal void combineSegments(float SaveCurrX, float SaveCurrY) { PointF pStart; PointF pEnd; if (shapeSegments.Count > MinNumLines) { for (int i = 0; i < shapeSegments.Count; ++i) { Segment s1 = (Segment)shapeSegments[i]; Segment s2 = (Segment)shapeSegments[(i + 1) % shapeSegments.Count]; if (s1.hitTest(new PointF(SaveCurrX, SaveCurrY)) && s2.hitTest(new PointF(SaveCurrX, SaveCurrY))) { saveIndex = i; pStart = s1.GetStartPoint(); pEnd = s2.GetEndPoint(); shapeSegments.Remove(s1); shapeSegments.Remove(s2); Segment sCombinedLine = new LineSegment(pStart, pEnd); shapeSegments.Insert(i, sCombinedLine); break; } } } }
private void CovertTo() { if (saveSegment is LineSegment) { BezierSegment newBezierSeg = new BezierSegment(); if ((saveSegment as LineSegment).IsDecorationSegment) newBezierSeg.IsDecorationSegment = true; shapeSegments.Remove(saveSegment); newBezierSeg.points[0] = saveStartPoint; newBezierSeg.points[1] = new PointF(((saveStartPoint.X) * 2 + saveEndPoint.X) / 3, ((saveStartPoint.Y) * 2 + saveEndPoint.Y) / 3); newBezierSeg.points[2] = new PointF(((saveStartPoint.X) / 2 + saveEndPoint.X) * 2 / 3, ((saveStartPoint.Y) / 2 + saveEndPoint.Y) * 2 / 3); newBezierSeg.points[3] = saveEndPoint; shapeSegments.Insert(saveIndex, newBezierSeg); } if (saveSegment is BezierSegment) { LineSegment newLineSegment = new LineSegment(saveStartPoint, saveEndPoint); if ((saveSegment as BezierSegment).IsDecorationSegment) newLineSegment.IsDecorationSegment = true; shapeSegments.Remove(saveSegment); shapeSegments.Insert(saveIndex, newLineSegment); } if (Changed != null) Changed(this, new EventArgs()); }
private void menuItemInsertDecorLineOnClick(object Sender, System.EventArgs e) { LineSegment newDecorationLine = new LineSegment(new PointF(saveNewPosX, saveNewPosY), new PointF(saveNewPosX + decorationWidth, saveNewPosY)); newDecorationLine.IsDecorationSegment = true; PolyLine newPolyLine = new PolyLine(newDecorationLine); outLines.Add(newPolyLine); newPolyLine.Changed += new OutlineChangeEventHandler(onContourChanged); changeContour(Sender); }