/avg

Ascii vector graphics

Primary LanguageGo

avg

Ascii vector graphics

Inspired by: http://cocoamine.net/blog/2015/03/20/replacing-photoshop-with-nsstring/

Usage:

    import "github.com/bakul/avg/avg"

    pic := []string{
            "0..0...1....",
            ".....1...1..",
            "0..0...1....",
            "2..3....A..A",
            ".7....4....9",
            "6..5........",
    }
    fig := avg.ToFig(pic)

The returned value is a vector of Shapes, where each Shape has a kind (Dot, Line, Curve, Circle, Square) and a list of points. The example above will create a square, a circle, a (closed) curve, a dot and a line.

You can have upto 58 shapes in a figure. The rules are as follows:

All letters except 0..9A..HJ..NP..Za..hj..np..z is ignored. Letters O,o,I,i are not used as they are too close to 0 and 1 in some fonts. The sequence is as shown (this A follows 9, J follows H, a follows Z etc.). Note: this sequence is not the same as in the referenced blog.

x direction does down, while the y direction goes across. If one of the above letters is placed an x,y location, it defines a point.

A dot is defined with a point.

If there are exactly 4 points defined with the same letter, and they line up in x & y directions, it is considered a square (or rectangle).

If there are 3 or more points with the same letter, a circle (or ellipse) is defined.

Same letter at two points defines a line.

Else a (closed) curve is defined as a sequence of consecutive letters. Thus in the above example, 2-3-4-5-6-2 defines a closed curve.

A curve or a dot may be followed or preceded a line, square or circle but not a curve or a dot. Thus in the above example we skipped 8 to define a dot as letter 9.