/** * Transforms the i'th coordinate in the input sequence * *@param seq a <code>CoordinateSequence</code> *@param i the index of the coordinate to transform */ public void filter(CoordinateSequence seq, int i) { transform(seq, i); }
public static Geometry translateToOrigin(Geometry g) { Coordinate lowerLeft = envelopeLowerLeft(g); AffineTransformation trans = AffineTransformation.translationInstance(-lowerLeft.x, -lowerLeft.y); return trans.transform(g); } }
public static Geometry scale(Geometry g, double scale) { Coordinate centre = envelopeCentre(g); AffineTransformation trans = AffineTransformation.scaleInstance(scale, scale, centre.x, centre.y); return trans.transform(g); }
public static Geometry reflectInY(Geometry g) { Coordinate centre = envelopeCentre(g); AffineTransformation trans = AffineTransformation.scaleInstance(-1, 1, centre.x, centre.y); return trans.transform(g); }
public static Geometry reflectInX(Geometry g) { Coordinate centre = envelopeCentre(g); AffineTransformation trans = AffineTransformation.scaleInstance(1, -1, centre.x, centre.y); return trans.transform(g); }
public static Geometry translateCentreToOrigin(Geometry g) { Coordinate centre = envelopeCentre(g); AffineTransformation trans = AffineTransformation.translationInstance(-centre.x, -centre.y); return trans.transform(g); } public static Geometry translateToOrigin(Geometry g)
public static Geometry transformToViewport(Geometry g, Geometry gViewport) { Envelope viewEnv = gViewport.getEnvelopeInternal(); Envelope env = g.getEnvelopeInternal(); AffineTransformation trans = viewportTrans(env, viewEnv); return trans.transform(g); }
@Metadata(description="Rotate a geometry by an angle in radians") public static Geometry rotate(Geometry g, @Metadata(title="Angle (radians)") double angle) { Coordinate centre = envelopeCentre(g); AffineTransformation trans = AffineTransformation.rotationInstance(angle, centre.x, centre.y); return trans.transform(g); }
@Metadata(description="Rotate a geometry by an multiple of Pi radians") public static Geometry rotateByPiMultiple(Geometry g, @Metadata(title="Angle (multiple of Pi)") double multipleOfPi) { Coordinate centre = envelopeCentre(g); AffineTransformation trans = AffineTransformation.rotationInstance(multipleOfPi * Math.PI, centre.x, centre.y); return trans.transform(g); }
@Metadata(description="Transforms a geometry using one to three control vectors") public static Geometry transformByVectors(Geometry g, Geometry control) { int nControl = control.getNumGeometries(); Coordinate src[] = new Coordinate[nControl]; Coordinate dest[] = new Coordinate[nControl]; for (int i = 0; i < nControl; i++) { Geometry contComp = control.getGeometryN(i); Coordinate[] pts = contComp.getCoordinates(); src[i] = pts[0]; dest[i] = pts[1]; } AffineTransformation trans = AffineTransformationFactory.createFromControlVectors(src, dest); System.out.println(trans); return trans.transform(g); }
private void runTransform(AffineTransformation trans, Coordinate p0, Coordinate p1, Coordinate p2) { Coordinate pp0 = trans.transform(p0, new Coordinate()); Coordinate pp1 = trans.transform(p1, new Coordinate()); Coordinate pp2 = trans.transform(p2, new Coordinate()); AffineTransformationBuilder atb = new AffineTransformationBuilder( p0, p1, p2, pp0, pp1, pp2); AffineTransformation atbTrans = atb.getTransformation(); Coordinate dest = new Coordinate(); assertEqualPoint(pp0, atbTrans.transform(p0, dest)); assertEqualPoint(pp1, atbTrans.transform(p1, dest)); assertEqualPoint(pp2, atbTrans.transform(p2, dest)); }
/** * Translates a geometry using X and Y offsets. * * @param geom Geometry * @param x X * @param y Y * @return Translated geometry */ public static Geometry translate(Geometry geom, double x, double y) { if (geom == null) { return null; } final CoordinateSequenceDimensionFilter filter = new CoordinateSequenceDimensionFilter(); geom.apply(filter); checkMixed(filter); return AffineTransformation.translationInstance(x, y).transform(geom); }
@Metadata(description="Rotate a geometry around a point by an multiple of Pi radians") public static Geometry rotateByPiMultipleAroundPoint(Geometry g, Geometry pt, @Metadata(title="Angle (multiple of Pi)") double multipleOfPi) { Coordinate loc; if (pt == null) { loc = new Coordinate(0,0); } else { loc = pt.getCoordinates()[0]; } AffineTransformation trans = AffineTransformation.rotationInstance(multipleOfPi * Math.PI, loc.x, loc.y); return trans.transform(g); }
@Metadata(description="Rotate a geometry around a point by an angle in radians") public static Geometry rotateAroundPoint(Geometry g, Geometry pt, @Metadata(title="Angle (radians)") double angle) { Coordinate loc; if (pt == null) { loc = new Coordinate(0,0); } else { loc = pt.getCoordinates()[0]; } AffineTransformation trans = AffineTransformation.rotationInstance(angle, loc.x, loc.y); return trans.transform(g); }
public static MultiPolygon crossedComb(Envelope env, int size, GeometryFactory geomFact) { Polygon comb1 = comb(env, size, geomFact); Coordinate centre = env.centre(); AffineTransformation trans = AffineTransformation.rotationInstance(0.5 * Math.PI, centre.x, centre.y); Polygon comb2 = (Polygon) trans.transform(comb1); MultiPolygon mp = geomFact.createMultiPolygon(new Polygon[] { comb1, comb2 } ); return mp; }
@Metadata(description="Transforms a geometry by mapping envelope baseline to target vector") public static Geometry transformByBaseline(Geometry g, Geometry destBaseline) { Envelope env = g.getEnvelopeInternal(); Coordinate src0 = new Coordinate(env.getMinX(), env.getMinY()); Coordinate src1 = new Coordinate(env.getMaxX(), env.getMinY()); Coordinate[] destPts = destBaseline.getCoordinates(); Coordinate dest0 = destPts[0]; Coordinate dest1 = destPts[1]; AffineTransformation trans = AffineTransformationFactory.createFromBaseLines(src0, src1, dest0, dest1); return trans.transform(g); }
void run(double p0x, double p0y, double pp0x, double pp0y ) { Coordinate p0 = new Coordinate(p0x, p0y); Coordinate pp0 = new Coordinate(pp0x, pp0y); AffineTransformation trans = AffineTransformationFactory.createFromControlVectors( p0, pp0); Coordinate dest = new Coordinate(); assertEqualPoint(pp0, trans.transform(p0, dest)); }
void run(double p0x, double p0y, double p1x, double p1y, double pp0x, double pp0y, double pp1x, double pp1y ) { Coordinate p0 = new Coordinate(p0x, p0y); Coordinate p1 = new Coordinate(p1x, p1y); Coordinate pp0 = new Coordinate(pp0x, pp0y); Coordinate pp1 = new Coordinate(pp1x, pp1y); AffineTransformation trans = AffineTransformationFactory.createFromControlVectors( p0, p1, pp0, pp1); Coordinate dest = new Coordinate(); assertEqualPoint(pp0, trans.transform(p0, dest)); assertEqualPoint(pp1, trans.transform(p1, dest)); }
void run(double p0x, double p0y, double p1x, double p1y, double p2x, double p2y, double pp0x, double pp0y, double pp1x, double pp1y, double pp2x, double pp2y ) { Coordinate p0 = new Coordinate(p0x, p0y); Coordinate p1 = new Coordinate(p1x, p1y); Coordinate p2 = new Coordinate(p2x, p2y); Coordinate pp0 = new Coordinate(pp0x, pp0y); Coordinate pp1 = new Coordinate(pp1x, pp1y); Coordinate pp2 = new Coordinate(pp2x, pp2y); AffineTransformationBuilder atb = new AffineTransformationBuilder( p0, p1, p2, pp0, pp1, pp2); AffineTransformation trans = atb.getTransformation(); Coordinate dest = new Coordinate(); assertEqualPoint(pp0, trans.transform(p0, dest)); assertEqualPoint(pp1, trans.transform(p1, dest)); assertEqualPoint(pp2, trans.transform(p2, dest)); }
private static Geometry fontGlyph(Geometry g, String text, Font font) { Envelope env = FunctionsUtil.getEnvelopeOrDefault(g); GeometryFactory geomFact = FunctionsUtil.getFactoryOrDefault(g); Geometry textGeom = FontGlyphReader.read(text, font, geomFact); Envelope envText = textGeom.getEnvelopeInternal(); if (g != null) { // transform to baseline Coordinate baseText0 = new Coordinate(envText.getMinX(), envText.getMinY()); Coordinate baseText1 = new Coordinate(envText.getMaxX(), envText.getMinY()); Coordinate baseGeom0 = new Coordinate(env.getMinX(), env.getMinY()); Coordinate baseGeom1 = new Coordinate(env.getMaxX(), env.getMinY()); AffineTransformation trans = AffineTransformationFactory.createFromBaseLines(baseText0, baseText1, baseGeom0, baseGeom1); return trans.transform(textGeom); } return textGeom; }