Example #1
0
        TransferToGraphDrawer
        (
            GraphDrawer graphDrawer
        )
        {
            Debug.Assert(graphDrawer != null);
            AssertValid();

            Font oFont = this.Font;

            System.Windows.Media.Typeface oTypeface =
                WpfGraphicsUtil.FontToTypeface(oFont);

            Double dFontSize = WpfGraphicsUtil.WindowsFormsFontSizeToWpfFontSize(
                oFont.Size);

            VertexDrawer oVertexDrawer = graphDrawer.VertexDrawer;

            oVertexDrawer.SetFont(oTypeface, dFontSize);

            oVertexDrawer.LabelFillColor =
                WpfGraphicsUtil.ColorToWpfColor(this.VertexLabelFillColor);

            oVertexDrawer.LabelPosition      = this.VertexLabelPosition;
            oVertexDrawer.MaximumLabelLength = this.VertexLabelMaximumLength;

            EdgeDrawer oEdgeDrawer = graphDrawer.EdgeDrawer;

            oEdgeDrawer.SetFont(oTypeface, dFontSize);
            oEdgeDrawer.MaximumLabelLength = this.EdgeLabelMaximumLength;
        }
Example #2
0
        CreateNodeXLVisual
        (
            GeneralUserSettings oGeneralUserSettings
        )
        {
            Debug.Assert(oGeneralUserSettings != null);
            AssertValid();

            NodeXLVisual oNodeXLVisual = new NodeXLVisual();

            GraphDrawer oGraphDrawer = oNodeXLVisual.GraphDrawer;

            VertexDrawer oVertexDrawer = oGraphDrawer.VertexDrawer;

            EdgeDrawer oEdgeDrawer = oGraphDrawer.EdgeDrawer;

            oGeneralUserSettings.TransferToGraphDrawer(oGraphDrawer);

            // Override some of the user's settings.

            oVertexDrawer.Shape       = VertexShape.Disk;
            oVertexDrawer.Radius      = 2.0;
            oEdgeDrawer.Width         = 1;
            oEdgeDrawer.SelectedWidth = 1;

            return(oNodeXLVisual);
        }
 // ----Обработчики событий
 /// <summary>
 /// Привести в соответствие с координатами мыши выделение вершин графа.
 /// Та, которая под мышью, будет выделенной, а та, с которой мышь ушла, станет обычной
 /// </summary>
 /// <param name="mousePoint">Координаты мыши</param>
 private void ChangeVerticesSelecting(PointF mousePoint)
 {
     // Если была выделенная вершина, проверяем, покинула ли мышь её. Если нет - конец. Если да - убираем подсветку
     if (SelectedVertex != null)
     {
         if (!VertexDrawer.IsCoordinatesOnVertex(SelectedVertex, mousePoint))
         {
             // Для экономии перерисовываем не всё, а только эту вершину
             VertexDrawer.DrawVertex(GetGraphics(), SelectedVertex);
             SelectedVertex = null;
             Invalidate();
         }
         else
         {
             return;
         }
     }
     // Смотрим, оказалась ли теперь мышь над одной из вершин
     foreach (var vertex in Graph.Vertices)
     {
         // Если да - выделяем и выходим (больше искать нечего)
         if (VertexDrawer.IsCoordinatesOnVertex(vertex, mousePoint))
         {
             SelectedVertex = vertex;
             VertexDrawer.DrawSelectedVertex(GetGraphics(), vertex);
             Invalidate();
             return;
         }
     }
 }
