Along with a couple game projects, I have various pieces of tooling and libraries that I’m working on. Today I’m sharing LilyPath, a drawing library for MonoGame and XNA.
LilyPath provides some of the functionality found in
System.Drawing, such as drawing paths and shapes with configurable pens and brushes. Instead of creating raster image however, LilyPath renders everything directly to your scene. Complex paths and filled shapes are rendered as polygons, while primitives are rendered as GL or DX lines.
Drawing is handled through a
DrawBatch object to reduce the number of draw calls needed, mirroring the role of
SpriteBatch for rendering textured quads. More complex geometry can be compiled ahead of time into
GraphicsPath objects, which contain the polygon data after arcs, joins, and other calculations have been completed.
Here’s a short code sample for drawing the lily pad in the picture above (without the flower):
drawBatch.Begin(DrawSortMode.Deferred); Vector2 origin = new Vector2(200, 200); float startAngle = (float)(Math.PI / 16) * 25; // 11:20 float arcLength = (float)(Math.PI / 16) * 30; drawBatch.FillCircle(new SolidColorBrush(Color.SkyBlue), origin, 175); drawBatch.FillArc(new SolidColorBrush(Color.LimeGreen), origin, 150, startAngle, arcLength, ArcType.Sector); drawBatch.DrawClosedArc(new Pen(Color.Green, 15), origin, 150, startAngle, arcLength, ArcType.Sector); drawBatch.End();
Source code for the full image and other examples can be found in the included test project,
I’m currently using LilyPath in a game project for procedural terrain generation, and in a level editor for general annotation support. If you find an interesting use for this library, let me know in the comments.