[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool SelectStrategy.java, 1.26, 1.27
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2008-01-16 15:05:37
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv14169/src/net/sourceforge/bprocessor/gl/tool Modified Files: SelectStrategy.java Log Message: Select mechanism changed Index: SelectStrategy.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SelectStrategy.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** SelectStrategy.java 16 Jan 2008 14:21:32 -0000 1.26 --- SelectStrategy.java 16 Jan 2008 15:05:41 -0000 1.27 *************** *** 124,127 **** --- 124,179 ---- } + private Set<Geometric> extend(Command.Inverse inv, Set<Geometric> geometrics) { + Set<Vertex> vertices = new HashSet(); + Set<Edge> edges = new HashSet(); + Set<Surface> surfaces = new HashSet(); + + for (Geometric current : geometrics) { + if (current instanceof Vertex) { + vertices.add((Vertex) current); + } else if (current instanceof Edge) { + edges.add((Edge) current); + } else if (current instanceof Surface) { + surfaces.add((Surface) current); + } + } + + for (Vertex current : vertices) { + edges.addAll(inv.edges(current)); + } + + for (Edge current : edges) { + surfaces.addAll(inv.surfaces(current)); + } + + 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); + } + } + } + + edges.addAll(Surface.edges(surfaces)); + vertices.addAll(Edge.vertices(edges)); + + Set<Geometric> result = new HashSet(); + result.addAll(spaces); + result.addAll(surfaces); + result.addAll(edges); + result.addAll(vertices); + return result; + } private Set<Geometric> reduce(Command.Inverse inv, Set<Vertex> vertices) { *************** *** 204,213 **** { ! Set<Vertex> vertices = new HashSet(); ! Set<Edge> edges = new HashSet(); Container owner = Project.getInstance().getActiveSpace(); if (newX > x) { for (Object current : geometrics) { if (current instanceof Vertex) { --- 256,267 ---- { ! Container owner = Project.getInstance().getActiveSpace(); + Command.Inverse inv = new Command.Inverse(new LinkedList(owner.getSurfaces())); + Collection<Geometric> objects; if (newX > x) { + Set<Vertex> vertices = new HashSet(); for (Object current : geometrics) { if (current instanceof Vertex) { *************** *** 218,236 **** } } } else { for (Object current : geometrics) { ! if (current instanceof Edge) { ! Edge edge = (Edge) current; ! if (edge.getOwner() == owner) { ! edges.add(edge); } } } } - Command.Inverse inv = new Command.Inverse(new LinkedList(owner.getSurfaces())); - - Collection<Geometric> objects = reduce(inv, vertices); - if (!e.isShiftDown()) { Selection.primary().set(objects); --- 272,289 ---- } } + objects = reduce(inv, vertices); } else { + Set<Geometric> input = new HashSet(); for (Object current : geometrics) { ! if (current instanceof Geometric) { ! Geometric geometric = (Geometric) current; ! if (geometric.getOwner() == owner) { ! input.add(geometric); } } } + objects = extend(inv, input); } if (!e.isShiftDown()) { Selection.primary().set(objects); |