public void translate(double dx, double dy) { delegate.translate(dx, dy); }
public void setToIdentity() { layoutTransformer.setToIdentity(); viewTransformer.setToIdentity(); }
void center(MouseEvent me, GraphZoomScrollPane gzsp) { VisualizationViewer<V,E> vv = (VisualizationViewer<V,E>)me.getSource(); MutableTransformer viewTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW); double scaleFromViewTransformer = viewTransformer.getScale(); Dimension paneSize = gzsp.getSize(); Point2D positionOfVertexInPane = me.getPoint(); double[] centerOfPane = new double[] { paneSize.getWidth()/2d, paneSize.getHeight()/2d }; double[] amountToMovePane = new double[] { (centerOfPane[0]-positionOfVertexInPane.getX())/scaleFromViewTransformer, (centerOfPane[1]-positionOfVertexInPane.getY())/scaleFromViewTransformer }; viewTransformer.translate(amountToMovePane[0], amountToMovePane[1]); }
MutableTransformer modelTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT); modelTransformer.getTranslateX(); modelTransformer.getTranslateY();
/** * Scale current metagraph view to fit in whole graph. * */ public void scaleToFit() { // reset scaling for predictive behaviour visviewer.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).setToIdentity(); visviewer.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).setToIdentity(); // place layout centre in centre of the view Point2D[] calc = calcBounds(); Point2D min = calc[0]; Point2D max = calc[1]; // check for empty graph if (min != null && max != null) { Point2D layout_bounds = new Point2D.Double(max.getX() - min.getX(), max.getY() - min.getY()); // layouter produced nice bounds if (layout_bounds.getX() > 0 && layout_bounds.getY() > 0) { Point2D screen_center = visviewer.getCenter(); Point2D layout_center = new Point2D.Double(screen_center.getX() - (layout_bounds.getX() / 2) - min.getX(), screen_center.getY() - (layout_bounds.getY() / 2) - min.getY()); visviewer.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).translate(layout_center.getX(), layout_center.getY()); // scale graph Point2D scale_bounds = new Point2D.Double(visviewer.getSize().getWidth() / layout_bounds.getX(), visviewer.getSize().getHeight() / layout_bounds.getY()); float scale = (float) Math.min(scale_bounds.getX(), scale_bounds.getY()); scale = 0.8f * scale; scaler.scale(visviewer, scale, visviewer.getCenter()); } } }
Point2D pnt = view.inverseTransform(ctr); Point2D delta = new Point2D.Double(deltaX, deltaY); layout.translate(deltaX, deltaY);
public void scale(VisualizationServer<?,?> vv, float amount, Point2D at) { MutableTransformer layoutTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT); MutableTransformer viewTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW); double modelScale = layoutTransformer.getScale(); double viewScale = viewTransformer.getScale(); double inverseModelScale = Math.sqrt(crossover)/modelScale; double inverseViewScale = Math.sqrt(crossover)/viewScale; double scale = modelScale * viewScale; Point2D transformedAt = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(Layer.VIEW, at); if((scale*amount - crossover)*(scale*amount - crossover) < 0.001) { // close to the control point, return both Functions to a scale of sqrt crossover value layoutTransformer.scale(inverseModelScale, inverseModelScale, transformedAt); viewTransformer.scale(inverseViewScale, inverseViewScale, at); } else if(scale*amount < crossover) { // scale the viewTransformer, return the layoutTransformer to sqrt crossover value viewTransformer.scale(amount, amount, at); layoutTransformer.scale(inverseModelScale, inverseModelScale, transformedAt); } else { // scale the layoutTransformer, return the viewTransformer to crossover value layoutTransformer.scale(amount, amount, transformedAt); viewTransformer.scale(inverseViewScale, inverseViewScale, at); } vv.repaint(); } }
public Point2D inverseTransform(Point2D p) { return delegate.inverseTransform(p); }
public AffineTransform getTransform() { return delegate.getTransform(); }
public Image getImage(Point2D center, Dimension d) { int width = getWidth(); int height = getHeight(); float scalex = (float)width/d.width; float scaley = (float)height/d.height; try { renderContext.getMultiLayerTransformer().getTransformer(Layer.VIEW).scale(scalex, scaley, center); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = bi.createGraphics(); graphics.setRenderingHints(renderingHints); paint(graphics); graphics.dispose(); return bi; } finally { renderContext.getMultiLayerTransformer().getTransformer(Layer.VIEW).setToIdentity(); } } }
public void adjustmentValueChanged(AdjustmentEvent e) { int hval = e.getValue(); float dh = previous - hval; previous = hval; if(dh != 0 && scrollBarsMayControlAdjusting) { // get the uniform scale of all transforms float layoutScale = (float) vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).getScale(); dh *= layoutScale; AffineTransform at = AffineTransform.getTranslateInstance(dh, 0); vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).preConcatenate(at); } } }
public void rotate(double radians, double x, double y) { delegate.rotate(radians, x, y); } }
public double getScale() { return delegate.getScale(); }
public double getTranslateY() { return delegate.getTranslateY(); }
public double getTranslateX() { return delegate.getTranslateX(); }
/** * Scale current satellite view to fit in whole graph. * */ public void scaleToFit() { // reset scaling for predictive behaviour satellite.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).setToIdentity(); satellite.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).setToIdentity(); // place layout center in center of the view Point2D[] calc = calcBounds(); Point2D min = calc[0]; Point2D max = calc[1]; Point2D layout_bounds = new Point2D.Double(max.getX() - min.getX(), max.getY() - min.getY()); // layouter produced nice bounds if (layout_bounds.getX() > 0 && layout_bounds.getY() > 0) { Point2D screen_center = satellite.getCenter(); Point2D layout_center = new Point2D.Double(screen_center.getX() - (layout_bounds.getX() / 2) - min.getX(), screen_center.getY() - (layout_bounds.getY() / 2) - min.getY()); satellite.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).translate(layout_center.getX(), layout_center.getY()); // scale graph Point2D scale_bounds = new Point2D.Double(satellite.getWidth() / layout_bounds.getX(), satellite.getHeight() / layout_bounds.getY()); float scale = (float) Math.min(scale_bounds.getX(), scale_bounds.getY()); scale = 0.85f * scale; scaler.scale(satellite, scale, satellite.getCenter()); } else { // default scaler if layout not yet ready satellite.scaleToLayout(scaler); } }
/** * chack the modifiers. If accepted, translate the graph according * to the dragging of the mouse pointer * @param e the event */ public void mouseDragged(MouseEvent e) { VisualizationViewer<?,?> vv = (VisualizationViewer<?,?>)e.getSource(); boolean accepted = checkModifiers(e); if(accepted) { MutableTransformer viewTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW); vv.setCursor(cursor); try { Point2D q = viewTransformer.inverseTransform(down); Point2D p = viewTransformer.inverseTransform(e.getPoint()); float dx = (float) (p.getX()-q.getX()); float dy = (float) (p.getY()-q.getY()); viewTransformer.translate(dx, dy); down.x = e.getX(); down.y = e.getY(); } catch(RuntimeException ex) { System.err.println("down = "+down+", e = "+e); throw ex; } e.consume(); } }
MutableTransformer viewTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW); double modelScale = layoutTransformer.getScale(); double viewScale = viewTransformer.getScale(); double inverseModelScale = Math.sqrt(crossover) / modelScale; double inverseViewScale = Math.sqrt(crossover) / viewScale; layoutTransformer.scale(inverseModelScale, inverseModelScale, transformedAt); viewTransformer.scale(inverseViewScale, inverseViewScale, at); } else if (scale * amount < crossover) { viewTransformer.scale(amount, amount, at); layoutTransformer.scale(inverseModelScale, inverseModelScale, transformedAt); } else { layoutTransformer.scale(amount, amount, transformedAt); viewTransformer.scale(inverseViewScale, inverseViewScale, at);
public Shape inverseTransform(Shape shape) { return delegate.inverseTransform(shape); }
public AffineTransform getTransform() { return delegate.getTransform(); }