internal void AddControlPoint(ControlPoint cp) { m_ControlPoints.Add(cp); }
private ControlPoint CreateControlPoints(bool editMode, out ControlPoint lastEndPoint, PathSegment psRet) { ControlPoint cpRet = null; lastEndPoint = null; if (editMode) { ControlPoint lastCP = null; ControlPoint bezierTmpCP = null; PathGeom.DoForAllPointDPs(new DependencyPropertyCallback((DependencyObject obj, DependencyProperty dp) => { var cp = new ControlPoint(Drawing, this, obj, dp, 0, true, true); cp.Tag = obj; Drawing.AddControlPoint(cp); if (dp.OwnerType == typeof(BezierSegment)) { if (dp.Name == "Point1") // control point 1 { lastCP.SubPoint = cp; cp.ConnectedTo = lastCP; cp.IsSelectable = false; } else if (dp.Name == "Point2") // control point 2 { cp.IsSelectable = false; bezierTmpCP = cp; } else if (dp.Name == "Point3") // end point { cp.SubPoint = bezierTmpCP; bezierTmpCP.ConnectedTo = cp; lastCP = cp; } } else if (dp.OwnerType == typeof(QuadraticBezierSegment)) { if (dp.Name == "Point1") // control point 2 { cp.IsSelectable = false; bezierTmpCP = cp; } else if (dp.Name == "Point2") // end point { cp.SubPoint = bezierTmpCP; bezierTmpCP.ConnectedTo = cp; lastCP = cp; } } else { lastCP = cp; } if (obj == psRet) { cpRet = lastCP; } })); lastEndPoint = lastCP; } return(cpRet); }
private void CreateControlPoints(bool editMode, out ControlPoint endCP) { Drawing.AddControlPoint(new ControlPoint(Drawing, this, LineGeom, LineGeometry.StartPointProperty, 0, true, false)); endCP = new ControlPoint(Drawing, this, LineGeom, LineGeometry.EndPointProperty, 0, true, false); Drawing.AddControlPoint(endCP); }
internal ControlPoint ChangeSegmentType(ControlPoint controlPoint, string type) { PathFigure figure = null; foreach (var f in PathGeom.Figures) { if (f.Segments.Contains(controlPoint.Tag as PathSegment)) { figure = f; } } if (figure == null) { throw new ArgumentException("Segment of controlPoint is not in this path"); } Point startPoint = GetSegmentStartPoint(figure, controlPoint.Tag as PathSegment); Point endPoint = GetSegmentEndPoint(figure, controlPoint.Tag as PathSegment); Point pathControlPoint1 = new Point(); Point pathControlPoint2 = new Point(); if (controlPoint.Tag is LineSegment || controlPoint.Tag is ArcSegment) { pathControlPoint1 = startPoint + (endPoint - startPoint) * 0.3; pathControlPoint2 = endPoint + (startPoint - endPoint) * 0.3; } else if (controlPoint.Tag is BezierSegment) { pathControlPoint1 = (controlPoint.Tag as BezierSegment).Point1; pathControlPoint2 = (controlPoint.Tag as BezierSegment).Point2; } else if (controlPoint.Tag is QuadraticBezierSegment) { pathControlPoint1 = startPoint + (endPoint - startPoint) * 0.3; pathControlPoint2 = (controlPoint.Tag as QuadraticBezierSegment).Point1; } PathSegment newSegment = null; if (String.CompareOrdinal(type, "LineSegment") == 0) { var lSegment = new LineSegment(); lSegment.Point = endPoint; newSegment = lSegment; } else if (String.CompareOrdinal(type, "ArcSegment") == 0) { var aSegment = new ArcSegment(); aSegment.Point = endPoint; var d = endPoint - startPoint; aSegment.Size = new Size(Math.Abs(d.X) * 2.0, Math.Abs(d.Y) * 2.0); aSegment.IsLargeArc = false; aSegment.SweepDirection = SweepDirection.Clockwise; newSegment = aSegment; } else if (String.CompareOrdinal(type, "BezierSegment") == 0) { var bSegment = new BezierSegment(); bSegment.Point1 = pathControlPoint1; bSegment.Point2 = pathControlPoint2; bSegment.Point3 = endPoint; newSegment = bSegment; } else if (String.CompareOrdinal(type, "QuadraticBezierSegment") == 0) { var qSegment = new QuadraticBezierSegment(); qSegment.Point1 = pathControlPoint2; qSegment.Point2 = endPoint; newSegment = qSegment; } if (newSegment != null) { figure.Segments.Insert(figure.Segments.IndexOf(controlPoint.Tag as PathSegment), newSegment); figure.Segments.Remove(controlPoint.Tag as PathSegment); Drawing.ClearControlPoints(); ControlPoint cpDummy; controlPoint = CreateControlPoints(true, out cpDummy, newSegment); } return(controlPoint); }