/** * Transforms the figure. */ @Override public void transform(AffineTransform tx) { super.transform(tx); for (Figure f : children) { f.transform(tx); } invalidate(); } @Override
/** * Transforms the figure. */ @Override public void transform(AffineTransform tx) { for (Figure f : getChildren()) { f.transform(tx); } invalidate(); //invalidate(); }
protected void transform(Point2D.Double anchor, Point2D.Double lead) { Figure f = getOwner(); f.willChange(); Rectangle2D.Double oldBounds = getTransformedBounds(); Rectangle2D.Double newBounds = new Rectangle2D.Double( Math.min(anchor.x, lead.x), Math.min(anchor.y, lead.y), Math.abs(anchor.x - lead.x), Math.abs(anchor.y - lead.y)); double sx = newBounds.width / oldBounds.width; double sy = newBounds.height / oldBounds.height; AffineTransform tx = new AffineTransform(); tx.translate(-oldBounds.x, -oldBounds.y); if (!Double.isNaN(sx) && !Double.isNaN(sy) && (sx != 1d || sy != 1d) && !(sx < 0.0001) && !(sy < 0.0001)) { f.transform(tx); tx.setToIdentity(); tx.scale(sx, sy); f.transform(tx); tx.setToIdentity(); } tx.translate(newBounds.x, newBounds.y); f.transform(tx); f.changed(); } }
@Override public void redo() throws CannotRedoException { super.redo(); for (Figure f : figures) { f.willChange(); f.transform(tx); f.changed(); } } @Override
/** * Standard presentation method which is delegated to the encapsulated presentation figure. * The presentation figure is moved as well as all contained figures. */ @Override public void transform(AffineTransform tx) { super.transform(tx); if (getPresentationFigure() != null) { getPresentationFigure().transform(tx); } }
@Override public void trackStep(Point anchor, Point lead, int modifiersEx) { Figure f = getOwner(); Point2D.Double newPoint = view.getConstrainer().constrainPoint(view.viewToDrawing(lead)); AffineTransform tx = new AffineTransform(); tx.translate(newPoint.x - oldPoint.x, newPoint.y - oldPoint.y); f.willChange(); f.transform(tx); f.changed(); oldPoint = newPoint; } @Override
@Override public void actionPerformed(java.awt.event.ActionEvent e) { CompositeEdit edit; AffineTransform tx = new AffineTransform(); tx.translate(dx, dy); HashSet<Figure> transformedFigures = new HashSet<Figure>(); for (Figure f : getView().getSelectedFigures()) { if (f.isTransformable()) { transformedFigures.add(f); f.willChange(); f.transform(tx); f.changed(); } } fireUndoableEditHappened(new TransformEdit(transformedFigures, tx)); }
@Override protected void alignFigures(Collection selectedFigures, Rectangle2D.Double selectionBounds) { double x = selectionBounds.x + selectionBounds.width / 2; for (Iterator i=getView().getSelectedFigures().iterator(); i.hasNext(); ) { Figure f = (Figure) i.next(); if (f.isTransformable()) { f.willChange(); Rectangle2D.Double b = f.getBounds(); AffineTransform tx = new AffineTransform(); tx.translate(x - b.x - b.width / 2, 0); f.transform(tx); f.changed(); fireUndoableEditHappened(new TransformEdit(f, tx)); } } } }
@Override protected void alignFigures(Collection selectedFigures, Rectangle2D.Double selectionBounds) { double y = selectionBounds.y; for (Iterator i=getView().getSelectedFigures().iterator(); i.hasNext(); ) { Figure f = (Figure) i.next(); if (f.isTransformable()) { f.willChange(); Rectangle2D.Double b = f.getBounds(); AffineTransform tx = new AffineTransform(); tx.translate(0, y - b.y); f.transform(tx); f.changed(); fireUndoableEditHappened(new TransformEdit(f, tx)); } } } }
@Override protected void alignFigures(Collection selectedFigures, Rectangle2D.Double selectionBounds) { double x = selectionBounds.x; for (Iterator i=getView().getSelectedFigures().iterator(); i.hasNext(); ) { Figure f = (Figure) i.next(); if (f.isTransformable()) { f.willChange(); Rectangle2D.Double b = f.getBounds(); AffineTransform tx = new AffineTransform(); tx.translate(x - b.x, 0); f.transform(tx); f.changed(); fireUndoableEditHappened(new TransformEdit(f, tx)); } } } }
@Override protected void alignFigures(Collection selectedFigures, Rectangle2D.Double selectionBounds) { double y = selectionBounds.y + selectionBounds.height; for (Iterator i=getView().getSelectedFigures().iterator(); i.hasNext(); ) { Figure f = (Figure) i.next(); if (f.isTransformable()) { f.willChange(); Rectangle2D.Double b = f.getBounds(); AffineTransform tx = new AffineTransform(); tx.translate(0, y - b.y - b.height); f.transform(tx); f.changed(); fireUndoableEditHappened(new TransformEdit(f, tx)); } } } }
@Override public void keyPressed(KeyEvent evt) { Figure f = getOwner(); center = getCenter(); if (f.isTransformable()) { AffineTransform tx = new AffineTransform(); switch (evt.getKeyCode()) { case KeyEvent.VK_UP: case KeyEvent.VK_LEFT: tx.rotate(-1d / 180d * Math.PI, center.x, center.y); evt.consume(); break; case KeyEvent.VK_DOWN: case KeyEvent.VK_RIGHT: tx.rotate(1d / 180d * Math.PI, center.x, center.y); evt.consume(); break; } f.willChange(); f.transform(tx); f.changed(); fireUndoableEditHappened( new TransformEdit(f, tx)); } } }
@Override protected void alignFigures(Collection selectedFigures, Rectangle2D.Double selectionBounds) { double x = selectionBounds.x + selectionBounds.width; for (Iterator i=getView().getSelectedFigures().iterator(); i.hasNext(); ) { Figure f = (Figure) i.next(); if (f.isTransformable()) { f.willChange(); Rectangle2D.Double b = f.getBounds(); AffineTransform tx = new AffineTransform(); tx.translate(x - b.x - b.width, 0); f.transform(tx); f.changed(); fireUndoableEditHappened(new TransformEdit(f, tx)); } } } }
@Override protected void alignFigures(Collection selectedFigures, Rectangle2D.Double selectionBounds) { double y = selectionBounds.y + selectionBounds.height / 2; for (Iterator i=getView().getSelectedFigures().iterator(); i.hasNext(); ) { Figure f = (Figure) i.next(); if (f.isTransformable()) { f.willChange(); Rectangle2D.Double b = f.getBounds(); AffineTransform tx = new AffineTransform(); tx.translate(0, y - b.y - b.height / 2); f.transform(tx); f.changed(); fireUndoableEditHappened(new TransformEdit(f, tx)); } } } }
@Override public void mouseDragged(MouseEvent evt) { DrawingView view = getView(); if (!transformedFigures.isEmpty()) { if (isDragging == false) { isDragging = true; updateCursor(editor.findView((Container) evt.getSource()), new Point(evt.getX(), evt.getY())); } Point2D.Double currentPoint = view.viewToDrawing(new Point(evt.getX(), evt.getY())); dragRect.x += currentPoint.x - previousPoint.x; dragRect.y += currentPoint.y - previousPoint.y; Rectangle2D.Double constrainedRect = (Rectangle2D.Double) dragRect.clone(); if (view.getConstrainer() != null) { view.getConstrainer().constrainRectangle( constrainedRect); } AffineTransform tx = new AffineTransform(); tx.translate( constrainedRect.x - previousOrigin.x, constrainedRect.y - previousOrigin.y); for (Figure f : transformedFigures) { f.willChange(); f.transform(tx); f.changed(); } previousPoint = currentPoint; previousOrigin = new Point2D.Double(constrainedRect.x, constrainedRect.y); } }
@Override public void trackStep(Point anchor, Point lead, int modifiersEx) { Figure f = getOwner(); if (f.isTransformable()) { Point2D.Double newPoint = view.getConstrainer().constrainPoint(view.viewToDrawing(lead)); AffineTransform tx = new AffineTransform(); tx.translate(newPoint.x - oldPoint.x, newPoint.y - oldPoint.y); f.willChange(); f.transform(tx); f.changed(); oldPoint = newPoint; } }
@Override public void trackStep(Point anchor, Point lead, int modifiersEx) { location = new Point(lead.x, lead.y); Point2D.Double leadPoint = view.viewToDrawing(lead); double stepTheta = Geom.angle(center.x, center.y, leadPoint.x, leadPoint.y); double stepLength = Geom.length(center.x, center.y, leadPoint.x, leadPoint.y); double scaleFactor = (modifiersEx & (InputEvent.ALT_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK)) != 0 ? 1d : stepLength / startLength; transform.setToIdentity(); transform.translate(center.x, center.y); transform.scale(scaleFactor, scaleFactor); transform.rotate(stepTheta - startTheta); transform.translate(-center.x, -center.y); getOwner().willChange(); getOwner().restoreTransformTo(restoreData); getOwner().transform(transform); getOwner().changed(); } /*
@Override public void trackStep(Point anchor, Point lead, int modifiersEx) { location = new Point(lead.x, lead.y); Point2D.Double leadPoint = view.viewToDrawing(lead); double stepTheta = Geom.angle(center.x, center.y, leadPoint.x, leadPoint.y); double currentTheta = view.getConstrainer().constrainAngle(stepTheta - startTheta); transform.setToIdentity(); transform.translate(center.x, center.y); transform.rotate(currentTheta); transform.translate(-center.x, -center.y); getOwner().willChange(); getOwner().restoreTransformTo(restoreData); getOwner().transform(transform); getOwner().changed(); }
@Override public void undo() throws CannotUndoException { super.undo(); try { AffineTransform inverse = tx.createInverse(); for (Figure f : figures) { f.willChange(); f.transform(inverse); f.changed(); } } catch (NoninvertibleTransformException e) { e.printStackTrace(); } } @Override
@Override public void transform(AffineTransform tx) { if (get(TRANSFORM) != null || (tx.getType() & (AffineTransform.TYPE_TRANSLATION)) != tx.getType()) { if (get(TRANSFORM) == null) { TRANSFORM.setClone(this, tx); } else { AffineTransform t = TRANSFORM.getClone(this); t.preConcatenate(tx); set(TRANSFORM, t); } } else { for (Figure f : getChildren()) { f.transform(tx); } if (get(FILL_GRADIENT) != null && !get(FILL_GRADIENT).isRelativeToFigureBounds()) { Gradient g = FILL_GRADIENT.getClone(this); g.transform(tx); set(FILL_GRADIENT, g); } if (get(STROKE_GRADIENT) != null && !get(STROKE_GRADIENT).isRelativeToFigureBounds()) { Gradient g = STROKE_GRADIENT.getClone(this); g.transform(tx); set(STROKE_GRADIENT, g); } } invalidate(); }