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)
|