/** Removes from this array all of elements contained in the specified array. * @return true if this array was modified. */ public boolean removeAll (ShortArray array) { int size = this.size; int startSize = size; short[] items = this.items; for (int i = 0, n = array.size; i < n; i++) { short item = array.get(i); for (int ii = 0; ii < size; ii++) { if (item == items[ii]) { removeIndex(ii); size--; break; } } } return size != startSize; }
/** @see #ShortArray(short[]) */ static public ShortArray with (short... array) { return new ShortArray(array); } }
@Override public void index (final short value) { indices.add(value); }
private void cutEarTip (int earTipIndex) { short[] indices = this.indices; ShortArray triangles = this.triangles; triangles.add(indices[previousIndex(earTipIndex)]); triangles.add(indices[earTipIndex]); triangles.add(indices[nextIndex(earTipIndex)]); indicesArray.removeIndex(earTipIndex); vertexTypes.removeIndex(earTipIndex); vertexCount--; }
tmpIndices = new ShortArray(divisionsU * 2); final int s = divisionsU + 3; tmpIndices.ensureCapacity(s); while (tmpIndices.size > s) tmpIndices.pop(); while (tmpIndices.size < s) tmpIndices.add(-1); int tempOffset = 0; curr1.normal.set(curr1.position).nor(); curr1.uv.set(u, v); tmpIndices.set(tempOffset, vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points if (!flipNormals) { rect(tmpIndices.get(tempOffset), tmpIndices.get((o - 1) % s), tmpIndices.get((o - (divisionsU + 2)) % s), tmpIndices.get((o - (divisionsU + 1)) % s)); } else { rect(tmpIndices.get(tempOffset), tmpIndices.get((o - (divisionsU + 1)) % s), tmpIndices.get((o - (divisionsU + 2)) % s), tmpIndices.get((o - 1) % s));
tmpIndices.clear(); tmpIndices.ensureCapacity(divisionsU * 2); tmpIndices.size = s; int tempOffset = 0; curr1.position.mul(transform); curr1.uv.set(u, v); tmpIndices.set(tempOffset, builder.vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points builder.rect(tmpIndices.get(tempOffset), tmpIndices.get((o - 1) % s), tmpIndices.get((o - (divisionsU + 2)) % s), tmpIndices.get((o - (divisionsU + 1)) % s)); tempOffset = (tempOffset + 1) % tmpIndices.size;
indicesArray.clear(); indicesArray.ensureCapacity(vertexCount); indicesArray.size = vertexCount; short[] indices = this.indices = indicesArray.items; triangles.clear(); triangles.ensureCapacity(Math.max(0, vertexCount - 2) * 3); triangulate(); return triangles;
triangles.clear(); if (count < 6) return triangles; triangles.ensureCapacity(count); triangles.add(end); triangles.add(end + 2); triangles.add(end + 4); complete.add(false); edges.add(p1); triangles.removeIndex(triangleIndex); triangles.removeIndex(triangleIndex - 1); triangles.removeIndex(triangleIndex - 2); complete.removeIndex(completeIndex); break; triangles.add(p1); triangles.add(edgesArray[i + 1]); triangles.add(pointIndex); complete.add(false); for (int i = triangles.size - 1; i >= 0; i -= 3) { if (trianglesArray[i] >= end || trianglesArray[i - 1] >= end || trianglesArray[i - 2] >= end) { triangles.removeIndex(i); triangles.removeIndex(i - 1); triangles.removeIndex(i - 2);
/** Reduces the size of the backing array to the size of the actual items. This is useful to release memory when many items * have been removed, or if it is known that more items will not be added. * @return {@link #items} */ public short[] shrink () { if (items.length != size) resize(size); return items; }
public void render () { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); renderer.setColor(Color.RED); renderer.begin(ShapeType.Filled); for (int i = 0; i < points.size; i += 2) renderer.circle(points.get(i), points.get(i + 1), 4, 12); renderer.end(); renderer.setColor(Color.WHITE); renderer.begin(ShapeType.Line); for (int i = 0; i < triangles.size; i += 3) { int p1 = triangles.get(i) * 2; int p2 = triangles.get(i + 1) * 2; int p3 = triangles.get(i + 2) * 2; renderer.triangle( // points.get(p1), points.get(p1 + 1), // points.get(p2), points.get(p2 + 1), // points.get(p3), points.get(p3 + 1)); } renderer.end(); }
/** Clears the data being built up until now, including the vertices, indices and all parts. Must be called in between the call * to #begin and #end. Any builder calls made from the last call to #begin up until now are practically discarded. The state * (e.g. UV region, color, vertex transform) will remain unchanged. */ public void clear () { this.vertices.clear(); this.indices.clear(); this.parts.clear(); this.vindex = 0; this.lastIndex = -1; this.istart = 0; this.part = null; }
@Override public void ensureIndices (int numIndices) { indices.ensureCapacity(numIndices); }
public void addAll (ShortArray array) { addAll(array.items, 0, array.size); }
public boolean removeValue (short value) { short[] items = this.items; for (int i = 0, n = size; i < n; i++) { if (items[i] == value) { removeIndex(i); return true; } } return false; }
vertices[i] = Float.parseFloat(polygonStrings[i]); return new PolygonRegion(textureRegion, vertices, triangulator.computeTriangles(vertices).toArray());
tmpIndices = new ShortArray(divisionsU * 2); final int s = divisionsU + 3; tmpIndices.ensureCapacity(s); while (tmpIndices.size > s) tmpIndices.pop(); while (tmpIndices.size < s) tmpIndices.add(-1); int tempOffset = 0; curr1.normal.set(curr1.position).nor(); curr1.uv.set(u, v); tmpIndices.set(tempOffset, vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points rect(tmpIndices.get(tempOffset), tmpIndices.get((o - 1) % s), tmpIndices.get((o - (divisionsU + 2)) % s), tmpIndices.get((o - (divisionsU + 1)) % s)); tempOffset = (tempOffset + 1) % tmpIndices.size;
tmpIndices.clear(); tmpIndices.ensureCapacity(divisionsU * 2); tmpIndices.size = s; int tempOffset = 0; curr1.position.mul(transform); curr1.uv.set(u, v); tmpIndices.set(tempOffset, builder.vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points builder.rect(tmpIndices.get(tempOffset), tmpIndices.get((o - 1) % s), tmpIndices.get((o - (divisionsU + 2)) % s), tmpIndices.get((o - (divisionsU + 1)) % s)); tempOffset = (tempOffset + 1) % tmpIndices.size;
indicesArray.clear(); indicesArray.ensureCapacity(vertexCount); indicesArray.size = vertexCount; short[] indices = this.indices = indicesArray.items; triangles.clear(); triangles.ensureCapacity(Math.max(0, vertexCount - 2) * 3); triangulate(); return triangles;
triangles.clear(); if (count < 6) return triangles; triangles.ensureCapacity(count); triangles.add(end); triangles.add(end + 2); triangles.add(end + 4); complete.add(false); edges.add(p1); triangles.removeIndex(triangleIndex); triangles.removeIndex(triangleIndex - 1); triangles.removeIndex(triangleIndex - 2); complete.removeIndex(completeIndex); break; triangles.add(p1); triangles.add(edgesArray[i + 1]); triangles.add(pointIndex); complete.add(false); for (int i = triangles.size - 1; i >= 0; i -= 3) { if (trianglesArray[i] >= end || trianglesArray[i - 1] >= end || trianglesArray[i - 2] >= end) { triangles.removeIndex(i); triangles.removeIndex(i - 1); triangles.removeIndex(i - 2);
/** Reduces the size of the backing array to the size of the actual items. This is useful to release memory when many items * have been removed, or if it is known that more items will not be added. * @return {@link #items} */ public short[] shrink () { if (items.length != size) resize(size); return items; }