Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv22351/src/net/sourceforge/bprocessor/model
Modified Files:
Space.java
Log Message:
Progress on implemention of geometry simplification when moving
Index: Space.java
===================================================================
RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Space.java,v
retrieving revision 1.139
retrieving revision 1.140
diff -C2 -d -r1.139 -r1.140
*** Space.java 7 May 2007 15:43:26 -0000 1.139
--- Space.java 11 May 2007 10:44:30 -0000 1.140
***************
*** 10,13 ****
--- 10,14 ----
import java.util.Collection;
import java.util.Collections;
+ import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
***************
*** 2742,2745 ****
--- 2743,2845 ----
return new Mesh(surfaces, edges, vertices);
}
+
+ /**
+ * Simplify this space
+ */
+ public void simplify() {
+ {
+ Comparator<Vertex> comparator = new Comparator<Vertex>() {
+ public int compare(Vertex v1, Vertex v2) {
+ if (v1.x < v2.x) {
+ return -1;
+ } else {
+ if (v1.x > v2.x) {
+ return 1;
+ } else {
+ if (v1.y < v2.y) {
+ return -1;
+ } else {
+ if (v1.y > v2.y) {
+ return 1;
+ } else {
+ if (v1.z < v2.z) {
+ return -1;
+ } else {
+ if (v1.z > v2.z) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+ List<Vertex> sorted = new LinkedList(getVertices());
+ Collections.sort(sorted, comparator);
+
+ Collection<Collection<Vertex>> equivalences = new LinkedList();
+ {
+ Vertex leader = null;
+ Collection<Vertex> equivalence = null;
+ for (Vertex current : sorted) {
+ if (leader == null) {
+ leader = current;
+ } else {
+ if (leader.equalEps(current)) {
+ if (equivalence == null) {
+ equivalence = new LinkedList();
+ equivalence.add(leader);
+ equivalences.add(equivalence);
+ }
+ equivalence.add(current);
+ } else {
+ leader = current;
+ equivalence = null;
+ }
+ }
+ }
+ }
+ if (!equivalences.isEmpty()) {
+ System.out.println("-- equivalances --");
+ for (Collection current : equivalences) {
+ System.out.println(current);
+ }
+ }
+ Map<Vertex, List<Edge>> edgemap = new HashMap();
+ for (Vertex current : getVertices()) {
+ edgemap.put(current, new LinkedList());
+ }
+ for (Edge current : getEdges()) {
+ edgemap.get(current.from).add(current);
+ edgemap.get(current.to).add(current);
+ }
+ Collection<Vertex> deletion = new LinkedList();
+ for (Collection<Vertex> equivalence : equivalences) {
+ Vertex leader = null;
+ for (Vertex current : equivalence) {
+ if (leader == null) {
+ leader = current;
+ } else {
+ deletion.add(current);
+ List<Edge> edges = edgemap.get(current);
+ for (Edge edge : edges) {
+ if (edge.from == current) {
+ edge.setFrom(leader);
+ }
+ if (edge.to == current) {
+ edge.setTo(leader);
+ }
+ }
+ }
+ }
+ }
+ for (Vertex current : deletion) {
+ remove(current);
+ }
+ }
+ }
/**
|