Exemplo n.º 1
0
            public PointRalation(PointDelegateArgs point, PointDelegateArgs parentPoint)
            {
                Line = new ScreenSpaceLine2()
                {
                    Stroke          = Brushes.Blue,
                    StrokeDashArray = new DoubleCollection(new[] { 5.0, 3.0 }),
                    StrokeThickness = 1.0
                };

                var binding = new Binding(parentPoint.Path);

                binding.Source = parentPoint.Object;
                binding.Mode   = BindingMode.OneWay;
                BindingOperations.SetBinding(Line, ScreenSpaceLine2.StartPointProperty, binding);
                DependencyPropertyDescriptor.FromProperty(ScreenSpaceLine2.StartPointProperty, typeof(ScreenSpaceLine2)).AddValueChanged(Line, OnParentPointChanged);
                parentPoint.Gripper.DragStart += ParentGripper_DragStart;
                parentPoint.Gripper.DragEnd   += ParentGripper_DragEnd;

                binding        = new Binding(point.Path);
                binding.Source = point.Object;
                binding.Mode   = BindingMode.TwoWay;
                BindingOperations.SetBinding(Line, ScreenSpaceLine2.EndPointProperty, binding);
                DependencyPropertyDescriptor.FromProperty(ScreenSpaceLine2.EndPointProperty, typeof(ScreenSpaceLine2)).AddValueChanged(Line, OnPointChanged);

                _Delta = Line.EndPoint - Line.StartPoint;
            }
Exemplo n.º 2
0
            public PointDelegateArgs(Point pt, DependencyObject o, string path, PointDelegateArgs parentPoint)
            {
                Point       = pt;
                Object      = o;
                Path        = path;
                ParentPoint = parentPoint;

                PointModified = false;
            }
Exemplo n.º 3
0
        private void ForEachAbsPoint(PointDelegate ptCallback)
        {
            foreach (var figure in Path.Figures)
            {
                var args = new PointDelegateArgs(figure.StartPoint, figure, "StartPoint");
                ptCallback(args);
                if (args.PointModified)
                {
                    figure.StartPoint = args.Point;
                }

                var lastEndPoint = args;

                foreach (var segment in figure.Segments)
                {
                    if (segment is ArcSegment)
                    {
                        var arc = segment as ArcSegment;
                        args = new PointDelegateArgs(arc.Point, segment, "Point");
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            arc.Point = args.Point;
                        }
                        lastEndPoint = args;
                    }
                    else if (segment is BezierSegment)
                    {
                        var b = segment as BezierSegment;
                        args = new PointDelegateArgs(b.Point1, segment, "Point1", lastEndPoint);
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            b.Point1 = args.Point;
                        }
                        args = new PointDelegateArgs(b.Point3, segment, "Point3");
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            b.Point3 = args.Point;
                        }
                        lastEndPoint = args;
                        args         = new PointDelegateArgs(b.Point2, segment, "Point2", lastEndPoint);
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            b.Point2 = args.Point;
                        }
                    }
                    else if (segment is LineSegment)
                    {
                        var l = segment as LineSegment;
                        args = new PointDelegateArgs(l.Point, segment, "Point");
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            l.Point = args.Point;
                        }
                        lastEndPoint = args;
                    }
                    else if (segment is PolyBezierSegment)
                    {
                        var pb = segment as PolyBezierSegment;
                        for (int n = 0; n < pb.Points.Count; n += 3)
                        {
                            args = new PointDelegateArgs(pb.Points[n + 0], segment, String.Format("Points[{0}]", n + 0), lastEndPoint);
                            ptCallback(args);
                            if (args.PointModified)
                            {
                                pb.Points[n + 0] = args.Point;
                            }
                            args = new PointDelegateArgs(pb.Points[n + 2], segment, String.Format("Points[{0}]", n + 2));
                            ptCallback(args);
                            if (args.PointModified)
                            {
                                pb.Points[n + 2] = args.Point;
                            }
                            lastEndPoint = args;
                            args         = new PointDelegateArgs(pb.Points[n + 1], segment, String.Format("Points[{0}]", n + 1), lastEndPoint);
                            ptCallback(args);
                            if (args.PointModified)
                            {
                                pb.Points[n + 1] = args.Point;
                            }
                        }
                    }
                    else if (segment is PolyLineSegment)
                    {
                        var pl = segment as PolyLineSegment;
                        for (int n = 0; n < pl.Points.Count; ++n)
                        {
                            args = new PointDelegateArgs(pl.Points[n], segment, String.Format("Points[{0}]", n));
                            ptCallback(args);
                            if (args.PointModified)
                            {
                                pl.Points[n] = args.Point;
                            }
                            lastEndPoint = args;
                        }
                    }
                    else if (segment is PolyQuadraticBezierSegment)
                    {
                        var pqb = segment as PolyQuadraticBezierSegment;
                        for (int n = 0; n < pqb.Points.Count; ++n)
                        {
                            args = new PointDelegateArgs(pqb.Points[n + 1], segment, String.Format("Points[{0}]", n + 1));
                            ptCallback(args);
                            if (args.PointModified)
                            {
                                pqb.Points[n + 1] = args.Point;
                            }
                            lastEndPoint = args;
                            args         = new PointDelegateArgs(pqb.Points[n + 0], segment, String.Format("Points[{0}]", n + 0), lastEndPoint);
                            ptCallback(args);
                            if (args.PointModified)
                            {
                                pqb.Points[n + 0] = args.Point;
                            }
                        }
                    }
                    else if (segment is QuadraticBezierSegment)
                    {
                        var qb = segment as QuadraticBezierSegment;
                        args = new PointDelegateArgs(qb.Point2, segment, "Point2");
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            qb.Point2 = args.Point;
                        }
                        lastEndPoint = args;
                        args         = new PointDelegateArgs(qb.Point1, segment, "Point1", lastEndPoint);
                        ptCallback(args);
                        if (args.PointModified)
                        {
                            qb.Point1 = args.Point;
                        }
                    }
                }
            }
        }