|
|
1.1 ! root 1: #import <string.h> ! 2: ! 3: defineps PSInit() ! 4: ! 5: /oval { ! 6: % w h x y ! 7: translate scale newpath .5 .5 .5 0 360 arc closepath ! 8: } def ! 9: ! 10: /line { ! 11: % w h x y ! 12: moveto rlineto stroke ! 13: } def ! 14: ! 15: /setup { ! 16: % linejoin lincap linewidth ! 17: setlinewidth ! 18: setlinecap ! 19: setlinejoin ! 20: gsave ! 21: } def ! 22: ! 23: /arrow { ! 24: % angle x y ! 25: newpath ! 26: moveto ! 27: dup rotate ! 28: -13 6 rlineto ! 29: 4 -6 rlineto ! 30: -4 -6 rlineto ! 31: closepath ! 32: gsave ! 33: 0 setlinejoin ! 34: stroke ! 35: grestore ! 36: fill ! 37: neg rotate ! 38: } def ! 39: ! 40: endps ! 41: ! 42: /* ! 43: * The following proc has an interesting feature. Since we draw an oval by ! 44: * drawing a unit circle, then scaling it in both directions, we run into the ! 45: * problem that the linewidth also gets scaled! We avoid this by reverting ! 46: * to the device matrix (the non-scaled matrix) just before stroking the line. ! 47: * This works because the path is built up with the scaled matrix, but the ! 48: * stroke is done with the unscaled one. Neat, huh? ! 49: */ ! 50: ! 51: defineps PSFramedOval(float x, y, w, h) ! 52: w h x y oval ! 53: matrix defaultmatrix setmatrix stroke ! 54: endps ! 55: ! 56: defineps PSFilledOval(float x, y, w, h) ! 57: w h x y oval fill ! 58: endps ! 59: ! 60: defineps PSLine(float x, y, w, h) ! 61: w h x y line ! 62: endps ! 63: ! 64: defineps PSCurve(float x0, y0, x1, y1, x2, y2, x3, y3) ! 65: x0 y0 moveto x1 y1 x2 y2 x3 y3 curveto stroke ! 66: endps ! 67: ! 68: defineps PSArrow(float x, y, angle) ! 69: angle x y arrow ! 70: endps ! 71: ! 72: defineps PSSetParameters(int cap, join; float linewidth) ! 73: join cap linewidth setup ! 74: endps
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.