Example #4
0
 /// <summary>
 /// Метод отрисовки графа
 /// </summary>
 public void DrawGraph(Graphics g)
 {
     if (Graph == null)
     {
         return;
     }
     // Очищаем поверхность и заливаем заданным фоновым цветом
     g.Clear(Settings.BackgroundColor);
     // Рисуем вершины
     foreach (var vertex in Graph.Vertices)
     {
         if (vertex == SelectedVertex)
         {
             VertexDrawer.DrawSelectedVertex(g, vertex);
         }
         else
         {
             VertexDrawer.DrawVertex(g, vertex);
         }
     }
     // Рисуем рёбра
     foreach (var edge in Graph.Edges)
     {
         if (edge == SelectedEdge)
         {
             EdgeDrawer.DrawSelectedEdge(g, edge);
         }
         else
         {
             EdgeDrawer.DrawEdge(g, edge);
         }
     }
 }
Example #5
0
        //*************************************************************************
        //  Constructor: GraphDrawer()
        //
        /// <summary>
        /// Initializes a new instance of the <see cref="GraphDrawer" /> class.
        /// </summary>
        ///
        /// <param name="parentVisual">
        /// The parent of the contained <see
        /// cref="GraphDrawer.VisualCollection" />.  This is usually a
        /// FrameworkElement that is hosting the collection.
        /// </param>
        //*************************************************************************

        public GraphDrawer
        (
            Visual parentVisual
        )
        {
            Debug.Assert(parentVisual != null);

            m_oVisualCollection             = new VisualCollection(parentVisual);
            m_oAllVertexDrawingVisuals      = null;
            m_oUnselectedEdgeDrawingVisuals = null;
            m_oSelectedEdgeDrawingVisuals   = null;
            m_oVertexDrawer = new VertexDrawer();
            m_oEdgeDrawer   = new EdgeDrawer();
            m_oBackColor    = SystemColors.WindowColor;

            // Forward the events fired by the vertex and edge drawers.

            m_oVertexDrawer.RedrawRequired +=
                delegate { this.FireRedrawRequired(); };

            m_oVertexDrawer.LayoutRequired +=
                delegate { this.FireLayoutRequired(); };

            m_oEdgeDrawer.RedrawRequired +=
                delegate { this.FireRedrawRequired(); };

            m_oEdgeDrawer.LayoutRequired +=
                delegate { this.FireLayoutRequired(); };

            AssertValid();
        }
Example #6
0
        TransferToGraphDrawer
        (
            GraphDrawer graphDrawer
        )
        {
            Debug.Assert(graphDrawer != null);
            AssertValid();

            this.LabelUserSettings.TransferToGraphDrawer(graphDrawer);

            graphDrawer.BackColor =
                WpfGraphicsUtil.ColorToWpfColor(this.BackColor);

            EdgeDrawer   oEdgeDrawer   = graphDrawer.EdgeDrawer;
            VertexDrawer oVertexDrawer = graphDrawer.VertexDrawer;

            EdgeWidthConverter oEdgeWidthConverter = new EdgeWidthConverter();
            AlphaConverter     oAlphaConverter     = new AlphaConverter();

            oEdgeDrawer.Width =
                oEdgeWidthConverter.WorkbookToGraph(this.EdgeWidth);

            oEdgeDrawer.SelectedWidth =
                oEdgeWidthConverter.WorkbookToGraph(this.SelectedEdgeWidth);

            oEdgeDrawer.Color = WpfGraphicsUtil.ColorToWpfColor(

                Color.FromArgb(oAlphaConverter.WorkbookToGraphAsByte(
                                   this.EdgeAlpha),

                               this.EdgeColor)
                );

            oEdgeDrawer.SelectedColor = WpfGraphicsUtil.ColorToWpfColor(
                this.SelectedEdgeColor);

            oEdgeDrawer.RelativeArrowSize = this.RelativeArrowSize;

            oVertexDrawer.Shape = this.VertexShape;

            oVertexDrawer.Radius = (new VertexRadiusConverter()).WorkbookToGraph(
                this.VertexRadius);

            oVertexDrawer.Color = WpfGraphicsUtil.ColorToWpfColor(

                Color.FromArgb(oAlphaConverter.WorkbookToGraphAsByte(
                                   this.VertexAlpha),

                               this.VertexColor)
                );

            oVertexDrawer.SelectedColor = WpfGraphicsUtil.ColorToWpfColor(
                this.SelectedVertexColor);
        }
