[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Command.java, 1.64, 1.65 Container.j
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2008-01-22 13:12:54
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv8457/src/net/sourceforge/bprocessor/model Modified Files: Command.java Container.java Log Message: reduce Index: Command.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Command.java,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** Command.java 21 Jan 2008 15:12:16 -0000 1.64 --- Command.java 22 Jan 2008 13:12:58 -0000 1.65 *************** *** 284,287 **** --- 284,288 ---- */ public static class Inverse { + private Container owner; private Collection<Vertex> vertices; private Collection<Edge> edges; *************** *** 292,296 **** /** ! * Construcs an inverse mapping * * @param surfaces Collection of surfaces --- 293,297 ---- /** ! * Constructs an inverse mapping * * @param surfaces Collection of surfaces *************** *** 327,330 **** --- 328,344 ---- } + /** + * Constructs an inverse mapping for geometry in specified + * space. + * @param container Container + */ + public Inverse(Container container) { + owner = container; + Collection<Surface> surfaces = container.getSurfaces(); + Collection<Edge> edges = container.getEdges(); + Collection<Vertex> vertices = container.getVertices(); + initialize(surfaces, edges, vertices); + } + /** *************** *** 421,424 **** --- 435,518 ---- return v2s.get(vertex); } + + + /** + * Create new edge + * @param from Vertex + * @param to Vertex + * @return Edge + */ + public Edge edge(Vertex from, Vertex to) { + Edge edge = new Edge(from, to); + e2s.put(edge, new LinkedList()); + v2e.get(from).add(edge); + v2e.get(to).add(edge); + owner.add(edge); + return edge; + } + + /** + * Remove edge + * @param edge Edge + */ + public void remove(Edge edge) { + edges.remove(edge); + v2e.get(edge.from).remove(edge); + v2e.get(edge.to).remove(edge); + e2s.remove(edge); + owner.remove(edge); + } + + /** + * Remove vertex + * @param vertex Vertex + */ + public void remove(Vertex vertex) { + vertices.remove(vertex); + v2e.remove(vertex); + owner.remove(vertex); + } + + /** + * Remove unecessary geometry preserving the shape. + * + */ + public void reduce() { + Collection<Vertex> deletion = new LinkedList(); + for (Vertex current : vertices()) { + List<Edge> edges = edges(current); + if (edges.size() == 2) { + Iterator<Edge> iter = edges.iterator(); + Edge e1 = iter.next(); + Edge e2 = iter.next(); + Vertex p = e1.otherVertex(current); + Vertex q = e2.otherVertex(current); + Vertex u = p.minus(current); + Vertex v = q.minus(current); + Vertex cross = u.cross(v); + if (cross.isZero()) { + Edge edge = edge(p, q); + Collection<Surface> es = new LinkedList(surfaces(e1)); + + for (Surface surface : es) { + surface.replace(edges, edge); + e2s.get(edge).add(surface); + for (Edge e : edges) { + e2s.get(e).remove(surface); + } + } + + for (Edge e : new LinkedList<Edge>(edges)) { + remove(e); + } + deletion.add(current); + } + } + } + + for (Vertex current : deletion) { + remove(current); + } + } } Index: Container.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Container.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** Container.java 20 Dec 2007 15:36:55 -0000 1.11 --- Container.java 22 Jan 2008 13:12:58 -0000 1.12 *************** *** 1132,1135 **** --- 1132,1143 ---- /** + * Remove vertexes with two parallel edges + */ + public void reduce() { + Command.Inverse inv = new Command.Inverse(this); + inv.reduce(); + } + + /** * Simplify this space * 1) remove equivalent vertexes (vertex at same position) |