[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Space.java, 1.139, 1.140
Status: Pre-Alpha
Brought to you by:
henryml
|
From: Michael L. <he...@us...> - 2007-05-11 10:44:32
|
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); + } + } + } /** |