コード例 #1
0
 internal void AddControlPoint(ControlPoint cp)
 {
     m_ControlPoints.Add(cp);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
        }