Ejemplo n.º 1
0
        internal static void DrawEdge(Graphics graphics, DEdge dEdge)
        {
            DrawingEdge drawingEdge = dEdge.DrawingEdge;

            if (!drawingEdge.IsVisible || drawingEdge.GeometryEdge == null)
            {
                return;
            }


            DrawingEdge edge = dEdge.DrawingEdge;

            if (edge.DrawEdgeDelegate != null)
            {
                if (edge.DrawEdgeDelegate(edge, graphics))
                {
                    return;                     //the client draws instead
                }
            }
            if (dEdge.GraphicsPath == null)
            {
                dEdge.GraphicsPath = Draw.CreateGraphicsPath(dEdge.Edge.GeometryEdge.Curve);
            }

            EdgeAttr attr = drawingEdge.Attr;

            using (var myPen = new Pen(dEdge.Color, (float)attr.LineWidth))
            {
                foreach (Style style in attr.Styles)
                {
                    Draw.AddStyleForPen(dEdge, myPen, style);
                }
                try
                {
                    if (dEdge.GraphicsPath != null)
                    {
                        graphics.DrawPath(myPen, dEdge.GraphicsPath);
                    }
                }
                catch
                {
                    //  sometimes on Vista it throws an out of memory exception without any obvious reason
                }
                Draw.DrawEdgeArrows(graphics, drawingEdge, dEdge.Color, myPen);
                if (dEdge.DrawingEdge.GeometryEdge.Label != null)
                {
                    Draw.DrawLabel(graphics, dEdge.Label);
                }

#if TEST_MSAGL
                if (DrawControlPoints)
                {
                    ICurve iCurve = dEdge.DrawingEdge.GeometryEdge.Curve;
                    var    c      = iCurve as Curve;

                    if (c != null)
                    {
                        foreach (ICurve seg in c.Segments)
                        {
                            var cubic = seg as CubicBezierSegment;
                            if (cubic != null)
                            {
                                Draw.DrawControlPoints(graphics, cubic);
                            }
                        }
                    }
                    else
                    {
                        var seg = iCurve as CubicBezierSegment;
                        if (seg != null)
                        {
                            Draw.DrawControlPoints(graphics, seg);
                        }
                    }
                }
#endif
            }
        }
Ejemplo n.º 2
0
        public VEdge(Edge edge, FrameworkElement labelFrameworkElement)
        {
            Edge = edge;
            var userData = edge.UserData;

            if (userData == null)
            {
                CurvePath = new Path {
                    Data = Common.GetICurveWpfGeometry(edge.GeometryEdge.Curve),
                    Tag  = this
                };
            }
            else
            {
                Path p     = new Path();
                var  deleg = GetDrawDelegate_FromUserData(userData);
                edge.DrawEdgeDelegate = deleg;
                edge.DrawEdgeDelegate(edge, p);
                CurvePath = p;
                p.Tag     = this;
            }

            if (edge.DrawEdgeDelegate != null)
            {
                Path p = new Path();
                edge.DrawEdgeDelegate(edge, p);
                CurvePath = p;
                p.Tag     = this;
            }
            else
            {
                CurvePath = new Path {
                    Data = Common.GetICurveWpfGeometry(edge.GeometryEdge.Curve),
                    Tag  = this
                };
            }

            EdgeAttrClone = edge.Attr.Clone();


            SourceArrowHeadPath = new Path {
                Tag = this
            };
            if (edge.Attr.ArrowAtSource)
            {
                SourceArrowHeadPath.Data = DefiningSourceArrowHead();
            }
            TargetArrowHeadPath = new Path {
                Tag = this
            };
            if (edge.Attr.ArrowAtTarget)
            {
                TargetArrowHeadPath.Data = DefiningTargetArrowHead(Edge.GeometryEdge.EdgeGeometry, PathStrokeThickness, Edge.Attr.ArrowheadAtTarget);
            }


            SetPathStroke();

            if (labelFrameworkElement != null)
            {
                LabelFrameworkElement = labelFrameworkElement;
                Common.PositionFrameworkElement(LabelFrameworkElement, edge.Label.Center, 1);
            }
            edge.Attr.VisualsChanged += (a, b) => Invalidate();

            edge.IsVisibleChanged += obj => {
                foreach (var frameworkElement in FrameworkElements)
                {
                    frameworkElement.Visibility = edge.IsVisible ? Visibility.Visible : Visibility.Hidden;
                }
            };

            _editingUnderlying_FrameworkElement = new Path();
            _editingUnderlying_FrameworkElement.StrokeThickness    = 1;
            _editingUnderlying_FrameworkElement.Stroke             = Brushes.Red;
            _editingUnderlying_FrameworkElement.StrokeStartLineCap = PenLineCap.Triangle;
            _editingUnderlying_FrameworkElement.StrokeEndLineCap   = PenLineCap.Triangle;
            //_editingUnderlying_FrameworkElement.Fill = Brushes.Green;
        }