@Override public Iterator<LineSegment<E>> iterator() { return getLineSegmentIterator(); } };
public Mesh buildExtrudedPrisma(float extrude, float height, Path<Vector3> path) { Path<Vector2> p2 = new Path<>(); for (ImmutableVector<Vector3> v : path) { float[] c = v.getCoords(); p2.addPathElement(new Vector2(c[0], c[2])); } return buildExtrudedPrisma(p2, extrude, height); }
public <E extends Vector<E>> Path<E> simplify(Path<E> path, double threshold) { if (path.size() < 3) { return path; Path<E> newPath = new Path<>(); Iterator<LineSegment<E>> segments = path.getLineSegmentIterator(); ImmutableVector<E> start = last.getStart(); newPath.addPathElement(last.getStart().clone()); last = segments.next(); newPath.addPathElement(last.getStart().clone()); break; System.out.println("discarded: " + discardCount + '(' + (discardCount / (float) path.size() * 100) + "%)"); newPath.addPathElement(last.getEnd().clone()); return newPath;
public <E extends Vector<E>> Collection<ImmutableVector<E>> buildExtrudedPolygon( Path<E> path, float extrude) { if (path.size() < 2) { throw new RuntimeException("The path is not complete, at least two elements have to exist!"); } Deque<ImmutableVector<E>> poly = new LinkedList<>(); Iterator<LineSegment<E>> iter = path.getLineSegmentIterator(); LineSegment<E> accLine = iter.next(); //Start poly punkte erstellen ImmutableVector[] p = generateExtrudedEndPoints(accLine.getStart(), accLine.getEnd(), extrude); poly.addFirst(p[0]); poly.addLast(p[1]); while (iter.hasNext()) { LineSegment<E> newLine = iter.next(); p = generateExtrudedPoints(accLine.getStart(), accLine.getEnd(), newLine.getEnd(), extrude); poly.addFirst(p[0]); poly.addLast(p[1]); accLine = newLine; } //end poly punkte erstellen p = generateExtrudedEndPoints(accLine.getEnd(), accLine.getStart(), extrude); poly.addFirst(p[1]); poly.addLast(p[0]); return poly; }
public Mesh buildPathMesh(Path<Vector3> path) { Element pos = new Element(new GenericVector(DataType.FLOAT, 3), "Position"); VertexBuffer vb = new VertexBuffer(pos, path.size()); vb.fullyInitialize(); Iterator<Vector3> iter = path.iterator(); for (Vertex v : vb) { float[] vec = iter.next().getCoords(); v.setAttribute(pos, vec[0], vec[1], vec[2]); } return new Mesh(null, vb, GL.GL_LINE_STRIP); }
int pathVertCount = path.size();