[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Surface.java, 1.159, 1.160 Space.jav
Status: Pre-Alpha
Brought to you by:
henryml
|
From: Michael L. <he...@us...> - 2007-05-15 12:26:41
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv4020/src/net/sourceforge/bprocessor/model Modified Files: Surface.java Space.java Log Message: Space.simplify() evolved Index: Surface.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Surface.java,v retrieving revision 1.159 retrieving revision 1.160 diff -C2 -d -r1.159 -r1.160 *** Surface.java 8 May 2007 12:35:38 -0000 1.159 --- Surface.java 15 May 2007 12:26:35 -0000 1.160 *************** *** 236,239 **** --- 236,251 ---- /** + * Returns true if this surface is legal. + * A legal surface has at least 3 edges and a non-empty area. + * @return True if this surface is legal + */ + public boolean legal() { + if (edges.size() < 3) { + return false; + } + return true; + } + + /** * Return an ordered list of vertices around this Surface. * @return An ordered list of vertices around this Surface *************** *** 362,369 **** * @param newEdge the new edge. */ ! public void replaceSingle(Edge replaceEdge, Edge newEdge) { ! List<Edge> wrap = new LinkedList<Edge>(); ! wrap.add(replaceEdge); ! replace(wrap, newEdge); } --- 374,391 ---- * @param newEdge the new edge. */ ! public void replace(Edge replaceEdge, Edge newEdge) { ! // List<Edge> wrap = new LinkedList<Edge>(); ! // wrap.add(replaceEdge); ! // replace(wrap, newEdge); ! ! List<Edge> newEdges = new LinkedList(); ! for (Edge current : edges) { ! if (current == replaceEdge) { ! newEdges.add(newEdge); ! } else { ! newEdges.add(current); ! } ! } ! setEdges(newEdges); } *************** *** 385,446 **** /** - * Replace one edge e1 and its vertices with e2's - * @param e1 The edge to replace - * @param e2 The replacing edge - */ - public void replace(Edge e1, Edge e2) { - //FIXME not tested enough to be trusted 100% - List lst = new ArrayList(); - Edge[] edges = new Edge[getEdges().size()]; - getEdges().toArray(edges); - for (int i = 0; i < edges.length; i++) { - if (edges[i] == e1) { - log.info("Found the edge " + edges[i]); - Edge prev; - Edge next; - if (i == 0) { - if (edges[edges.length - 1].contains(e1.getFrom())) { - prev = edges[edges.length - 1]; - next = edges[i + 1]; - } else { - next = edges[edges.length - 1]; - prev = edges[i + 1]; - } - } else { - if (edges[(i + 1) % edges.length].contains(e1.getTo())) { - next = edges[(i + 1) % edges.length]; - prev = edges[i - 1]; - } else { - next = edges[i - 1]; - prev = edges[(i + 1) % edges.length]; - } - } - if (prev.getFrom() == e1.getFrom()) { - prev.setFrom(e2.getTo()); - } else if (prev.getTo() == e1.getFrom()) { - prev.setTo(e2.getTo()); - } else { - log.info("AHHH1 prev:" + prev + ", e1:" + e1 + ", e2:" + e2); - } - if (next.getTo() == e1.getTo()) { - next.setTo(e2.getFrom()); - } else if (next.getFrom() == e1.getTo()) { - next.setFrom(e2.getFrom()); - } else { - log.info("AHHH2 next:" + next + ", e1:" + e1 + ", e2:" + e2); - } - log.info("Next were " + next); - log.info("Prev were " + prev); - log.info("Replaced with " + e2); - lst.add(e2); - } else { - log.info("Just reinserted edge " + edges[i]); - lst.add(edges[i]); - } - } - setEdges(lst); - } - - /** * Replace the edge with the edges * @param edge The original edge --- 407,410 ---- Index: Space.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Space.java,v retrieving revision 1.142 retrieving revision 1.143 diff -C2 -d -r1.142 -r1.143 *** Space.java 15 May 2007 11:34:18 -0000 1.142 --- Space.java 15 May 2007 12:26:35 -0000 1.143 *************** *** 2743,2746 **** --- 2743,2750 ---- } + private static boolean eq(double a, double b) { + return Math.abs(a - b) < 0.00001; + } + /** * Simplify this space *************** *** 2750,2777 **** 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; ! } ! } ! } } } } } --- 2754,2781 ---- Comparator<Vertex> comparator = new Comparator<Vertex>() { public int compare(Vertex v1, Vertex v2) { ! if (eq(v1.x, v2.x)) { ! if (eq(v1.y, v2.y)) { ! if (eq(v1.z, v2.z)) { ! return 0; ! } else { ! if (v1.z < v2.z) { ! return -1; ! } else { ! return 1; ! } ! } } else { if (v1.y < v2.y) { return -1; } else { ! return 1; } } + } else { + if (v1.x < v2.x) { + return -1; + } else { + return 1; + } } } *************** *** 2779,2783 **** List<Vertex> sorted = new LinkedList(getVertices()); Collections.sort(sorted, comparator); - Collection<Collection<Vertex>> equivalences = new LinkedList(); { --- 2783,2786 ---- *************** *** 2802,2811 **** } } - 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()) { --- 2805,2808 ---- *************** *** 2851,2854 **** --- 2848,2852 ---- } Collection<Edge> deletion = new LinkedList(); + Set<Surface> empties = new HashSet(); for (Edge current : getEdges()) { if (current.from == current.to) { *************** *** 2860,2869 **** for (Surface surface : adjacent) { surface.getEdges().remove(current); } remove(current); } } ! { ! Map<Vertex, List<Edge>> edgemap = new HashMap(); for (Vertex current : getVertices()) { --- 2858,2872 ---- for (Surface surface : adjacent) { surface.getEdges().remove(current); + if (!surface.legal()) { + empties.add(surface); + } } remove(current); } + for (Surface current : empties) { + remove(current); + } } ! { Map<Vertex, List<Edge>> edgemap = new HashMap(); for (Vertex current : getVertices()) { *************** *** 2874,2880 **** edgemap.get(current.to).add(current); } ! Collection<Collection<Edge>> equivalence = new LinkedList(); ! for (Vertex vertex : getVertices()) { ! List<Edge> flst = edgemap.get(vertex); } } --- 2877,2926 ---- edgemap.get(current.to).add(current); } ! ! Map<Edge, Collection<Surface>> surfacemap = new HashMap(); ! for (Edge edge : getEdges()) { ! surfacemap.put(edge, new LinkedList()); ! } ! for (Surface surface : getSurfaces()) { ! for (Edge current : surface.getEdges()) { ! surfacemap.get(current).add(surface); ! } ! } ! ! ! Set<Edge> mark = new HashSet(); ! Collection<Collection<Edge>> equivalences = new LinkedList(); ! ! for (Edge leader : getEdges()) { ! if (!mark.contains(leader)) { ! List<Edge> equivalence = null; ! mark.add(leader); ! List<Edge> flst = edgemap.get(leader.from); ! for (Edge current : flst) { ! if (leader != current) { ! if (leader.equivalent(current)) { ! mark.add(current); ! if (equivalence == null) { ! equivalence = new LinkedList(); ! equivalence.add(leader); ! equivalences.add(equivalence); ! } ! equivalence.add(current); ! } ! } ! } ! } ! } ! for (Collection<Edge> equivalence : equivalences) { ! Edge leader = equivalence.iterator().next(); ! for (Edge current : equivalence) { ! if (leader != current) { ! Collection<Surface> surfaces = surfacemap.get(current); ! for (Surface surface : surfaces) { ! surface.replace(current, leader); ! } ! remove(current); ! } ! } } } |