Revision 575 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingProviderServices.java
DefaultEditingProviderServices.java | ||
---|---|---|
306 | 306 |
public Arc createArc(Point start, Point middle, Point end, int subtype) |
307 | 307 |
throws BaseException { |
308 | 308 |
|
309 |
Point center = getCenter(start, middle, end, subtype); |
|
310 |
double radius = center.distance(start); |
|
311 |
double startAngle = getAngle(center, start); |
|
312 |
double endAngle = getAngle(center, end); |
|
313 |
double middleAngle = getAngle(center, middle); |
|
314 |
double extAngle = 0; |
|
309 |
Arc arc = (Arc)GeometryLocator.getGeometryManager().create(Geometry.TYPES.ARC, subtype); |
|
310 |
arc.setPoints(start, middle, end); |
|
311 |
return arc; |
|
315 | 312 |
|
316 |
if (startAngle < endAngle) { |
|
317 |
if ((startAngle < middleAngle) && (middleAngle < endAngle)) { |
|
318 |
extAngle = angleDistance(endAngle, startAngle); |
|
319 |
return createArc(center, radius, startAngle, extAngle, subtype); |
|
320 |
} else { |
|
321 |
extAngle = angleDistance(startAngle, endAngle); |
|
322 |
return createArc(center, radius, endAngle, extAngle, subtype); |
|
323 |
} |
|
324 |
} else { |
|
325 |
if ((startAngle > middleAngle) && (middleAngle > endAngle)) { |
|
326 |
extAngle = angleDistance(startAngle, endAngle); |
|
327 |
return createArc(center, radius, endAngle, extAngle, subtype); |
|
328 |
} else { |
|
329 |
extAngle = angleDistance(endAngle, startAngle); |
|
330 |
return createArc(center, radius, startAngle, extAngle, subtype); |
|
331 |
} |
|
332 |
} |
|
333 | 313 |
} |
334 | 314 |
|
335 | 315 |
public Point createPoint(double x, double y, int subtype) |
... | ... | |
543 | 523 |
} |
544 | 524 |
|
545 | 525 |
public double angleDistance(double angle1, double angle2) { |
546 |
if (angle1 < angle2) { |
|
547 |
return angle2 - angle1; |
|
548 |
} else { |
|
549 |
return ((Math.PI * 2) - angle1) + angle2; |
|
526 |
double result = angle2-angle1; |
|
527 |
if(result<0){ |
|
528 |
result = (Math.PI *2)+result; |
|
550 | 529 |
} |
530 |
return result; |
|
551 | 531 |
} |
552 | 532 |
|
553 | 533 |
public Line createLine(Point p1, Point p2, int subtype) |
Also available in: Unified diff