TryDrawGroupRectangles
(
IGraph graph,
GraphDrawingContext graphDrawingContext,
out Visual visual
)
{
Debug.Assert(graph != null);
Debug.Assert(graphDrawingContext != null);
AssertValid();
visual = null;
GroupLayoutDrawingInfo oGroupLayoutDrawingInfo;
if (
!GroupMetadataManager.TryGetGroupLayoutDrawingInfo(
graph, out oGroupLayoutDrawingInfo)
||
oGroupLayoutDrawingInfo.PenWidth == 0
)
{
return (false);
}
DrawingVisual oGroupRectangleDrawingVisual = new DrawingVisual();
using ( DrawingContext oDrawingContext =
oGroupRectangleDrawingVisual.RenderOpen() )
{
// Note: Don't try to use an alpha value of anything except 255
// for the rectangle colors. The rectangles overlap, and
// transparent overlapping rectangles would have uneven opacities.
Color oColor = GetContrastingColor(graphDrawingContext, 255,
false);
// Note that 1.0 is used where the GraphScale would normally be
// used. Group rectangles don't get scaled.
Pen oPen = CreateFrozenPen(CreateFrozenSolidColorBrush(oColor),
oGroupLayoutDrawingInfo.PenWidth * 1.0, DashStyles.Solid);
foreach (GroupInfo oGroupInfo in
oGroupLayoutDrawingInfo.GroupsToDraw)
{
Rect oGroupRectangle;
if ( TryGetGroupRectangle(oGroupInfo, out oGroupRectangle) )
{
WpfGraphicsUtil.DrawPixelAlignedRectangle(oDrawingContext,
null, oPen, oGroupRectangle);
}
}
}
visual = oGroupRectangleDrawingVisual;
return (true);
}