Revision 2616 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.split/src/main/java/org/gvsig/vectorediting/lib/prov/split/operation/ArcSplitOperation.java
ArcSplitOperation.java | ||
---|---|---|
26 | 26 |
|
27 | 27 |
import java.util.ArrayList; |
28 | 28 |
import java.util.Collections; |
29 |
import java.util.Comparator; |
|
30 | 29 |
import java.util.List; |
31 |
|
|
32 |
import org.slf4j.Logger; |
|
33 |
import org.slf4j.LoggerFactory; |
|
34 |
|
|
35 | 30 |
import org.gvsig.fmap.geom.Geometry; |
36 | 31 |
import org.gvsig.fmap.geom.GeometryLocator; |
37 | 32 |
import org.gvsig.fmap.geom.GeometryManager; |
... | ... | |
43 | 38 |
import org.gvsig.fmap.geom.primitive.Arc; |
44 | 39 |
import org.gvsig.fmap.geom.primitive.Point; |
45 | 40 |
import org.gvsig.tools.exception.BaseException; |
41 |
import org.slf4j.Logger; |
|
42 |
import org.slf4j.LoggerFactory; |
|
46 | 43 |
|
47 | 44 |
/** |
48 | 45 |
* @author llmarques |
... | ... | |
50 | 47 |
*/ |
51 | 48 |
public class ArcSplitOperation implements SplitOperation { |
52 | 49 |
|
53 |
private static Logger logger = LoggerFactory
|
|
50 |
private static final Logger LOGGER = LoggerFactory
|
|
54 | 51 |
.getLogger(ArcSplitOperation.class); |
55 | 52 |
|
56 | 53 |
/* |
... | ... | |
62 | 59 |
* 4. Iterate over ordered intersection points and create splitted arcs. |
63 | 60 |
* Stop iteration when all intersections points have been iterated. |
64 | 61 |
*/ |
62 |
@Override |
|
65 | 63 |
public Geometry split(Geometry geometryToBeSplitted, Geometry splitter) |
66 | 64 |
throws GeometryOperationNotSupportedException, |
67 | 65 |
GeometryOperationException, CreateGeometryException { |
... | ... | |
105 | 103 |
double radius = center.distance(arcToBeSplitted.getEndPoint()); |
106 | 104 |
|
107 | 105 |
// Order intersection points by angle to create arcs correctly |
108 |
List<Point> orderedIntersectionPoints = new ArrayList<Point>();
|
|
106 |
List<Point> orderedIntersectionPoints = new ArrayList<>(); |
|
109 | 107 |
for (int i = 0; i < multiIntersection.getPrimitivesNumber(); i++) { |
110 | 108 |
orderedIntersectionPoints.add(multiIntersection.getPointAt(i)); |
111 | 109 |
} |
112 | 110 |
|
113 | 111 |
// Sort by angle |
114 |
Collections.sort(orderedIntersectionPoints, |
|
115 |
new Comparator<Point>() { |
|
116 |
|
|
117 |
public int compare(Point p1, Point p2) { |
|
118 |
double angle1 = 0; |
|
119 |
double angle2 = 0; |
|
120 |
try { |
|
121 |
angle1 = SplitOperationUtils.getAngle(center, p1); |
|
122 |
angle2 = SplitOperationUtils.getAngle(center, p2); |
|
123 |
} catch (BaseException e) { |
|
124 |
logger |
|
125 |
.warn("Problems getting angle between center and" |
|
112 |
Collections.sort(orderedIntersectionPoints, (Point p1, Point p2) -> { |
|
113 |
double angle1; |
|
114 |
double angle2; |
|
115 |
try { |
|
116 |
angle1 = SplitOperationUtils.getAngle(center, p1); |
|
117 |
angle2 = SplitOperationUtils.getAngle(center, p2); |
|
118 |
} catch (BaseException e) { |
|
119 |
LOGGER |
|
120 |
.warn("Problems getting angle between center and" |
|
126 | 121 |
+ " one intersection point"); |
127 |
return 0; |
|
128 |
} |
|
129 |
return Double.compare(angle1, angle2); |
|
130 |
} |
|
131 |
}); |
|
122 |
return 0; |
|
123 |
} |
|
124 |
return Double.compare(angle1, angle2); |
|
125 |
}); |
|
132 | 126 |
|
133 | 127 |
MultiCurve splittedArcs = geoManager.createMultiCurve(subtype); |
134 | 128 |
|
... | ... | |
166 | 160 |
Point endPoint = arc.getEndPoint(); |
167 | 161 |
Point centerPoint = arc.getCenterPoint(); |
168 | 162 |
|
169 |
if(initPoint.equals(endPoint) || centerPoint == null){ |
|
170 |
return true; |
|
171 |
} |
|
172 |
return false; |
|
163 |
return initPoint.equals(endPoint) || centerPoint == null; |
|
173 | 164 |
} |
174 | 165 |
} |
Also available in: Unified diff