cozyvec
cozyvec copied to clipboard
Cozy Plotter Art Terminal
cozyvec
cozyvec is a terminal program for creating plotter art (specifically via SVG files) in javascript with minimal setup.

The library has been designed for brevity, so the code for a specific plot can be tweeted under the hashtag #cozyvec (much like PICO-8's #tweetcart and processing's #つぶやきProcessing) by providing shortcut versions of most tokens that are 1-4 characters.

Browser Version
Browser version available at: https://brubsby.github.io/cozyvec
However, the standalone builds are a better user experience (menu items)
Install & Run
You can download builds for OSX, Windows and Linux, or if you wish to build it yourself, follow these steps:
git clone https://github.com/brubsby/cozyvec.git
cd cozyvec/desktop/
npm install
npm start
Library
l2|lineTo(x,y)draw line from last pointm2|moveTo(x,y)move to pointclsp|closePath()draw line to last move to pointppr|paper(name[,orientation])change paper to size in libraryppr|paper(w,h[,name[,orientation]])custom paper in mmpen(w)pen width in mm, also starts new SVG group (to help with pen swapping)mbox|marginBox([a[,b[,c[,d]]]])create bounding box with margins [x1,y1,x2,y2] default 40 mm, partial arguments follow css margin conventionslog(s)log message s, gets overwritten by errors and other logserr|error(s)error message s and quitW|WIDTHcanvas widthH|HEIGHTcanvas heightPIπTAU|TWO_PI2*πHPI|HALF_PIπ/2QPI|QUARTER_PIπ/4pow(a,b)exponentiationsqrt(a)square rootsqr|square(a)square numbercub|cube(a)cube numberabs(a)absolute valueceil(a)round up to nearest integerflr|floor(a)round down to nearest integersgn|sign(a)return the sign of a numbersin(a)sinecos(a)cosinetan(a)tangentasin(a)arcsineacos(a)arccosineatan(a)arctangentat2|atan2(y,x)arctangent2min(...a)minimummax(...a)maximummid(a,b,c)clamp b to [a,c]smid|smoothMid(a,b,c)clamp b to [a,c] with smoothingdst|distance(x1,y1,x2,y2)distance between pointsrnd|random()random [0-1)rnd|random(a)random [0-a)rnd|random(a,b)random [a-b)srnd|seedRandom()seed rng with 0srnd|seedRandom(s)seed rng with snse|noise(pos)simplex noise (pos can be a number or 1-4 numbers in a list)nse|noise(pos,freq,amp)simplex noisense|noise(pos,freq,amp,octaves,lacunarity,gain)fractal simplex noise
Shortcuts
CmdOrCtrl+GdocumentationCmdOrCtrl+Rrun codeCmdOrCtrl+Eexport SVGCmdOrCtrl+Iexport PNGCmdOrCtrl+Pflip paper orientationCmdOrCtrl+Nnew fileCmdOrCtrl+Oopen .js fileCmdOrCtrl+Ssave .js fileCmdOrCtrl+Tabdev console
Paper Sizes
Paper sizes are defined here, create an issue or PR if you'd like me to add another standardized paper size to select from.
You can also call paper|ppr(width_mm, height_mm[, name[, is_portrait]]) at the beginning of your script to define a custom size for your plot.
Community
Contributing
Please create an issue if you have questions about behavior, find a bug, or want to make a feature/paper size request! I will also accept PR's, but might edit them first!