Revision 41763 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.generalpath/src/main/java/org/gvsig/fmap/geom/generalpath/primitive/curve/arc/Arc2D.java
Arc2D.java | ||
---|---|---|
525 | 525 |
*/ |
526 | 526 |
public void setPointsStartExt(Point center, double radius, |
527 | 527 |
double startAngle, double angleExt) { |
528 |
|
|
529 | 528 |
setPoints(center, radius, startAngle, angleExt); |
530 | 529 |
} |
531 | 530 |
|
... | ... | |
602 | 601 |
*/ |
603 | 602 |
private void setPoints(Point2D center, double radius, double initAngle, |
604 | 603 |
double angleExt) { |
605 |
java.awt.geom.Arc2D arco = UtilFunctions.createArc(center, radius, initAngle, angleExt); |
|
604 |
|
|
605 |
double x; |
|
606 |
double y; |
|
607 |
double w; |
|
608 |
double h; |
|
609 |
double start; |
|
610 |
double extent; |
|
611 |
double angleOffset; |
|
612 |
final double pi2 = Math.PI*2; |
|
613 |
|
|
614 |
angleOffset = 0; |
|
615 |
if( angleExt<0 ) { |
|
616 |
angleOffset = pi2 + angleExt; |
|
617 |
angleExt = Math.abs(angleExt); |
|
618 |
} |
|
619 |
x = center.getX() - radius; |
|
620 |
y = center.getY() - radius; |
|
621 |
w = radius * 2; |
|
622 |
h = w; // Son siempre arcos de circunferencia |
|
623 |
|
|
624 |
if( angleExt > 0 && (angleExt % pi2) == 0 ) { |
|
625 |
start = 0; |
|
626 |
extent = 360; |
|
627 |
} else { |
|
628 |
angleExt = angleExt % pi2; //Asumimos que aqui angleExt es siempre positivo |
|
629 |
initAngle = Math.abs(initAngle) % pi2; |
|
630 |
start = Math.toDegrees( pi2 - initAngle + angleOffset) ; |
|
631 |
extent = - Math.toDegrees(pi2 - angleExt); |
|
632 |
} |
|
633 |
java.awt.geom.Arc2D.Double arco = new java.awt.geom.Arc2D.Double( |
|
634 |
x,y,w,h,start,extent,java.awt.geom.Arc2D.OPEN); |
|
635 |
|
|
636 |
this.gp = new GeneralPathX( arco.getPathIterator(null,geomManager.getFlatness())); |
|
606 | 637 |
|
607 |
java.awt.geom.Arc2D semiarco = UtilFunctions.createArc(center, radius, initAngle, angleExt/2); |
|
608 |
if (arco == null || semiarco == null) { |
|
609 |
logger.info("Did not set arc points (probably aligned points)"); |
|
610 |
return; |
|
611 |
} |
|
638 |
this.init = arco.getStartPoint(); |
|
639 |
this.end = arco.getEndPoint(); |
|
612 | 640 |
|
613 |
Point2D p1 = arco.getStartPoint(); |
|
614 |
Point2D p2 = semiarco.getEndPoint(); |
|
615 |
Point2D p3 = arco.getEndPoint(); |
|
616 |
|
|
617 |
setPoints(p1, p2, p3); |
|
641 |
java.awt.geom.Arc2D.Double semiarco = new java.awt.geom.Arc2D.Double( |
|
642 |
x,y,w,h,start,extent/2,java.awt.geom.Arc2D.OPEN); |
|
643 |
this.middle = semiarco.getEndPoint(); |
|
618 | 644 |
} |
619 | 645 |
|
620 | 646 |
|
Also available in: Unified diff