TryDrawVertex ( IVertex vertex, GraphDrawingContext graphDrawingContext, out VertexDrawingHistory vertexDrawingHistory ) { AssertValid(); vertexDrawingHistory = null; CheckDrawVertexArguments(vertex, graphDrawingContext); if (graphDrawingContext.GraphRectangleMinusMarginIsEmpty) { return (false); } // If the vertex is hidden, do nothing. VisibilityKeyValue eVisibility = GetVisibility(vertex); if (eVisibility == VisibilityKeyValue.Hidden) { return (false); } // Check whether the vertex represents a collapsed group and perform // collapsed group tasks if necessary. CollapsedGroupDrawingManager oCollapsedGroupDrawingManager = new CollapsedGroupDrawingManager(); oCollapsedGroupDrawingManager.PreDrawVertex(vertex); // Check for a per-vertex label. Object oLabelAsObject; String sLabel = null; if ( vertex.TryGetValue(ReservedMetadataKeys.PerVertexLabel, typeof(String), out oLabelAsObject) ) { sLabel = (String)oLabelAsObject; if ( String.IsNullOrEmpty(sLabel) ) { sLabel = null; } else { sLabel = TruncateLabel(sLabel); } } Boolean bDrawAsSelected = GetDrawAsSelected(vertex); Point oLocation = WpfGraphicsUtil.PointFToWpfPoint(vertex.Location); DrawingVisualPlus oDrawingVisual = new DrawingVisualPlus(); VertexShape eShape = GetShape(vertex); VertexLabelDrawer oVertexLabelDrawer = new VertexLabelDrawer(m_eLabelPosition, m_btBackgroundAlpha); using ( DrawingContext oDrawingContext = oDrawingVisual.RenderOpen() ) { if (eShape == VertexShape.Label) { if (sLabel != null) { // Draw the vertex as a label. vertexDrawingHistory = DrawLabelShape(vertex, graphDrawingContext, oDrawingContext, oDrawingVisual, eVisibility, bDrawAsSelected, sLabel, oCollapsedGroupDrawingManager); } else { // Default to something usable. eShape = VertexShape.Disk; } } else if (eShape == VertexShape.Image) { Object oImageSourceAsObject; if (vertex.TryGetValue(ReservedMetadataKeys.PerVertexImage, typeof(ImageSource), out oImageSourceAsObject) ) { // Draw the vertex as an image. vertexDrawingHistory = DrawImageShape(vertex, graphDrawingContext, oDrawingContext, oDrawingVisual, eVisibility, bDrawAsSelected, sLabel, (ImageSource)oImageSourceAsObject, oVertexLabelDrawer, oCollapsedGroupDrawingManager); } else { // Default to something usable. eShape = VertexShape.Disk; } } if (vertexDrawingHistory == null) { // Draw the vertex as a simple shape. vertexDrawingHistory = DrawSimpleShape(vertex, eShape, graphDrawingContext, oDrawingContext, oDrawingVisual, eVisibility, bDrawAsSelected, sLabel, oVertexLabelDrawer, oCollapsedGroupDrawingManager); } // Perform collapsed group tasks if necessary. oCollapsedGroupDrawingManager.PostDrawVertex(eShape, GetColor(vertex, eVisibility, bDrawAsSelected), graphDrawingContext, oDrawingContext, bDrawAsSelected, m_dGraphScale, oVertexLabelDrawer, m_oFormattedTextManager, vertexDrawingHistory); } return (true); }