1 36 37 40 41 package java2d.demos.Arcs_Curves; 42 43 import java.awt.*; 44 import java.awt.geom.Ellipse2D ; 45 import java.awt.geom.Rectangle2D ; 46 import java.awt.geom.QuadCurve2D ; 47 import java.awt.geom.CubicCurve2D ; 48 import java.awt.geom.PathIterator ; 49 import java.awt.geom.FlatteningPathIterator ; 50 import java.awt.font.TextLayout ; 51 import java.awt.font.FontRenderContext ; 52 import java2d.Surface; 53 54 import static java.awt.Color .*; 55 import static java.awt.geom.PathIterator .*; 56 57 58 61 public class Curves extends Surface { 62 63 private static Color colors[] = { BLUE, GREEN, RED }; 64 65 public Curves() { 66 setBackground(WHITE); 67 } 68 69 70 public void render(int w, int h, Graphics2D g2) { 71 72 int y = 0; 73 g2.setColor(BLACK); 74 FontRenderContext frc = g2.getFontRenderContext(); 75 TextLayout tl = new TextLayout ("QuadCurve2D", g2.getFont(), frc); 76 float xx = (float) (w*.5-tl.getBounds().getWidth()/2); 77 tl.draw(g2, xx, tl.getAscent()); 78 79 tl = new TextLayout ("CubicCurve2D", g2.getFont(), frc); 80 xx = (float) (w*.5-tl.getBounds().getWidth()/2); 81 tl.draw(g2, xx, h*.5f); 82 g2.setStroke(new BasicStroke(5.0f)); 83 84 float yy = 20; 85 86 for (int i = 0; i < 2; i++) { 87 for (int j = 0; j < 3; j++) { 88 Shape shape = null; 89 90 if (i == 0) { 91 shape = new QuadCurve2D.Float (w*.1f,yy,w*.5f,50,w*.9f,yy); 92 } else { 93 shape = new CubicCurve2D.Float (w*.1f,yy,w*.4f,yy-15, 94 w*.6f,yy+15,w*.9f,yy); 95 } 96 g2.setColor(colors[j]); 97 if (j != 2) 98 g2.draw(shape); 99 100 if (j == 1 ) { 101 g2.setColor(LIGHT_GRAY); 102 PathIterator f = shape.getPathIterator(null); 103 while ( !f.isDone() ) { 104 float[] pts = new float[6]; 105 switch ( f.currentSegment(pts) ) { 106 case SEG_MOVETO: 107 case SEG_LINETO: 108 g2.fill(new Rectangle2D.Float (pts[0], pts[1], 5, 5)); 109 break; 110 case SEG_CUBICTO: 111 case SEG_QUADTO: 112 g2.fill(new Rectangle2D.Float (pts[0], pts[1], 5, 5)); 113 if (pts[2] != 0) { 114 g2.fill(new Rectangle2D.Float (pts[2], pts[3], 5, 5)); 115 } 116 if (pts[4] != 0) { 117 g2.fill(new Rectangle2D.Float (pts[4], pts[5], 5, 5)); 118 } 119 } 120 f.next(); 121 } 122 } else if (j == 2) { 123 PathIterator p = shape.getPathIterator(null); 124 FlatteningPathIterator f = new FlatteningPathIterator (p,0.1); 125 while ( !f.isDone() ) { 126 float[] pts = new float[6]; 127 switch ( f.currentSegment(pts) ) { 128 case SEG_MOVETO: 129 case SEG_LINETO: 130 g2.fill(new Ellipse2D.Float (pts[0], pts[1],3,3)); 131 } 132 f.next(); 133 } 134 } 135 yy += h/6; 136 } 137 yy = h/2+15; 138 } 139 } 140 141 142 public static void main(String argv[]) { 143 createDemoFrame(new Curves()); 144 } 145 } 146 | Popular Tags |