Search code examples
wpfgeometrydrawing

WPF: is it possible to render a circle using GeometryDrawing?


I've got a GeometryDrawing similar like this:

<DrawingImage x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type wpfhlp:FokusGroupBox},ResourceId=IconTest}">
  <DrawingImage.Drawing>
    <DrawingGroup>
      <GeometryDrawing Brush="Black" Geometry="M0,260 L0,600 L110,670 L110,500 L190,550 L190,710 L300,775 L300,430 L150,175"/>
    </DrawingGroup>
  </DrawingImage.Drawing>
</DrawingImage>

Now I'd like to draw a circle instead, but I only can find commands to move, draw a line, nothing to draw a circle.

Is there some way to get the GeometryDrawing to draw a circle?


Solution

  • ....
    <GeometryDrawing Brush="Black">
        <GeometryDrawing.Geometry>
            <EllipseGeometry Center="0,0" RadiusX="1" RadiusY="1" />
        </GeometryDrawing.Geometry>
    </GeometryDrawing>
    

    Alternatively, you can also use Path Markup Syntax to draw two elliptic arcs (upper and lower half of the circle):

    <GeometryDrawing Brush="Black" Geometry="M -1,0 A 1,1 0 1 1 1,0 M -1,0 A 1,1 0 1 0 1,0" />
    

    In case you're wondering, this is what those cryptic drawing instructions mean:

    • M -1,0: Start drawing at point (-1, 0).
    • A 1,1 0 1 1 1,0: Draw an elliptic arc with radius (1, 1) to point (1, 0). The single-digit flags in between mean: no rotation (0), angle 180° or larger (1), positive-angle direction (1, meaning clockwise). This yields the upper half of the circle.
    • M -1,0: Start drawing again at point (-1, 0)
    • A 1,1 0 1 0 1,0: Draw the same arc as before, only this time in negative-angle direction (0, meaning counter-clockwise).