Revision 42441 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/AbstractArc.java
AbstractArc.java | ||
---|---|---|
439 | 439 |
return angle; |
440 | 440 |
} |
441 | 441 |
|
442 |
|
|
443 |
/* (non-Javadoc) |
|
444 |
* @see org.gvsig.fmap.geom.Geometry#offset(double) |
|
445 |
*/ |
|
446 |
public Geometry offset(double distance) throws GeometryOperationNotSupportedException, GeometryOperationException { |
|
447 |
// TODO Auto-generated method stub |
|
448 |
Point center = getCenterPoint(); |
|
449 |
double radius = center.distance(init); |
|
450 |
double scale = (radius+distance)/radius; |
|
451 |
AffineTransform at = getScaleAffineTransform(center, scale); |
|
452 |
Geometry cloned = this.cloneGeometry(); |
|
453 |
cloned.transform(at); |
|
454 |
return cloned; |
|
455 |
} |
|
456 |
|
|
457 |
protected AffineTransform getScaleAffineTransform(Point center, Double scale) |
|
458 |
throws GeometryOperationNotSupportedException, |
|
459 |
GeometryOperationException { |
|
460 |
|
|
461 |
AffineTransform translate = |
|
462 |
AffineTransform |
|
463 |
.getTranslateInstance(-center.getX(), -center.getY()); |
|
464 |
|
|
465 |
AffineTransform scaleTransform = AffineTransform.getScaleInstance(scale,scale); |
|
466 |
|
|
467 |
AffineTransform inverseTranslate = |
|
468 |
AffineTransform.getTranslateInstance(center.getX(), center.getY()); |
|
469 |
AffineTransform at = new AffineTransform(translate); |
|
470 |
|
|
471 |
at.preConcatenate(scaleTransform); |
|
472 |
at.preConcatenate(inverseTranslate); |
|
473 |
return at; |
|
474 |
} |
|
442 | 475 |
} |
Also available in: Unified diff