Example #7
0
        CreateVisual
        (
            Point currentMouseLocation,
            Color backColor,
            VertexDrawer vertexDrawer
        )
        {
            Debug.Assert(vertexDrawer != null);
            Debug.Assert(m_bDragIsInProgress);
            AssertValid();

            // This method redraws the dragged vertices at an offset location, and
            // adds the resulting Visuals to a ContainerVisual.
            //
            // Figure out the offset.

            Double dOffsetX = currentMouseLocation.X - m_oMouseDownLocation.X;
            Double dOffsetY = currentMouseLocation.Y - m_oMouseDownLocation.Y;

            GraphDrawingContext oGraphDrawingContext = new GraphDrawingContext(
                m_oGraphRectangle, m_iMargin, backColor);

            ContainerVisual oContainerVisual = new ContainerVisual();

            foreach (IVertex oVertex in m_aoVertices)
            {
                System.Drawing.PointF oOriginalLocation =
                    GetOriginalVertexLocation(oVertex);

                oVertex.Location = new System.Drawing.PointF(
                    oOriginalLocation.X + (Single)dOffsetX,
                    oOriginalLocation.Y + (Single)dOffsetY
                    );

                VertexDrawingHistory oVertexDrawingHistory;

                if (vertexDrawer.TryDrawVertex(oVertex, oGraphDrawingContext,
                                               out oVertexDrawingHistory))
                {
                    oContainerVisual.Children.Add(
                        oVertexDrawingHistory.DrawingVisual);
                }
            }

            m_oVisual = oContainerVisual;

            return(m_oVisual);
        }
Example #8
0
        private static ILayout ChooseLayout(GraphLayoutType s)
        {
            EdgeDrawer ed = new EdgeDrawer();

            gd.EdgeDrawer = ed;
            ed.Color      = Color.Red;
            VertexDrawer vd = new VertexDrawer();

            gd.VertexDrawer = vd;
            vd.Shape        = VertexDrawer.VertexShape.Disk;
            ILayout fr = new FruchtermanReingoldLayout();

            switch (s)
            {
            case GraphLayoutType.Fruchterman_Reingold:
                fr = new FruchtermanReingoldLayout();
                break;

            case GraphLayoutType.Random:
                fr = new RandomLayout();
                break;

            case GraphLayoutType.Circle:
                fr = new CircleLayout();
                break;

            case GraphLayoutType.Kamada_Kawaii:
                fr = new KamadaKawaiiLayout();
                break;

            case GraphLayoutType.Grid:
                fr = new GridLayout();
                break;

            case GraphLayoutType.Sugiyama:
                SugiyamaEdgeDrawer eds = new SugiyamaEdgeDrawer();
                gd.EdgeDrawer = eds;
                eds.Color     = Color.Red;
                SugiyamaVertexDrawer vds = new SugiyamaVertexDrawer();
                gd.VertexDrawer = vds;
                vds.Shape       = VertexDrawer.VertexShape.Sphere;
                fr = new SugiyamaLayout();
                break;
            }
            return(fr);
        }
