| Package import | "zappem.net/pub/graphics/polymark" |
|---|---|
| Documentation | https://pkg.go.dev/zappem.net/pub/graphics/polymark |
| Sources | https://github.com/tinkerator/polymark |
For line graphics and plotters/lasers/cnc devices, it is convenient to
be able to render shapes as outlines. This
package converts desired
shapes into such outlines in the form of
polygon.Shapes.
The package contains an examples/lines.go program to demonstrate the
capabilities of the polymark package. For example,
$ go run examples/lines.go --n=3 --wide=10 --m=5 --width 400 --height 400
2025/06/15 09:58:50 wrote result to "image.png"
generates a 400x400 pixel image:

The default options for example/lines.go:
$ go run examples/lines.go
2025/06/20 08:35:12 wrote result to "image.png"
generates the following 500x500 pixel image:

The default options for example/lines.go with the --ids and
--fill arguments:
$ go run examples/lines.go --ids --fill
2025/06/20 08:35:12 wrote result to "image.png"
generates the following 500x500 pixel image with the solid parts of the shapes filled and each polygon of outline numerically identified:

Use go run examples/lines.go --help to see all of the flag options.
The package contains a simple set of tests that can be run as follows:
$ git clone https://github.com/tinkerator/polymark.git
$ cd polymark
$ go test -v
=== RUN TestCircle
--- PASS: TestCircle (0.00s)
=== RUN TestLine
polymark_test.go:121: [ 0] got="..##################################..."
polymark_test.go:121: [ 1] got=".##................................##.."
polymark_test.go:121: [ 2] got="##..................................##."
polymark_test.go:121: [ 3] got="#....................................#."
polymark_test.go:121: [ 4] got="#....................................#."
polymark_test.go:121: [ 5] got="##..................................##."
polymark_test.go:121: [ 6] got=".##................................##.."
polymark_test.go:121: [ 7] got="..##################################..."
polymark_test.go:121: [ 8] got="......................................."
--- PASS: TestLine (0.00s)
=== RUN TestText
polymark_test.go:160: [ 0] got="....######....."
polymark_test.go:160: [ 1] got="...#..######..."
polymark_test.go:160: [ 2] got="..#.##....#.#.."
polymark_test.go:160: [ 3] got=".#.#.......#.#."
polymark_test.go:160: [ 4] got=".##........#.#."
polymark_test.go:160: [ 5] got="##..........##."
polymark_test.go:160: [ 6] got="##############."
polymark_test.go:160: [ 7] got="##############."
polymark_test.go:160: [ 8] got="##............."
polymark_test.go:160: [ 9] got="##............."
polymark_test.go:160: [10] got="#.#............"
polymark_test.go:160: [11] got=".##.........##."
polymark_test.go:160: [12] got=".#.#.......#.#."
polymark_test.go:160: [13] got="..#.#....##.#.."
polymark_test.go:160: [14] got="...######..#..."
polymark_test.go:160: [15] got=".....######...."
polymark_test.go:160: [16] got="..............."
polymark_test.go:187: [ 0] got="...####.."
polymark_test.go:187: [ 1] got=".#####.#."
polymark_test.go:187: [ 2] got=".#.#..##."
polymark_test.go:187: [ 3] got="##..#..#."
polymark_test.go:187: [ 4] got="##...###."
polymark_test.go:187: [ 5] got="##....##."
polymark_test.go:187: [ 6] got="#.#......"
polymark_test.go:187: [ 7] got=".####...."
polymark_test.go:187: [ 8] got="........."
polymark_test.go:226: [ 0] got="##............."
polymark_test.go:226: [ 1] got="##............."
polymark_test.go:226: [ 2] got="##............."
polymark_test.go:226: [ 3] got="##............."
polymark_test.go:226: [ 4] got="##............."
polymark_test.go:226: [ 5] got="##............."
polymark_test.go:226: [ 6] got="##............."
polymark_test.go:226: [ 7] got="##.######......"
polymark_test.go:226: [ 8] got="###########...."
polymark_test.go:226: [ 9] got="#####....###..."
polymark_test.go:226: [10] got="###.......###.."
polymark_test.go:226: [11] got="##.........##.."
polymark_test.go:226: [12] got="##.........#.#."
polymark_test.go:226: [13] got="##..........##."
polymark_test.go:226: [14] got="##..........##."
polymark_test.go:226: [15] got="##..........##."
polymark_test.go:226: [16] got="##..........##."
polymark_test.go:226: [17] got="##.........#.#."
polymark_test.go:226: [18] got="##.........##.."
polymark_test.go:226: [19] got="###.......###.."
polymark_test.go:226: [20] got="####....####..."
polymark_test.go:226: [21] got="###########...."
polymark_test.go:226: [22] got="##..######....."
polymark_test.go:226: [23] got="..............."
--- PASS: TestText (0.00s)
=== RUN TestAlign
polymark_test.go:266: 0> ".################...##.......................###############........######.....................################...###########....."
polymark_test.go:266: 1> ".###############....##.......................###############.......#.#######...................###############....##############.."
polymark_test.go:266: 2> "........##..........##..............................#.............###......##.........................##..........##.........####."
polymark_test.go:266: 3> "........##..........##..............................#............#...........#........................##..........##...........#.#"
polymark_test.go:266: 4> "........##..........##..............................#...........##...........##.......................##..........##............##"
polymark_test.go:266: 5> "........##..........##..............................#...........#.............#.......................##..........##............##"
polymark_test.go:266: 6> "........##..........##..............................#...........#.............#.......................##..........##............##"
polymark_test.go:266: 7> "........##..........##..............................#..........#......................................##..........##............#."
polymark_test.go:266: 8> "........##..........##..............................#..........#......................................##..........##...........##."
polymark_test.go:266: 9> "........##..........##..............................#..........#......................................##..........##.........###.."
polymark_test.go:266: 10> "........##..........##..............................#..........#......................................##..........#############..."
polymark_test.go:266: 11> "........##..........##..............................#..........#......................................##..........###########....."
polymark_test.go:266: 12> "........##..........##..............................#..........#......................................##..........##......#......."
polymark_test.go:266: 13> "........##..........##..............................#..........#......................................##..........##.......#......"
polymark_test.go:266: 14> "........##..........##..............................#..........#......................................##..........##........#....."
polymark_test.go:266: 15> "........##..........##..............................#...........#.....................................##..........##........#....."
polymark_test.go:266: 16> "........##..........##..............................#...........#.............#.......................##..........##.........#...."
polymark_test.go:266: 17> "........##..........##..............................#...........##...........##.......................##..........##.........#...."
polymark_test.go:266: 18> "........##..........##..............................#............#...........#........................##..........##..........#..."
polymark_test.go:266: 19> "........##..........##..............................#............##.........##........................##..........##...........#.."
polymark_test.go:266: 20> "........##..........##..............................#..............#......##..........................##..........##...........#.."
polymark_test.go:266: 21> "........##..........##############..................#..............#######.#..........................##..........##............##"
polymark_test.go:266: 22> "........#...........#############...................#................######...........................#...........#.............#."
polymark_test.go:266: 23> ".................................................................................................................................."
polymark_test.go:266: 24> ".................................................................................................................................."
polymark_test.go:266: 25> "##..............##......##...............##..............##..........#######..............##..............##......###########....."
polymark_test.go:266: 26> "##..............##......##...............##..............##.........##########............##..............##......##############.."
polymark_test.go:266: 27> "###............###......##...............###............###........###......##............###............###......##.........####."
polymark_test.go:266: 28> "###............###......##...............###............###.......##..........##..........###............###......##...........#.#"
polymark_test.go:266: 29> "####..........####......##...............####..........####.......#...........#.#.........####..........####......##............##"
polymark_test.go:266: 30> "####..........####......##...............####..........####......##............##.........####..........####......##............##"
polymark_test.go:266: 31> "####..........####......##...............####..........####......##............#..........####..........####......##............##"
polymark_test.go:266: 32> "##.##........##.##......##...............##.##........##.##.....##........................##.##........##.##......##............#."
polymark_test.go:266: 33> "##.##........##.##......##...............##.##........##.##.....##........................##.##........##.##......##...........##."
polymark_test.go:266: 34> "##.##........##.##......##...............##.##........##.##.....##........................##.##........##.##......##.........###.."
polymark_test.go:266: 35> "##..##......##..##......##...............##..##......##..##.....##........................##..##......##..##......#############..."
polymark_test.go:266: 36> "##..##......##..##......##...............##..##......##..##.....##........................##..##......##..##......###########....."
polymark_test.go:266: 37> "##...##....##...##......##...............##...##....##...##.....##........................##...##....##...##......##......#......."
polymark_test.go:266: 38> "##...##....##...##......##...............##...##....##...##.....##........................##...##....##...##......##.......#......"
polymark_test.go:266: 39> "##...##....##...##......##...............##...##....##...##.....##........................##...##....##...##......##........#....."
polymark_test.go:266: 40> "##....##..##....##......##...............##....##..##....##......##.......................##....##..##....##......##........#....."
polymark_test.go:266: 41> "##....##..##....##......##...............##....##..##....##......##............##.........##....##..##....##......##.........#...."
polymark_test.go:266: 42> "##....##..##....##......##...............##....##..##....##......#.#...........#..........##....##..##....##......##.........#...."
polymark_test.go:266: 43> "##.....####.....##......##...............##.....####.....##.......##..........##..........##.....####.....##......##..........#..."
polymark_test.go:266: 44> "##.....####.....##......##...............##.....####.....##.......##.........##...........##.....####.....##......##...........#.."
polymark_test.go:266: 45> "##......##......##......##...............##......##......##.........##.....###............##......##......##......##...........#.."
polymark_test.go:266: 46> "##......##......##......##############...##......##......##.........#########.............##......##......##......##............##"
polymark_test.go:266: 47> "#.......#.......#.......#############....#.......#.......#............######..............#.......#.......#.......#.............#."
polymark_test.go:266: 48> ".................................................................................................................................."
polymark_test.go:266: 49> ".................................................................................................................................."
polymark_test.go:266: 50> ".................................................................................................................................."
polymark_test.go:266: 51> ".................................................................................................................................."
polymark_test.go:266: 52> ".................................................................................................................................."
polymark_test.go:266: 53> ".###########..........##....................###########..............######..................###########..........###########....."
polymark_test.go:266: 54> ".##############.......##....................#############...........#.#######................##############.......##############.."
polymark_test.go:266: 55> ".##.........####......##....................#..........###.........###......##...............##.........####......##.........####."
polymark_test.go:266: 56> ".##...........#.#.....##....................#............##.......#...........#..............##...........#.#.....##...........#.#"
polymark_test.go:266: 57> ".##............##.....##....................#.............#......##...........##.............##............##.....##............##"
polymark_test.go:266: 58> ".##............##.....##....................#.............#......#.............#.............##............##.....##............##"
polymark_test.go:266: 59> ".##............##.....##....................#.............#......#.............#.............##............##.....##............##"
polymark_test.go:266: 60> ".##............#......##....................#............##.....#............................##............#......##............#."
polymark_test.go:266: 61> ".##...........##......##....................#............#......#............................##...........##......##...........##."
polymark_test.go:266: 62> ".##.........###.......##....................#..........###......#............................##.........###.......##.........###.."
polymark_test.go:266: 63> ".#############........##....................#############.......#............................#############........#############..."
polymark_test.go:266: 64> ".##############.......##....................#############.......#............................##############.......###########....."
polymark_test.go:266: 65> ".##.........####......##....................#..........###......#............................##.........####......##......#......."
polymark_test.go:266: 66> ".##...........#.#.....##....................#............##.....#............................##...........#.#.....##.......#......"
polymark_test.go:266: 67> ".##............##.....##....................#.............#.....#............................##............##.....##........#....."
polymark_test.go:266: 68> ".##............##.....##....................#.............#......#...........................##............##.....##........#....."
polymark_test.go:266: 69> ".##............##.....##....................#.............#......#.............#.............##............##.....##.........#...."
polymark_test.go:266: 70> ".##............##.....##....................#.............#......##...........##.............##............##.....##.........#...."
polymark_test.go:266: 71> ".##............#......##....................#............##.......#...........#..............##............#......##..........#..."
polymark_test.go:266: 72> ".##...........##......##....................#............#........##.........##..............##...........##......##...........#.."
polymark_test.go:266: 73> ".##.........###.......##....................#..........###..........#......##................##.........###.......##...........#.."
polymark_test.go:266: 74> ".#############........##############........#############...........#######.#................#############........##............##"
polymark_test.go:266: 75> ".###########..........#############.........###########...............######.................###########..........#.............#."
--- PASS: TestAlign (0.00s)
PASS
ok zappem.net/pub/graphics/polymark 0.005s
The polymark package has been developed purely out of self-interest
and offers no guarantee of fixes or support. That being said, if you
would like to suggest a feature addition or suggest a fix, please use
the bug tracker.
See the LICENSE file: the same BSD 3-clause license as that used by golang itself.