[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool SelectStrategy.java, 1.25, 1.26
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2008-01-16 14:21:28
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv28414/src/net/sourceforge/bprocessor/gl/tool Modified Files: SelectStrategy.java Log Message: selection mechanics updated Index: SelectStrategy.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SelectStrategy.java,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** SelectStrategy.java 15 Jan 2008 15:43:36 -0000 1.25 --- SelectStrategy.java 16 Jan 2008 14:21:32 -0000 1.26 *************** *** 29,32 **** --- 29,33 ---- import net.sourceforge.bprocessor.model.Selection; import net.sourceforge.bprocessor.model.Container; + import net.sourceforge.bprocessor.model.Space; import net.sourceforge.bprocessor.model.Surface; import net.sourceforge.bprocessor.model.Vertex; *************** *** 123,126 **** --- 124,179 ---- } + + private Set<Geometric> reduce(Command.Inverse inv, Set<Vertex> vertices) { + Set<Edge> edges = new HashSet(); + for (Vertex vertex : vertices) { + List<Edge> incident = inv.edges(vertex); + for (Edge edge : incident) { + if (vertices.contains(edge.otherVertex(vertex))) { + edges.add(edge); + } + } + } + + Set<Surface> surfaces = new HashSet(); + for (Edge edge : edges) { + List<Surface> incident = inv.surfaces(edge); + for (Surface surface : incident) { + if (edges.containsAll(surface.getEdges())) { + surfaces.add(surface); + } + } + } + + Set<Space> spaces = new HashSet(); + for (Surface surface : surfaces) { + List<Space> incident = new LinkedList(); + Space front = surface.getFrontDomain(); + Space back = surface.getBackDomain(); + if (!front.isVoid()) { + incident.add(front); + } + if (!(back.isVoid() || (front == back))) { + incident.add(back); + } + + for (Space space : incident) { + if (surfaces.containsAll(space.getEnvelope())) { + spaces.add(space); + } + } + } + + if (spaces.size() > 0) { + return new HashSet(spaces); + } else if (surfaces.size() > 0) { + return new HashSet(surfaces); + } else if (edges.size() > 0) { + return new HashSet(edges); + } else { + return new HashSet(vertices); + } + } + /** * Invoked when the mouse cursor has been dragged *************** *** 153,157 **** Set<Vertex> vertices = new HashSet(); Set<Edge> edges = new HashSet(); ! Set<Surface> surfaces = new HashSet(); Container owner = Project.getInstance().getActiveSpace(); --- 206,210 ---- Set<Vertex> vertices = new HashSet(); Set<Edge> edges = new HashSet(); ! Container owner = Project.getInstance().getActiveSpace(); *************** *** 178,206 **** Command.Inverse inv = new Command.Inverse(new LinkedList(owner.getSurfaces())); ! for (Vertex current : vertices) { ! List<Edge> adjacent = inv.edges(current); ! for (Edge edge : adjacent) { ! if (vertices.contains(edge.otherVertex(current))) { ! edges.add(edge); ! } ! } ! } ! ! for (Edge current : edges) { ! List<Surface> adjacent = inv.surfaces(current); ! for (Surface surface : adjacent) { ! if (edges.containsAll(surface.getEdges())) { ! surfaces.add(surface); ! } ! } ! } ! ! edges.addAll(Surface.edges(surfaces)); ! vertices.addAll(Edge.vertices(edges)); ! ! Collection<Geometric> objects = new LinkedList(); ! objects.addAll(surfaces); ! objects.addAll(edges); ! objects.addAll(vertices); if (!e.isShiftDown()) { --- 231,235 ---- Command.Inverse inv = new Command.Inverse(new LinkedList(owner.getSurfaces())); ! Collection<Geometric> objects = reduce(inv, vertices); if (!e.isShiftDown()) { *************** *** 217,238 **** } - surfaces.clear(); - edges.clear(); - vertices.clear(); - for (Geometric current : tentative) { - if (current instanceof Surface) { - surfaces.add((Surface) current); - } else if (current instanceof Edge) { - edges.add((Edge) current); - } else if (current instanceof Vertex) { - vertices.add((Vertex) current); - } - } - edges.addAll(Surface.edges(surfaces)); - vertices.addAll(Edge.vertices(edges)); - tentative.clear(); - tentative.addAll(surfaces); - tentative.addAll(edges); - tentative.addAll(vertices); Selection.primary().set(tentative); } --- 246,249 ---- |