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