예제 #1
0
        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);
        }