Exemple #1
0
        public new object Clone()
        {
            DDNodeWithHandles ret = new DDNodeWithHandles();

            CloneTo(ret);
            return(ret);
        }
Exemple #2
0
        protected override void CloneTo(DDNode target)
        {
            base.CloneTo(target);

            if (target is DDNodeWithHandles)
            {
                DDNodeWithHandles localTarget = target as DDNodeWithHandles;
                localTarget.ShowPointHandle    = ShowPointHandle;
                localTarget.ShowControlHandles = ShowControlHandles;
            }
        }
Exemple #3
0
        private static void AnyShowHandlePropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs args)
        {
            DDNodeWithHandles sender = (DDNodeWithHandles)d;

            sender.RefreshHandleVisibility();
        }
Exemple #4
0
        public override bool SetFromCLR(Shape source)
        {
            if (!base.SetFromCLR(source))
            {
                return(false);
            }

            if (!(source is Path))
            {
                return(false);
            }

            Path path = source as Path;

            if (!(path.Data is PathGeometry))
            {
                return(false);
            }

            PathGeometry g = path.Data as PathGeometry;

            if (g.Figures.Count == 0)
            {
                return(false);
            }

            IsFilled = g.Figures[0].IsFilled;

            Vector offset = new Vector(X, Y);
            List <BezierSegment> segmentList = new List <BezierSegment>();

            for (int i = 0; i < g.Figures[0].Segments.Count; i++)
            {
                if (g.Figures[0].Segments[i] is BezierSegment)
                {
                    BezierSegment seg = (g.Figures[0].Segments[i] as BezierSegment).Clone();
                    seg.Point1 += offset;
                    seg.Point2 += offset;
                    seg.Point3 += offset;
                    segmentList.Add(seg);
                }
                else if (g.Figures[0].Segments[i] is PolyBezierSegment)
                {
                    PolyBezierSegment pbs = g.Figures[0].Segments[i] as PolyBezierSegment;
                    for (int j = 2; j < pbs.Points.Count; j += 3)
                    {
                        segmentList.Add(new BezierSegment(
                                            pbs.Points[j - 2] + offset,
                                            pbs.Points[j - 1] + offset,
                                            pbs.Points[j] + offset, pbs.IsStroked));
                    }
                }
            }

            DDNode nodeBefore        = null;
            Point? savedFirstControl = null;

            foreach (BezierSegment segment in segmentList)
            {
                DDNodeWithHandles node = new DDNodeWithHandles();

                node.Point = new DDPoint(segment.Point3);
                if (segment.Point2 != segment.Point3)
                {
                    node.Control1 = new DDPoint(segment.Point2);
                }
                else
                {
                    node.Control1 = null;
                }
                if (nodeBefore != null)
                {
                    if ((nodeBefore.Point != null) && (segment.Point1 != nodeBefore.Point.Point))
                    {
                        nodeBefore.Control2 = new DDPoint(segment.Point1);
                    }
                    else
                    {
                        nodeBefore.Control2 = null;
                    }
                }
                else
                {
                    savedFirstControl = segment.Point1;
                }
                node.IsCurved  = true;
                node.IsStroked = segment.IsStroked;
                nodeBefore     = node;
                Nodes.Add(node);
            }

            if ((Nodes.Last != null) && (savedFirstControl.HasValue))
            {
                if (savedFirstControl.Value != Nodes.Last.Point)
                {
                    Nodes.Last.Control2 = new DDPoint(savedFirstControl.Value);
                }
                else
                {
                    Nodes.Last.Control2 = null;
                }
            }

            this.ClearValue(FrameworkElement.WidthProperty);
            this.ClearValue(FrameworkElement.HeightProperty);

            return(true);
        }