private boolean assertValidVertex(Vertex v) { // Allows to find bugs in collapsing. // System.out.println("Asserting " + v.index); for (Triangle t : v.triangles) { for (int i = 0; i < 3; i++) { // System.out.println("check " + t.vertex[i].index); //assert (collapseCostSet.contains(t.vertex[i])); assert (find(collapseCostSet, t.vertex[i])); assert (t.vertex[i].edges.contains(new Edge(t.vertex[i].collapseTo))); for (int n = 0; n < 3; n++) { if (i != n) { int id = t.vertex[i].edges.indexOf(new Edge(t.vertex[n])); Edge ed = t.vertex[i].edges.get(id); //assert (ed.collapseCost != UNINITIALIZED_COLLAPSE_COST); } else { assert (!t.vertex[i].edges.contains(new Edge(t.vertex[n]))); } } } } return true; }
private void removeEdge(Vertex v, Edge edge) { Edge ed = null; for (Edge edge1 : v.edges) { if (edge1.equals(edge)) { ed = edge1; break; } } if (ed.refCount == 1) { v.edges.remove(ed); } else { ed.refCount--; } }
private boolean assertValidVertex(Vertex v) { // Allows to find bugs in collapsing. // System.out.println("Asserting " + v.index); for (Triangle t : v.triangles) { for (int i = 0; i < 3; i++) { // System.out.println("check " + t.vertex[i].index); //assert (collapseCostSet.contains(t.vertex[i])); assert (find(collapseCostSet, t.vertex[i])); assert (t.vertex[i].edges.contains(new Edge(t.vertex[i].collapseTo))); for (int n = 0; n < 3; n++) { if (i != n) { int id = t.vertex[i].edges.indexOf(new Edge(t.vertex[n])); Edge ed = t.vertex[i].edges.get(id); //assert (ed.collapseCost != UNINITIALIZED_COLLAPSE_COST); } else { assert (!t.vertex[i].edges.contains(new Edge(t.vertex[n]))); } } } } return true; }
private void replaceVertexID(Triangle triangle, int oldID, int newID, Vertex dst) { dst.triangles.add(triangle); // NOTE: triangle is not removed from src. This is implementation specific optimization. // Its up to the compiler to unroll everything. for (int i = 0; i < 3; i++) { if (triangle.vertexId[i] == oldID) { for (int n = 0; n < 3; n++) { if (i != n) { // This is implementation specific optimization to remove following line. //removeEdge(triangle.vertex[i], new Edge(triangle.vertex[n])); removeEdge(triangle.vertex[n], new Edge(triangle.vertex[i])); addEdge(triangle.vertex[n], new Edge(dst)); addEdge(dst, new Edge(triangle.vertex[n])); } } triangle.vertex[i] = dst; triangle.vertexId[i] = newID; return; } } // assert (false); }
private void addTriangleToEdges(Triangle tri) { if (bestQuality) { Triangle duplicate = getDuplicate(tri); if (duplicate != null) { if (!tri.isRemoved) { tri.isRemoved = true; indexCount -= 3; logger.log(Level.FINE, "duplicate triangle found{0}{1} It will be excluded from Lod level calculations.", new Object[]{tri, duplicate}); } } } for (int i = 0; i < 3; i++) { tri.vertex[i].triangles.add(tri); } for (int i = 0; i < 3; i++) { for (int n = 0; n < 3; n++) { if (i != n) { addEdge(tri.vertex[i], new Edge(tri.vertex[n])); } } } }
private void removeTriangleFromEdges(Triangle triangle, Vertex skip) { // skip is needed if we are iterating on the vertex's edges or triangles. for (int i = 0; i < 3; i++) { if (triangle.vertex[i] != skip) { triangle.vertex[i].triangles.remove(triangle); } } for (int i = 0; i < 3; i++) { for (int n = 0; n < 3; n++) { if (i != n) { removeEdge(triangle.vertex[i], new Edge(triangle.vertex[n])); } } } }
private void removeEdge(Vertex v, Edge edge) { Edge ed = null; for (Edge edge1 : v.edges) { if (edge1.equals(edge)) { ed = edge1; break; } } if (ed.refCount == 1) { v.edges.remove(ed); } else { ed.refCount--; } }
private void addEdge(Vertex v, Edge edge) { // assert (edge.destination != v); for (Edge ed : v.edges) { if (ed.equals(edge)) { ed.refCount++; return; } } v.edges.add(edge); edge.refCount = 1; }
private void addTriangleToEdges(Triangle tri) { if (bestQuality) { Triangle duplicate = getDuplicate(tri); if (duplicate != null) { if (!tri.isRemoved) { tri.isRemoved = true; indexCount -= 3; logger.log(Level.FINE, "duplicate triangle found{0}{1} It will be excluded from Lod level calculations.", new Object[]{tri, duplicate}); } } } for (int i = 0; i < 3; i++) { tri.vertex[i].triangles.add(tri); } for (int i = 0; i < 3; i++) { for (int n = 0; n < 3; n++) { if (i != n) { addEdge(tri.vertex[i], new Edge(tri.vertex[n])); } } } }
private void replaceVertexID(Triangle triangle, int oldID, int newID, Vertex dst) { dst.triangles.add(triangle); // NOTE: triangle is not removed from src. This is implementation specific optimization. // Its up to the compiler to unroll everything. for (int i = 0; i < 3; i++) { if (triangle.vertexId[i] == oldID) { for (int n = 0; n < 3; n++) { if (i != n) { // This is implementation specific optimization to remove following line. //removeEdge(triangle.vertex[i], new Edge(triangle.vertex[n])); removeEdge(triangle.vertex[n], new Edge(triangle.vertex[i])); addEdge(triangle.vertex[n], new Edge(dst)); addEdge(dst, new Edge(triangle.vertex[n])); } } triangle.vertex[i] = dst; triangle.vertexId[i] = newID; return; } } // assert (false); }
private void removeTriangleFromEdges(Triangle triangle, Vertex skip) { // skip is needed if we are iterating on the vertex's edges or triangles. for (int i = 0; i < 3; i++) { if (triangle.vertex[i] != skip) { triangle.vertex[i].triangles.remove(triangle); } } for (int i = 0; i < 3; i++) { for (int n = 0; n < 3; n++) { if (i != n) { removeEdge(triangle.vertex[i], new Edge(triangle.vertex[n])); } } } }
private void addEdge(Vertex v, Edge edge) { // assert (edge.destination != v); for (Edge ed : v.edges) { if (ed.equals(edge)) { ed.refCount++; return; } } v.edges.add(edge); edge.refCount = 1; }