/******************************************************************** * Functions to make 2D shapes and symbols * * Example: import shapes2d, display; G = graph(300, 300); node = G.node; node:add(plus(30)); show(G.render); * ********************************************************************/ load("zegraph.dll"); PI2 = 6.28318530717959; function plus(size=5) { line = zegraph("line"); vert = zegraph("vertex"); line:type("lines"); line:vertex(vert); d = size / 2.0; vert:add(-d, 0, 0, d, 0, 0, 0, -d, 0, 0, d, 0); return line; } function cross(size=5) { line = zegraph("line"); vert = zegraph("vertex"); line:type("lines"); line:smooth(true); line:vertex(vert); d = size / 2.0; vert:add(-d, -d, 0, d, d, 0, -d, d, 0, d, -d, 0); return line; } function triangle(size=5) { poly = zegraph("polygon"); vert = zegraph("vertex"); poly:type("triangles"); poly:smooth(true); poly:vertex(vert); dx = size / 2.0; dy = sqrt(size*size + dx*dx) / 2.0; vert:add(0, dy, 0, -dx, -dy, 0, dx, -dy, 0); return poly; } function square(size=5) { poly = zegraph("polygon"); vert = zegraph("vertex"); poly:type("quads"); poly:vertex(vert); d = size / 2.0; vert:add(-d, -d, 0, d, -d, 0, d, d, 0, -d, d, 0); return poly; } function diamond(size=5) { poly = zegraph("polygon"); vert = zegraph("vertex"); poly:type("quads"); poly:smooth(true); poly:vertex(vert); d = size / 2.0; vert:add(-d, 0, 0, 0, -d, 0, d, 0, 0, 0, d, 0); return poly; } function circle(size=5) { r = size / 2.0; d = PI2 / 32; vert = zegraph("vertex"); line = zegraph("line"); line:type("loop"); line:smooth(true); line:vertex(vert); for (a = 0.0; a < PI2; a += d) { x = r*cos(a); y = r*sin(a); vert:add(x, y, 0); } return line; } function pie(size=5) { r = size / 2.0; d = PI2 / 32; vert = zegraph("vertex"); poly = zegraph("polygon"); poly:type("trianglefan"); poly:smooth(true); poly:vertex(vert); for (a = 0.0; a <= PI2; a += d) { x = r*cos(a); y = r*sin(a); vert:add(x, y, 0); } return poly; }