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;
  }
Exemple #7
0
  // ---------------------------------------------------------
  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;
  }
Exemple #8
0
  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);
 }
Exemple #10
0
 /** @see Graphics2D#shear(double, double) */
 public void shear(double shx, double shy) {
   transform.shear(shx, shy);
 }