Example #9
0
        //*************************************************************************
        //  Constructor: GraphDrawer()
        //
        /// <summary>
        /// Initializes a new instance of the <see cref="GraphDrawer" /> class.
        /// </summary>
        ///
        /// <param name="parentVisual">
        /// The parent of the contained <see
        /// cref="GraphDrawer.VisualCollection" />.  This is usually a
        /// FrameworkElement that is hosting the collection.
        /// </param>
        //*************************************************************************

        public GraphDrawer
        (
            Visual parentVisual
        )
        {
            Debug.Assert(parentVisual != null);

            m_oVisualCollection             = new VisualCollection(parentVisual);
            m_oAllVertexDrawingVisuals      = null;
            m_oUnselectedEdgeDrawingVisuals = null;
            m_oSelectedEdgeDrawingVisuals   = null;
            m_oVertexDrawer    = new VertexDrawer();
            m_oEdgeDrawer      = new EdgeDrawer();
            m_oGroupDrawer     = new GroupDrawer();
            m_oBackColor       = SystemColors.WindowColor;
            m_oBackgroundImage = null;

            AssertValid();
        }
 /// <summary>
 /// Метод отрисовки графа
 /// </summary>
 public void DrawGraph()
 {
     if (Graph == null)
     {
         return;
     }
     using (var g = GetGraphics()) {
         // Очищаем поверхность и заливаем заданным фоновым цветом
         g.Clear(Settings.BackgroundColor);
         // Рисуем вершины
         foreach (var vertex in Graph.Vertices)
         {
             if (vertex == SelectedVertex)
             {
                 VertexDrawer.DrawSelectedVertex(g, vertex);
             }
             else
             {
                 VertexDrawer.DrawVertex(g, vertex);
             }
         }
         // Рисуем рёбра
         foreach (var edge in Graph.Edges)
         {
             if (edge == SelectedEdge)
             {
                 EdgeDrawer.DrawSelectedEdge(g, edge);
             }
             else
             {
                 EdgeDrawer.DrawEdge(g, edge);
             }
         }
         // Вызываем перерисовку элемента управления
         Invalidate();
     }
 }
        TransferToGraphDrawer
        (
            GraphDrawer graphDrawer
        )
        {
            Debug.Assert(graphDrawer != null);
            AssertValid();

            this.LabelUserSettings.TransferToGraphDrawer(graphDrawer);

            graphDrawer.BackColor =
                WpfGraphicsUtil.ColorToWpfColor(this.BackColor);

            if (!String.IsNullOrEmpty(this.BackgroundImageUri))
            {
                graphDrawer.BackgroundImage =
                    (new WpfImageUtil()).GetImageSynchronousIgnoreDpi(
                        this.BackgroundImageUri);
            }
            else
            {
                graphDrawer.BackgroundImage = null;
            }

            EdgeDrawer   oEdgeDrawer   = graphDrawer.EdgeDrawer;
            VertexDrawer oVertexDrawer = graphDrawer.VertexDrawer;

            EdgeWidthConverter oEdgeWidthConverter = new EdgeWidthConverter();
            AlphaConverter     oAlphaConverter     = new AlphaConverter();

            oEdgeDrawer.Width =
                oEdgeWidthConverter.WorkbookToGraph(this.EdgeWidth);

            oEdgeDrawer.Color = WpfGraphicsUtil.ColorToWpfColor(

                Color.FromArgb(oAlphaConverter.WorkbookToGraphAsByte(
                                   this.EdgeAlpha),

                               this.EdgeColor)
                );

            oEdgeDrawer.CurveStyle = this.EdgeCurveStyle;

            oEdgeDrawer.BezierDisplacementFactor =
                this.EdgeBezierDisplacementFactor;

            oEdgeDrawer.SelectedColor = WpfGraphicsUtil.ColorToWpfColor(
                this.SelectedEdgeColor);

            oEdgeDrawer.RelativeArrowSize = this.RelativeArrowSize;

            oVertexDrawer.Shape = this.VertexShape;

            oVertexDrawer.Radius = (new VertexRadiusConverter()).WorkbookToGraph(
                this.VertexRadius);

            oVertexDrawer.Effect = this.VertexEffect;
            oVertexDrawer.RelativeOuterGlowSize = this.VertexRelativeOuterGlowSize;

            oVertexDrawer.Color = WpfGraphicsUtil.ColorToWpfColor(

                Color.FromArgb(oAlphaConverter.WorkbookToGraphAsByte(
                                   this.VertexAlpha),

                               this.VertexColor)
                );

            oVertexDrawer.SelectedColor = WpfGraphicsUtil.ColorToWpfColor(
                this.SelectedVertexColor);
        }
