Revision 943 trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/selectionByTheme/MySelectionByThemeListener.java
MySelectionByThemeListener.java | ||
---|---|---|
27 | 27 |
* @author Fernando Gonz?lez Cort?s |
28 | 28 |
*/ |
29 | 29 |
public class MySelectionByThemeListener implements SelectionByThemeListener { |
30 |
private FLayers layers; |
|
31 |
|
|
32 | 30 |
/** |
33 |
* Creates a new MySelectionByThemeListener object. |
|
34 |
* |
|
35 |
* @param layers DOCUMENT ME! |
|
36 |
*/ |
|
37 |
public MySelectionByThemeListener(FLayers layers) { |
|
38 |
this.layers = layers; |
|
39 |
} |
|
40 |
|
|
41 |
/** |
|
42 |
* DOCUMENT ME! |
|
43 |
* |
|
44 |
* @param toSelect DOCUMENT ME! |
|
45 |
* @param selectionLayer DOCUMENT ME! |
|
46 |
* @param action DOCUMENT ME! |
|
47 |
*/ |
|
48 |
private void doSelection(FLayer[] toSelect, FLayer selectionLayer, int action, boolean bFromSet) { |
|
49 |
SingleLayer capaBase = (SingleLayer) selectionLayer; |
|
50 |
Selectable selecBase = (Selectable) capaBase; |
|
51 |
BitSet bitSetBase = selecBase.getSelection(); |
|
52 |
VectorialAdapter adapterBase = capaBase.getSource(); |
|
53 |
|
|
54 |
for (int i = 0; i < toSelect.length; i++) { |
|
55 |
FLayer capa = toSelect[i]; |
|
56 |
if (capa instanceof Selectable) { |
|
57 |
Selectable seleccionada = (Selectable) capa; |
|
58 |
VectorialAdapter adapterSelec = ((SingleLayer) capa).getSource(); |
|
59 |
BitSet bitSet = seleccionada.getSelection(); |
|
60 |
int index = bitSetBase.nextSetBit(0); |
|
61 |
while (index != -1) { |
|
62 |
FGeometry s1; |
|
63 |
try { |
|
64 |
s1 = (FGeometry) adapterBase.getShape(index); |
|
65 |
Geometry g1 = s1.toJTSGeometry(); |
|
66 |
for (int j = 0; j < adapterSelec.getShapeCount(); j++) { |
|
67 |
|
|
68 |
if (bFromSet) |
|
69 |
{ |
|
70 |
if (bitSet.get(j)== false) |
|
71 |
continue; |
|
72 |
bitSet.set(j, false); // Por defecto limpiamos |
|
73 |
} |
|
74 |
|
|
75 |
|
|
76 |
FGeometry s2 = (FGeometry) adapterSelec.getShape(j); |
|
77 |
Geometry g2 = s2.toJTSGeometry(); |
|
78 |
IntersectionMatrix m = g2.relate(g1); |
|
79 |
|
|
80 |
switch (action) { |
|
81 |
case SelectionByTheme.CONTAINS: |
|
82 |
if (m.isContains()) { |
|
83 |
bitSet.set(j, true); |
|
84 |
} |
|
85 |
break; |
|
86 |
|
|
87 |
case SelectionByTheme.CROSSES: |
|
88 |
|
|
89 |
if (m.isCrosses(g1.getDimension(), g2.getDimension())) { |
|
90 |
bitSet.set(j, true); |
|
91 |
} |
|
92 |
|
|
93 |
break; |
|
94 |
|
|
95 |
case SelectionByTheme.DISJOINT: |
|
96 |
if (m.isDisjoint()) { |
|
97 |
bitSet.set(j, true); |
|
98 |
} |
|
99 |
break; |
|
100 |
|
|
101 |
case SelectionByTheme.EQUALS: |
|
102 |
if (m.isEquals(g1.getDimension(), g2.getDimension())) { |
|
103 |
bitSet.set(j, true); |
|
104 |
} |
|
105 |
|
|
106 |
break; |
|
107 |
|
|
108 |
case SelectionByTheme.INTERSECTS: |
|
109 |
|
|
110 |
if (m.isIntersects()) { |
|
111 |
bitSet.set(j, true); |
|
112 |
} |
|
113 |
|
|
114 |
break; |
|
115 |
|
|
116 |
case SelectionByTheme.OVERLAPS: |
|
117 |
|
|
118 |
if (m.isOverlaps(g1.getDimension(), |
|
119 |
g2.getDimension())) { |
|
120 |
bitSet.set(j, true); |
|
121 |
} |
|
122 |
|
|
123 |
break; |
|
124 |
|
|
125 |
case SelectionByTheme.TOUCHES: |
|
126 |
|
|
127 |
if (m.isTouches(g1.getDimension(), g2.getDimension())) { |
|
128 |
bitSet.set(j, true); |
|
129 |
} |
|
130 |
|
|
131 |
break; |
|
132 |
|
|
133 |
case SelectionByTheme.WITHIN: |
|
134 |
if (m.isWithin()) { |
|
135 |
bitSet.set(j, true); |
|
136 |
} |
|
137 |
|
|
138 |
break; |
|
139 |
} |
|
140 |
} // for |
|
141 |
} catch (DriverIOException e) { |
|
142 |
// TODO Auto-generated catch block |
|
143 |
e.printStackTrace(); |
|
144 |
} |
|
145 |
|
|
146 |
index = bitSetBase.nextSetBit(index + 1); |
|
147 |
} |
|
148 |
// seleccionada.setSelected(0, seleccionada.isSelected(0), false); |
|
149 |
} |
|
150 |
} |
|
151 |
} |
|
152 |
|
|
153 |
/** |
|
154 | 31 |
* @see com.iver.cit.gvsig.gui.selectionByTheme.SelectionByThemeListener#newSet(int, int, |
155 | 32 |
* int) |
156 | 33 |
*/ |
... | ... | |
176 | 53 |
* int, int) |
177 | 54 |
*/ |
178 | 55 |
public void addToSet(FLayer[] toSelect, FLayer selectionLayer, int action) { |
179 |
doSelection(toSelect, selectionLayer, action, false); |
|
56 |
for (int i = 0; i < toSelect.length; i++) { |
|
57 |
Selectable capa = (Selectable) toSelect[i]; |
|
58 |
QueryByThemeVisitor visitor = new QueryByThemeVisitor(toSelect[i], selectionLayer, action); |
|
59 |
FBitSet selection = capa.getSelection(); |
|
60 |
try { |
|
61 |
((VectorialData) selectionLayer).process(visitor, ((Selectable)selectionLayer).getSelection()); |
|
62 |
selection.or(visitor.getBitset()); |
|
63 |
((Selectable) toSelect[i]).setSelection(selection); |
|
64 |
} catch (DriverException e) { |
|
65 |
NotificationManager.addError("Error leyendo las capas", e); |
|
66 |
} catch (VisitException e) { |
|
67 |
NotificationManager.addError("Error leyendo las capas", e); |
|
68 |
} |
|
69 |
} |
|
180 | 70 |
} |
181 | 71 |
|
182 | 72 |
/** |
... | ... | |
184 | 74 |
* int) |
185 | 75 |
*/ |
186 | 76 |
public void fromSet(FLayer[] toSelect, FLayer selectionLayer, int action) { |
187 |
doSelection(toSelect, selectionLayer, action, true); |
|
77 |
for (int i = 0; i < toSelect.length; i++) { |
|
78 |
Selectable capa = (Selectable) toSelect[i]; |
|
79 |
QueryByThemeVisitor visitor = new QueryByThemeVisitor(toSelect[i], selectionLayer, action); |
|
80 |
FBitSet selection = capa.getSelection(); |
|
81 |
try { |
|
82 |
((VectorialData) selectionLayer).process(visitor, ((Selectable)selectionLayer).getSelection()); |
|
83 |
selection.and(visitor.getBitset()); |
|
84 |
((Selectable) toSelect[i]).setSelection(selection); |
|
85 |
} catch (DriverException e) { |
|
86 |
NotificationManager.addError("Error leyendo las capas", e); |
|
87 |
} catch (VisitException e) { |
|
88 |
NotificationManager.addError("Error leyendo las capas", e); |
|
89 |
} |
|
90 |
} |
|
188 | 91 |
} |
189 | 92 |
} |
Also available in: Unified diff