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