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; }
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; } } }
/// <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); } } }
//************************************************************************* // 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(); }
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); }
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); }
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); }
//************************************************************************* // 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); }
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; }
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; }