38 |
38 |
import org.gvsig.fmap.dal.feature.FeatureStore;
|
39 |
39 |
import org.gvsig.fmap.geom.Geometry;
|
40 |
40 |
import org.gvsig.fmap.geom.GeometryLocator;
|
|
41 |
import org.gvsig.fmap.geom.aggregate.Aggregate;
|
|
42 |
import org.gvsig.fmap.geom.aggregate.MultiCurve;
|
|
43 |
import org.gvsig.fmap.geom.aggregate.MultiPoint;
|
|
44 |
import org.gvsig.fmap.geom.aggregate.MultiSurface;
|
41 |
45 |
import org.gvsig.fmap.geom.operation.GeometryOperationException;
|
42 |
46 |
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
|
|
47 |
import org.gvsig.fmap.geom.primitive.Curve;
|
43 |
48 |
import org.gvsig.fmap.geom.primitive.Line;
|
44 |
49 |
import org.gvsig.fmap.geom.primitive.Point;
|
|
50 |
import org.gvsig.fmap.geom.primitive.Surface;
|
|
51 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
|
45 |
52 |
import org.gvsig.tools.ToolsLocator;
|
46 |
53 |
import org.gvsig.tools.dispose.DisposableIterator;
|
47 |
54 |
import org.gvsig.tools.dynobject.DynObject;
|
... | ... | |
59 |
66 |
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
|
60 |
67 |
import org.gvsig.vectorediting.lib.spi.EditingProvider;
|
61 |
68 |
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
|
|
69 |
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
|
|
70 |
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
|
62 |
71 |
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
|
63 |
72 |
|
64 |
73 |
public class SymmetryEditingProvider extends AbstractEditingProvider implements
|
... | ... | |
123 |
132 |
|
124 |
133 |
public DrawingStatus getDrawingStatus(Point mousePosition)
|
125 |
134 |
throws DrawServiceException {
|
126 |
|
DefaultDrawingStatus geometries = new DefaultDrawingStatus();
|
|
135 |
DefaultDrawingStatus drawingStatus = new DefaultDrawingStatus();
|
|
136 |
EditingProviderManager editingProviderManager =
|
|
137 |
EditingProviderLocator.getProviderManager();
|
|
138 |
ISymbol auxiliaryLineSymbolEditing = editingProviderManager.getSymbol("auxiliary-line-symbol-editing");
|
|
139 |
ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing");
|
|
140 |
ISymbol lineSymbolEditing = editingProviderManager.getSymbol("line-symbol-editing");
|
|
141 |
ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing");
|
127 |
142 |
|
|
143 |
|
128 |
144 |
FeatureSelection selected =
|
129 |
145 |
(FeatureSelection) values.get(selectionParameter);
|
130 |
146 |
try {
|
... | ... | |
147 |
163 |
line.addVertex(p1);
|
148 |
164 |
line.addVertex(p2);
|
149 |
165 |
|
150 |
|
geometries.addGeometry(line);
|
|
166 |
drawingStatus.addStatus(line, auxiliaryLineSymbolEditing, "");
|
151 |
167 |
|
152 |
168 |
DisposableIterator it;
|
153 |
169 |
it = selected.fastIterator();
|
... | ... | |
161 |
177 |
|
162 |
178 |
while (it.hasNext()) {
|
163 |
179 |
Feature feat = (Feature) it.next();
|
164 |
|
Geometry geom =
|
165 |
|
feat.getDefaultGeometry().cloneGeometry();
|
166 |
|
geom.transform(at);
|
167 |
|
geometries.addGeometry(geom);
|
|
180 |
Geometry transformedGeometry = feat.getDefaultGeometry().cloneGeometry();
|
|
181 |
transformedGeometry.transform(at);
|
|
182 |
|
|
183 |
ISymbol symbol=null;
|
|
184 |
if(transformedGeometry instanceof Curve || transformedGeometry instanceof MultiCurve){
|
|
185 |
symbol = lineSymbolEditing;
|
|
186 |
} else if(transformedGeometry instanceof Surface || transformedGeometry instanceof MultiSurface){
|
|
187 |
symbol = polygonSymbolEditing;
|
|
188 |
} else if(transformedGeometry instanceof Point || transformedGeometry instanceof MultiPoint){
|
|
189 |
symbol = auxiliaryPointSymbolEditing;
|
|
190 |
}
|
|
191 |
if(transformedGeometry instanceof Aggregate){
|
|
192 |
int primitivesNumber = ((Aggregate)transformedGeometry).getPrimitivesNumber();
|
|
193 |
for (int i = 0; i < primitivesNumber; i++) {
|
|
194 |
drawingStatus.addStatus(((Aggregate)transformedGeometry).getPrimitiveAt(i), symbol, "");
|
|
195 |
}
|
|
196 |
} else {
|
|
197 |
drawingStatus.addStatus(transformedGeometry, symbol, "");
|
|
198 |
}
|
168 |
199 |
}
|
169 |
200 |
it.dispose();
|
170 |
201 |
}
|
171 |
|
return geometries;
|
|
202 |
return drawingStatus;
|
172 |
203 |
}
|
173 |
204 |
} catch (Exception e) {
|
174 |
205 |
throw new DrawServiceException(e);
|
175 |
206 |
}
|
176 |
|
|
177 |
207 |
return null;
|
178 |
|
|
179 |
208 |
}
|
180 |
209 |
|
181 |
210 |
private AffineTransform getSymmetryAffineTransform(Point axisP1,
|