// Demonstrates and tests drawing curves. // This renders the images used in the documentation of GeneralPath. drawCubicWithEndpoints[p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] := { g1 = new graphics // Draw endpoints g1.color[0,0,1] g1.fillRectCenter[p1x,p1y, .2,.2] g1.fillRectCenter[p2x,p2y, .2,.2] // Draw control points g1.color[.5,.5,.5] g1.fillRectCenter[c1x,c1y,.2,.2] g1.fillRectCenter[c2x,c2y,.2,.2] // Draw control lines g1.color[.7,.7,.7] g1.line[p1x,p1y,c1x,c1y] g1.line[p2x,p2y,c2x,c2y] // Draw the cubic curve g1.color[0,0,0] gp = new GeneralPath gp.moveTo[p1x,p1y] gp.cubicCurve[c1x,c1y, c2x,c2y, p2x,p2y] g1.add[gp] // g1.font["SansSerif", "plain", 1] // g1.text["Cubic B\u00e9zier curve", 5, -6] g1.show[] g1.write["cubic.svg",500,400] g1.write["cubic.png",300,200] g1.write["cubic.jpg",500,400] // g1.print[] } // Quadratic curve example drawQuadraticWithEndpoints[p1x, p1y, c1x, c1y, p2x, p2y] := { g1 = new graphics // Draw endpoints g1.color[0,0,1] g1.fillRectCenter[p1x,p1y, .2,.2] g1.fillRectCenter[p2x,p2y, .2,.2] // Draw control points g1.color[.5,.5,.5] g1.fillRectCenter[c1x,c1y,.2,.2] // Draw control lines g1.color[.7,.7,.7] g1.line[p1x,p1y,c1x,c1y] g1.line[p2x,p2y,c1x,c1y] // Draw the cubic curve g1.color[0,0,0] gp = new GeneralPath gp.moveTo[p1x,p1y] gp.quadratic[c1x,c1y, p2x,p2y] g1.add[gp] // g1.font["SansSerif", "plain", 1] // g1.text["Cubic B\u00e9zier curve", 5, -6] g1.show[] g1.write["quadratic.svg",500,400] g1.write["quadratic.png",300,150] g1.write["quadratic.jpg",500,400] // g1.print[] } drawCubicWithEndpoints[0,0, 3,3, 6,-5, 10,1] drawQuadraticWithEndpoints[0,0, 2,4, 10,1]