private static AffineTransform nonIdentityAffineTransform() { AffineTransform transf = new AffineTransform(); transf.translate(3.0, 5.0); transf.rotate(2.0); transf.scale(6.0, 7.0); transf.shear(3.5, 4.5); return transf; }
public static AffineTransform makeComplexAT() { AffineTransform at = new AffineTransform(); at.scale(2.5, -3.0); at.rotate(Math.PI / 4.0); at.shear(1.0, -3.0); at.translate(25.0, 12.5); return at; };
/** * Shears the current transform. Calls writeTransform(Transform). * * @param shx amount for shearing * @param shy amount for shearing */ public void shear(double shx, double shy) { currentTransform.shear(shx, shy); try { writeTransform(new AffineTransform(1, shy, shx, 1, 0, 0)); } catch (IOException e) { handleException(e); } }
public void init(Graphics2D g2d, Context ctx, Dimension dim) { int w = dim.width; int h = dim.height; AffineTransform at = new AffineTransform(); at.translate((w - (w * h) / (h + w * 0.1)) / 2, 0.0); at.shear(0.0, 0.1); g2d.transform(at); dim.setSize(scaleForTransform(at, dim)); }
/* * (non-Javadoc) * * @see controller.Command#execute() */ public void execute() { Point anchor = getAnchorPoint(objects); double shx = Math.tan((angleDegrees / 360) * (2 * Math.PI)); System.out.printf("Applying sheerx of %f%n", shx); for (Object shapeObj : objects) { Shape shape = (Shape) shapeObj; mt.addMememto(shape); AffineTransform t = shape.getAffineTransform(); t.translate(anchor.x, anchor.y); t.shear(shx, 0); t.translate(-anchor.x, -anchor.y); shape.setAffineTransform(t); } }
@Override public BufferedImage doTransform(BufferedImage src, BufferedImage dest) { // fill with the background color Graphics2D g = dest.createGraphics(); g.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON); g.setRenderingHint(KEY_INTERPOLATION, VALUE_INTERPOLATION_BICUBIC); g.setColor(bgColorParam.getColor()); g.fillRect(0, 0, dest.getWidth(), dest.getHeight()); double theta = angleParam.getValueInRadians(); ImageLayer layer = ImageComponents.getActiveImageLayerOrMask().get(); float relativeX = centerParam.getRelativeX(); float relativeY = centerParam.getRelativeY(); double centerShiftX = (-layer.getTX() + src.getWidth()) * relativeX; double centerShiftY = (-layer.getTY() + src.getHeight()) * relativeY; AffineTransform transform = AffineTransform.getRotateInstance(theta, centerShiftX, centerShiftY); int scaleX = scaleParam.getValue(0); int scaleY = scaleParam.getValue(1); if ((scaleX != 100) || (scaleY != 100)) { transform.translate(centerShiftX, centerShiftY); transform.scale(scaleX / 100.0, scaleY / 100.0); transform.translate(-centerShiftX, -centerShiftY); } int shearX = shearParam.getValue(0); int shearY = shearParam.getValue(1); if ((shearX != 0) || (shearY != 0)) { transform.translate(centerShiftX, centerShiftY); transform.shear(shearX / 100.0, shearY / 100.0); transform.translate(-centerShiftX, -centerShiftY); } g.drawImage(src, transform, null); g.dispose(); return dest; }
// --------------------------------------------------------- private synchronized AffineTransform bufferTransform() { AffineTransform r = new AffineTransform(); for (int i = 0; i < a1.size(); i++) { int s1 = a1.get(i); Object s2 = a2.get(i); Object s3[] = null; if (s2 instanceof Object[]) s3 = (Object[]) s2; if (s1 == setTransform) { r = makeTransform(s2); } if (s1 == shear) r.shear((Double) s3[0], (Double) s3[1]); if (s1 == rotate1) r.rotate((Double) s2); if (s1 == rotate2) r.rotate((Double) s3[0], (Double) s3[1], (Double) s3[2]); if (s1 == scale1) r.scale((Double) s3[0], (Double) s3[1]); if (s1 == translate1) r.translate((Double) s3[0], (Double) s3[1]); if (s1 == translate2) r.translate((Integer) s3[0], (Integer) s3[1]); } return r; }
public AffineTransform getAffineTransform( int width, int height, double[] _xyzSW, double[] _xyzSE, double[] _xyzNW) { int[] cornerNW = projection.screenProjection(_xyzNW); int[] cornerSE = projection.screenProjection(_xyzSE); int[] cornerSW = projection.screenProjection(_xyzSW); double[] vectWE = { (double) cornerSE[0] - (double) cornerSW[0], (double) cornerSE[1] - (double) cornerSW[1] }; double normvectWE = sqrt(sqr(vectWE[0]) + sqr(vectWE[1])); double[] vectSN = { (double) cornerNW[0] - (double) cornerSW[0], (double) cornerNW[1] - (double) cornerSW[1] }; double normvectSN = sqrt(sqr(vectSN[0]) + sqr(vectSN[1])); double angleSW = acos((vectWE[0] * vectSN[0] + vectWE[1] * vectSN[1]) / (normvectWE * normvectSN)); if (angleSW == 0.0) { return null; } AffineTransform t = new AffineTransform(); t.translate(cornerNW[0], cornerNW[1]); t.scale(sign(vectWE[0]), -sign(vectSN[1])); t.rotate(-atan(vectSN[0] / vectSN[1])); t.shear(0, 1 / tan(PI - angleSW)); t.scale(normvectWE * cos(angleSW - PI / 2) / (double) width, normvectSN / (double) height); double[] _cornerSE_tr = new double[2]; double[] _cornerSE = {width, height}; t.transform(_cornerSE, 0, _cornerSE_tr, 0, 1); if (isDiff(_cornerSE_tr, cornerSE)) { double[] vectSE_NW_1 = { (double) cornerNW[0] - (double) cornerSE[0], (double) cornerNW[1] - (double) cornerSE[1] }; double[] vectSE_NW_2 = { (double) cornerNW[0] - (double) _cornerSE_tr[0], (double) cornerNW[1] - (double) _cornerSE_tr[1] }; double normvect_1 = sqrt(sqr(vectSE_NW_1[0]) + sqr(vectSE_NW_1[1])); double normvect_2 = sqrt(sqr(vectSE_NW_1[0]) + sqr(vectSE_NW_1[1])); double cos_angle = (((vectSE_NW_1[0] * vectSE_NW_2[0] + vectSE_NW_1[1] * vectSE_NW_2[1]) / (normvect_1 * normvect_2))); double vect = (vectSE_NW_1[0] * vectSE_NW_2[1] - vectSE_NW_1[1] * vectSE_NW_2[0]); AffineTransform t2 = new AffineTransform(); if (vect < 0) { t2.rotate(acos(cos_angle), cornerNW[0], cornerNW[1]); } else { t2.rotate(-acos(cos_angle), cornerNW[0], cornerNW[1]); } t.preConcatenate(t2); } // TODO patch for many cases... /*double[] _cornerSW_tr = new double[2]; double[] _cornerSW = { 0, img.getHeight(canvas) }; t.transform(_cornerSW, 0, _cornerSW_tr, 0, 1); if (isDiff(_cornerSW_tr, cornerSW)) { double[] vectSW_NW_1 = { (double) cornerNW[0] - (double) cornerSW[0], (double) cornerNW[1] - (double) cornerSW[1] }; double[] vectSW_NW_2 = { (double) cornerNW[0] - (double) _cornerSW_tr[0], (double) cornerNW[1] - (double) _cornerSW_tr[1] }; double normvect_1 = sqrt(sqr(vectSW_NW_1[0]) + sqr(vectSW_NW_1[1])); double normvect_2 = sqrt(sqr(vectSW_NW_1[0]) + sqr(vectSW_NW_1[1])); double cos_angle = (((vectSW_NW_1[0] * vectSW_NW_2[0] + vectSW_NW_1[1] * vectSW_NW_2[1]) / (normvect_1 * normvect_2))); double vect = (vectSW_NW_1[0] * vectSW_NW_2[1] - vectSW_NW_1[1] * vectSW_NW_2[0]); System.out.println(cos_angle + " " + vect + " -> " + toDegrees(acos(cos_angle))); //System.out.println(" "+vectSE_NW_1[0]+","+vectSE_NW_1[1]+" "+vectSE_NW_2[0]+","+vectSE_NW_2[1]); AffineTransform t2 = new AffineTransform(); if (vect > 0) t2.rotate(acos(cos_angle), cornerNW[0], cornerNW[1]); else t2.rotate(-acos(cos_angle), cornerNW[0], cornerNW[1]); t.preConcatenate(t2); }*/ return t; }
public void shear(double sx, double sy) { AffineTransform transform = getTransform(); transform.shear(sx, sy); setTransform(transform); }
/** @see Graphics2D#shear(double, double) */ public void shear(double shx, double shy) { transform.shear(shx, shy); }