[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model SpaceAnalysis.java, 1.1, 1.2 Surface
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2007-09-26 14:30:32
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv17705/src/net/sourceforge/bprocessor/model Modified Files: SpaceAnalysis.java Surface.java Log Message: Progress on SpaceAnalysis Index: SpaceAnalysis.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/SpaceAnalysis.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SpaceAnalysis.java 25 Sep 2007 14:25:34 -0000 1.1 --- SpaceAnalysis.java 26 Sep 2007 14:30:22 -0000 1.2 *************** *** 18,28 **** public class SpaceAnalysis { /** * Progates space assignment in specified direction * 1 = front and -1 = back. * @param surface Surface whose space assigment is propagated ! * @param direction side of surface to start */ ! public void propagate(Surface surface, int direction) { Space space = surface.getOwner(); Map<Edge, List<Surface>> edgemap = new HashMap(); --- 18,47 ---- public class SpaceAnalysis { + + private static final int FORWARD = 1; + private static final int BACKWARD = 2; + + private static int travel(Surface surface, Edge edge) { + Vertex vertex = surface.getFirstVertex(); + for (Edge current : surface.getEdges()) { + vertex = current.otherVertex(vertex); + if (current == edge) { + if (vertex == edge.getTo()) { + return FORWARD; + } else { + return BACKWARD; + } + } + } + return 0; + } + /** * Progates space assignment in specified direction * 1 = front and -1 = back. * @param surface Surface whose space assigment is propagated ! * @param side side of surface to start */ ! public void propagate(Surface surface, int side) { Space space = surface.getOwner(); Map<Edge, List<Surface>> edgemap = new HashMap(); *************** *** 35,39 **** --- 54,116 ---- } } + for (Edge current : surface.getEdges()) { + List<Surface> surfaces = edgemap.get(current); + if (surfaces.size() > 1) { + System.out.println("select from " + surfaces + " around " + current); + Surface selected = select(current, surfaces, surface, side); + System.out.println("selected = " + selected); + if (travel(surface, current) == travel(selected, current)) { + System.out.println("SAME"); + if (side == 1) { + selected.setBackDomain(surface.getFrontDomain()); + } else { + selected.setFrontDomain(surface.getBackDomain()); + } + } else { + System.out.println("OTHER"); + if (side == 1) { + selected.setFrontDomain(surface.getFrontDomain()); + } else { + selected.setBackDomain(surface.getBackDomain()); + } + } + } + } + } + + private Surface select(Edge edge, List<Surface> surfaces, Surface leader, int side) { + Vertex n = edge.getDirection(); + Vertex i = leader.normal(); + int direction = travel(leader, edge); + Surface selected = leader; + double minimum = 2 * Math.PI; + if (side < 0) { + i.scale(-1); + n.scale(-1); + } + System.out.println("-- " + leader + " --"); + for (Surface current : surfaces) { + if (current != leader) { + Vertex normal = current.normal(); + if (travel(current, edge) != direction) { + normal.scale(-1); + } + double t = i.dot(normal); + double angle = Math.acos(t); + Vertex cross = i.cross(normal); + double dot = n.dot(cross); + if (dot < 0) { + angle = 2 * Math.PI - angle; + } + if (angle < minimum) { + selected = current; + minimum = angle; + } + } + } + return selected; } + + } Index: Surface.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Surface.java,v retrieving revision 1.178 retrieving revision 1.179 diff -C2 -d -r1.178 -r1.179 *** Surface.java 26 Sep 2007 08:36:29 -0000 1.178 --- Surface.java 26 Sep 2007 14:30:23 -0000 1.179 *************** *** 1305,1308 **** --- 1305,1310 ---- public void assignBack(Space back) { setBackDomain(back); + // SpaceAnalysis analysis = new SpaceAnalysis(); + // analysis.propagate(this, -1); } *************** *** 1328,1331 **** --- 1330,1335 ---- public void assignFront(Space front) { setFrontDomain(front); + // SpaceAnalysis analysis = new SpaceAnalysis(); + //analysis.propagate(this, 1); } |