Example #12
0
 private static ILayout ChooseLayout(GraphLayoutType s)
 {
     EdgeDrawer ed = new EdgeDrawer();
     gd.EdgeDrawer = ed;
     ed.Color = Color.Red;
     VertexDrawer vd = new VertexDrawer();
     gd.VertexDrawer = vd;
     vd.Shape = VertexDrawer.VertexShape.Disk;
     ILayout fr = new FruchtermanReingoldLayout();
     switch (s)
     {
         case GraphLayoutType.Fruchterman_Reingold:
             fr = new FruchtermanReingoldLayout();
             break;
         case GraphLayoutType.Random:
             fr = new RandomLayout();
             break;
         case GraphLayoutType.Circle:
             fr = new CircleLayout();
             break;
         case GraphLayoutType.Kamada_Kawaii:
             fr = new KamadaKawaiiLayout();
             break;
         case GraphLayoutType.Grid:
             fr = new GridLayout();
             break;
         case GraphLayoutType.Sugiyama:
             SugiyamaEdgeDrawer eds = new SugiyamaEdgeDrawer();
             gd.EdgeDrawer = eds;
             eds.Color = Color.Red;
             SugiyamaVertexDrawer vds = new SugiyamaVertexDrawer();
             gd.VertexDrawer = vds;
             vds.Shape = VertexDrawer.VertexShape.Sphere;
             fr = new SugiyamaLayout();
             break;
     }
     return fr;
 }
Example #13
0
        TransferToGraphDrawer
        (
            GraphDrawer graphDrawer
        )
        {
            Debug.Assert(graphDrawer != null);
            AssertValid();

            System.Windows.Media.Typeface oTypeface;
            Double dFontSize;

            //***********
            //  Vertex
            //***********

            VertexDrawer oVertexDrawer = graphDrawer.VertexDrawer;

            FontToTypefaceAndFontSize(this.VertexFont,
                                      out oTypeface, out dFontSize);

            oVertexDrawer.SetFont(oTypeface, dFontSize);

            oVertexDrawer.LabelFillColor =
                WpfGraphicsUtil.ColorToWpfColor(this.VertexLabelFillColor);

            oVertexDrawer.LabelPosition      = this.VertexLabelPosition;
            oVertexDrawer.MaximumLabelLength = this.VertexLabelMaximumLength;
            oVertexDrawer.LabelWrapText      = this.VertexLabelWrapText;

            oVertexDrawer.LabelWrapMaxTextWidth =
                this.VertexLabelWrapMaxTextWidth;

            //***********
            //  Edge
            //***********

            EdgeDrawer oEdgeDrawer = graphDrawer.EdgeDrawer;

            FontToTypefaceAndFontSize(this.EdgeFont, out oTypeface, out dFontSize);

            oEdgeDrawer.SetFont(oTypeface, dFontSize);

            oEdgeDrawer.LabelTextColor =
                WpfGraphicsUtil.ColorToWpfColor(this.EdgeLabelTextColor);

            oEdgeDrawer.MaximumLabelLength = this.EdgeLabelMaximumLength;

            //***********
            //  Group
            //***********

            GroupDrawer oGroupDrawer = graphDrawer.GroupDrawer;

            FontToTypefaceAndFontSize(this.GroupFont,
                                      out oTypeface, out dFontSize);

            oGroupDrawer.SetFont(oTypeface, dFontSize);

            oGroupDrawer.LabelTextColor = WpfGraphicsUtil.ColorToWpfColor(

                Color.FromArgb((new AlphaConverter()).WorkbookToGraphAsByte(
                                   this.GroupLabelTextAlpha),

                               this.GroupLabelTextColor)
                );

            oGroupDrawer.LabelPosition = this.GroupLabelPosition;
        }