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);
}