0

このコードを使用して六角形を塗りつぶすのに問題があります。このコードを実行すると、「白」の六角形の輪郭のみが描画されます。六角形を色で塗りつぶしたいのですが、うまくいきません。

私はたくさん検索して、などdrawingContext.Drawing()の多くのことを試しました。drawingBrush

このコードで何か不足していますか? これはコードです:

public void DrawHexagon(DrawingContext drawingContext)
{
   GeometryGroup hexaKey = new GeometryGroup();

        //making lines for hexagon 
        hexaKey.Children.Add(
           new LineGeometry(new Point(X1, Y1), new Point(X2, Y2)));

        hexaKey.Children.Add(
            new LineGeometry(new Point(X2, Y2), new Point(X3, Y3)));

        hexaKey.Children.Add(
            new LineGeometry(new Point(X3, Y3), new Point(X4, Y4)));

        hexaKey.Children.Add(
            new LineGeometry(new Point(X4, Y4), new Point(X5, Y5)));

        hexaKey.Children.Add(
            new LineGeometry(new Point(X5, Y5), new Point(X6, Y6)));

        hexaKey.Children.Add(
            new LineGeometry(new Point(X6, Y6), new Point(X1, Y1)));

        //
        // Create a GeometryDrawing.
        //
        GeometryDrawing hexaKeyDrawing = new GeometryDrawing();
        hexaKeyDrawing.Geometry = hexaKey;

        // Paint the drawing with a gradient.
        hexaKeyDrawing.Brush =new SolidColorBrush(Colors.Red);


        // Outline the drawing with a solid color.
        hexaKeyDrawing.Pen = new Pen(Brushes.White, 2);


        drawingContext.DrawGeometry(hexaKeyDrawing.Brush, hexaKeyDrawing.Pen, hexaKeyDrawing.Geometry);

}
4

3 に答える 3

3

LineGeometry には塗りつぶす方法がありません...それらは単なる線です。パスが必要です。MSDN には例があります

于 2012-08-01T20:25:01.293 に答える
0

あなたの例では、の中にいくつかのインスタンスLineGeometryがあります。GeometryGroupGeometryDrawing

まず、あなたが実際にを使用していないことに注意を向けるためにリンクしますGeometryDrawing。あなたの例では、あなたはそれをあなたののプレースホルダーとしてのみ使用しましたGemetryGroup

これを無視すると、LineGeometryインスタンスは図形を描画することを意図してGeometryGroupおらず、6つLineSegmentsが一緒に閉じた図形を形成していることを認識できないという問題があります。

しかし、あなたが望むことを達成する方法があるので、絶望しないでください:PathGeometry。このジオメトリは、基本的に、塗りつぶされる可能性のある領域の輪郭を定義します。この輪郭は、開始点と一連のPathSegmentsによって定義されます。

private Point GetExtremity(Point center, double radius, double orientation)
        {
            return new Point(
                center.X + Math.Cos(orientation) * radius,
                center.Y + Math.Sin(orientation) * radius
                );
        }

        public void DrawUniformShape(DrawingContext context, Brush brush, Pen pen, Point center, double radius, int sides, double orientationRadians)
        {
            context.DrawGeometry(
                brush,
                pen,
                new PathGeometry(
                    Enumerable.Repeat(
                        new PathFigure(
                            GetExtremity(center, radius, orientationRadians),
                            from vertex in Enumerable.Range(1, sides - 1)
                            let angle = orientationRadians + vertex * 2 * Math.PI / sides
                            select new LineSegment(GetExtremity(center, radius, angle), true),
                            true
                            ),
                        1
                        )
                    )
                );
        }

        public void DrawBarnColouredHexagon(DrawingContext context, Point center, double radius, double orientation)
        {
            DrawUniformShape(
                context,
                Brushes.Red,
                new Pen(Brushes.White, 2),
                center,
                radius,
                6,
                0
                );
        }
于 2012-11-16T20:59:25.870 に答える
0

六角形を埋める方法の例: http://www.codeproject.com/Articles/14948/Hexagonal-grid-for-games-and-other-projects-Part-1

于 2012-08-02T10:21:53.987 に答える