diff --git a/core/src/processing/core/PConstants.java b/core/src/processing/core/PConstants.java index 240abd3db..cf1479a27 100644 --- a/core/src/processing/core/PConstants.java +++ b/core/src/processing/core/PConstants.java @@ -167,8 +167,8 @@ public interface PConstants { static final int POINTS = (1 << 4) | 0; static final int LINES = (1 << 5) | 0; - static final int LINE_STRIP = (1 << 5) | 1; - static final int LINE_LOOP = (1 << 5) | 2; + //static final int LINE_STRIP = (1 << 5) | 1; + //static final int LINE_LOOP = (1 << 5) | 2; static final int TRIANGLES = (1 << 6) | 0; static final int TRIANGLE_STRIP = (1 << 6) | 1; @@ -180,6 +180,9 @@ public interface PConstants { static final int POLYGON = (1 << 8) | 0; //static final int CONCAVE_POLYGON = (1 << 8) | 1; //static final int CONVEX_POLYGON = (1 << 8) | 2; + + static final int OPEN = 1; + static final int CLOSE = 2; // shape modes diff --git a/core/src/processing/core/PGraphics.java b/core/src/processing/core/PGraphics.java index 164b95739..3fc5b1507 100644 --- a/core/src/processing/core/PGraphics.java +++ b/core/src/processing/core/PGraphics.java @@ -1111,7 +1111,12 @@ public abstract class PGraphics extends PImage implements PConstants { } - abstract public void endShape(); + public final void endShape() { + endShape(OPEN); + } + + + abstract public void endShape(int mode); @@ -1374,13 +1379,13 @@ public abstract class PGraphics extends PImage implements PConstants { fill = false; val = 0; - beginShape(LINE_LOOP); + beginShape(); //LINE_LOOP); for (int i = 0; i < accuracy; i++) { vertex(centerX + cosLUT[(int) val] * hradius, centerY + sinLUT[(int) val] * vradius); val += inc; } - endShape(); + endShape(CLOSE); fill = savedFill; } @@ -1479,7 +1484,7 @@ public abstract class PGraphics extends PImage implements PConstants { int startLUT = (int) (0.5f + (start / TWO_PI) * SINCOS_LENGTH); int stopLUT = (int) (0.5f + (stop / TWO_PI) * SINCOS_LENGTH); - beginShape(LINE_STRIP); + beginShape(); //LINE_STRIP); int increment = 1; // what's a good algorithm? stopLUT - startLUT; for (int i = startLUT; i < stopLUT; i += increment) { int ii = i % SINCOS_LENGTH; @@ -1621,7 +1626,7 @@ public abstract class PGraphics extends PImage implements PConstants { float x2, float y2, float x3, float y3, float x4, float y4) { - beginShape(LINE_STRIP); + beginShape(); //LINE_STRIP); vertex(x1, y1); bezierVertex(x2, y2, x3, y3, x4, y4); endShape(); @@ -1632,7 +1637,7 @@ public abstract class PGraphics extends PImage implements PConstants { float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4) { - beginShape(LINE_STRIP); + beginShape(); //LINE_STRIP); vertex(x1, y1, z1); bezierVertex(x2, y2, z2, x3, y3, z3, @@ -1762,7 +1767,7 @@ public abstract class PGraphics extends PImage implements PConstants { float x2, float y2, float x3, float y3, float x4, float y4) { - beginShape(LINE_STRIP); + beginShape(); //LINE_STRIP); curveVertex(x1, y1); curveVertex(x2, y2); curveVertex(x3, y3); @@ -1775,7 +1780,7 @@ public abstract class PGraphics extends PImage implements PConstants { float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4) { - beginShape(LINE_STRIP); + beginShape(); //LINE_STRIP); curveVertex(x1, y1, z1); curveVertex(x2, y2, z2); curveVertex(x3, y3, z3); diff --git a/core/src/processing/core/PGraphics2D.java b/core/src/processing/core/PGraphics2D.java index 2da35be1e..ee6aa28e7 100644 --- a/core/src/processing/core/PGraphics2D.java +++ b/core/src/processing/core/PGraphics2D.java @@ -220,7 +220,7 @@ public class PGraphics2D extends PGraphics { } - public void endShape() { + public void endShape(int mode) { // clear the 'shape drawing' flag in case of early exit //shape = 0; // hm can't do anymore.. @@ -312,7 +312,8 @@ public class PGraphics2D extends PGraphics { if (!stroke) return; // if it's a line loop, copy the vertex data to the last element - if (shape == LINE_LOOP) { + //if (shape == LINE_LOOP) { + if (mode == CLOSE) { float v0[] = polygon.vertices[0]; float v1[] = polygon.nextVertex(); polyVertexCount++; // since it had already been read above diff --git a/core/src/processing/core/PGraphics3D.java b/core/src/processing/core/PGraphics3D.java index 7b99df247..b648739e6 100644 --- a/core/src/processing/core/PGraphics3D.java +++ b/core/src/processing/core/PGraphics3D.java @@ -644,7 +644,7 @@ public class PGraphics3D extends PGraphics { } - public void endShape() { + public void endShape(int mode) { vertex_end = vertexCount; vertex_end_including_clip_verts = vertex_end; @@ -707,8 +707,8 @@ public class PGraphics3D extends PGraphics { break; case LINES: - case LINE_STRIP: - case LINE_LOOP: + //case LINE_STRIP: + //case LINE_LOOP: { // store index of first vertex int first = lineCount; @@ -725,7 +725,8 @@ public class PGraphics3D extends PGraphics { } // for LINE_LOOP, close the loop with a final segment - if (shape == LINE_LOOP) { + //if (shape == LINE_LOOP) { + if (mode == CLOSE) { add_line(stop, lines[first][VERTEX1]); } } @@ -838,8 +839,10 @@ public class PGraphics3D extends PGraphics { for (int i = vertex_start; i < stop; i++) { add_line(i, i+1); } - // draw the last line connecting back to the first point in poly - add_line(stop, lines[first][VERTEX1]); + if (mode == CLOSE) { + // draw the last line connecting back to the first point in poly + add_line(stop, lines[first][VERTEX1]); + } } break; } diff --git a/core/src/processing/core/PGraphicsJava2D.java b/core/src/processing/core/PGraphicsJava2D.java index 194f53d05..29222ceff 100644 --- a/core/src/processing/core/PGraphicsJava2D.java +++ b/core/src/processing/core/PGraphicsJava2D.java @@ -219,6 +219,7 @@ public class PGraphicsJava2D extends PGraphics { } break; +/* case LINE_STRIP: case LINE_LOOP: if (gpath == null) { @@ -228,7 +229,8 @@ public class PGraphicsJava2D extends PGraphics { gpath.lineTo(x, y); } break; - +*/ + case TRIANGLES: if ((vertexCount % 3) == 0) { triangle(vertices[vertexCount - 3][MX], @@ -331,8 +333,8 @@ public class PGraphicsJava2D extends PGraphics { } switch (shape) { - case LINE_LOOP: - case LINE_STRIP: + //case LINE_LOOP: + //case LINE_STRIP: case POLYGON: gpath.curveTo(x1, y1, x2, y2, x3, y3); break; @@ -348,9 +350,11 @@ public class PGraphicsJava2D extends PGraphics { float curveY[] = new float[4]; public void curveVertex(float x, float y) { - if ((shape != LINE_LOOP) && (shape != LINE_STRIP) && (shape != POLYGON)) { + //if ((shape != LINE_LOOP) && (shape != LINE_STRIP) && (shape != POLYGON)) { + if (shape != POLYGON) { throw new RuntimeException("curveVertex() can only be used with " + - "LINE_LOOP, LINE_STRIP, and POLYGON shapes"); + "POLYGON shapes"); + //"LINE_LOOP, LINE_STRIP, and POLYGON shapes"); } if (!curve_inited) curve_init(); @@ -408,22 +412,13 @@ public class PGraphicsJava2D extends PGraphics { } - public void endShape() { + public void endShape(int mode) { if (gpath != null) { // make sure something has been drawn - switch (shape) { - case LINE_STRIP: - stroke_shape(gpath); - break; - - case LINE_LOOP: - gpath.closePath(); - stroke_shape(gpath); - break; - - case POLYGON: - gpath.closePath(); + if (shape == POLYGON) { + if (mode == CLOSE) { + gpath.closePath(); + } draw_shape(gpath); - break; } } shape = 0;