/** * @param d the size used for the lens * @param delegate the transformer to use */ public LensTransformer(Dimension d, MutableTransformer delegate) { this(new Lens(d), delegate); }
public LensControls(LensTransformer lensTransformer) { this.lensShape = lensTransformer.getLens().getLensShape(); }
private void changeMagnification(Lens lens, float delta) { float magnification = lens.getMagnification() + delta; magnification = Math.max(floor, magnification); magnification = Math.min(magnification, ceiling); lens.setMagnification(magnification); }
/** * called to change the radius of the lens * * @param lens * @param point */ private void setViewRadius(Lens lens, Point2D point) { double distanceFromCenter = lens.getDistanceFromCenter(point); lens.setRadius(distanceFromCenter + edgeOffset); }
/** * called to set up translating the lens center or changing the layoutSize * * @param lens * @param point */ private void testViewCenter(Lens lens, Point2D point) { double distanceFromCenter = lens.getDistanceFromCenter(point); if (distanceFromCenter < 10) { lens.setCenter(point); dragOnLens = true; } else if (Math.abs(distanceFromCenter - lens.getRadius()) < 10) { edgeOffset = lens.getRadius() - distanceFromCenter; lens.setRadius(distanceFromCenter + edgeOffset); dragOnEdge = true; } }
return null; Point2D viewCenter = lens.getCenter(); double viewRadius = lens.getRadius(); double ratio = lens.getRatio(); double mag = lens.getMagnification(); radius *= mag;
Lens lens = new Lens(d); hyperbolicViewSupport = new ViewLensSupport<>( lens = new Lens(d); lens.setMagnification(3.f); magnifyViewSupport = new ViewLensSupport<>( .getLensTransformer() .getLens() .setLensShape(hyperbolicViewSupport.getLensTransformer().getLens().getLensShape()); magnifyViewSupport .getLensTransformer() .getLens() .setLensShape(hyperbolicLayoutSupport.getLensTransformer().getLens().getLensShape()); magnifyLayoutSupport .getLensTransformer() .getLens() .setLensShape(magnifyViewSupport.getLensTransformer().getLens().getLensShape());
public Shape transform(VisualizationServer<N, E> vv, Shape shape) { MultiLayerTransformer multiLayerTransformer = vv.getRenderContext().getMultiLayerTransformer(); MutableTransformer viewTransformer = multiLayerTransformer.getTransformer(Layer.VIEW); MutableTransformer layoutTransformer = multiLayerTransformer.getTransformer(Layer.LAYOUT); VisualizationModel<N, E> model = vv.getModel(); if (viewTransformer instanceof LensTransformer) { shape = multiLayerTransformer.transform(shape); } else if (layoutTransformer instanceof LensTransformer) { LayoutModel<N> layoutModel = model.getLayoutModel(); Dimension d = new Dimension(layoutModel.getWidth(), layoutModel.getHeight()); HyperbolicShapeTransformer shapeChanger = new HyperbolicShapeTransformer(d, viewTransformer); LensTransformer lensTransformer = (LensTransformer) layoutTransformer; shapeChanger.getLens().setLensShape(lensTransformer.getLens().getLensShape()); MutableTransformer layoutDelegate = ((MutableTransformerDecorator) layoutTransformer).getDelegate(); shape = shapeChanger.transform(layoutDelegate.transform(shape)); } else { shape = multiLayerTransformer.transform(Layer.LAYOUT, shape); } return shape; }
Dimension d = new Dimension(layoutModel.getWidth(), layoutModel.getHeight()); Lens lens = new Lens(d); lens.setMagnification(2.f); magnifyViewSupport = new MagnifyImageLensSupport<>(
return null; Point2D viewCenter = lens.getCenter(); double ratio = lens.getRatio(); double radius = polar.radius; double mag = lens.getMagnification(); radius *= mag;
public double getDistanceFromCenter(Point2D p) { double dx = lensShape.getCenterX() - p.getX(); double dy = lensShape.getCenterY() - p.getY(); dx *= getRatio(); return Math.sqrt(dx * dx + dy * dy); } }
/** * called to change the location of the lens * * @param lens * @param point */ private void setViewCenter(Lens lens, Point2D point) { lens.setCenter(point); }
return null; Point2D viewCenter = lens.getCenter(); double viewRadius = lens.getRadius(); double ratio = lens.getRatio(); double mag = Math.tan(Math.PI / 2 * lens.getMagnification()); radius *= mag;
Lens lens = new Lens(d); hyperbolicViewSupport = new ViewLensSupport<>( lens = new Lens(d); lens.setMagnification(3.f); magnifyViewSupport = new ViewLensSupport<>( .getLensTransformer() .getLens() .setLensShape(hyperbolicViewSupport.getLensTransformer().getLens().getLensShape()); magnifyViewSupport .getLensTransformer() .getLens() .setLensShape(hyperbolicLayoutSupport.getLensTransformer().getLens().getLensShape()); magnifyLayoutSupport .getLensTransformer() .getLens() .setLensShape(magnifyViewSupport.getLensTransformer().getLens().getLensShape());
public void paint(Graphics g) { g.setColor(Color.gray); Graphics2D g2d = (Graphics2D) g; Point center = radialLayoutAlgorithm.getCenter(layoutModel); Ellipse2D ellipse = new Ellipse2D.Double(); for (double d : depths) { ellipse.setFrameFromDiagonal(center.x - d, center.y - d, center.x + d, center.y + d); Shape shape = ellipse; MultiLayerTransformer multiLayerTransformer = vv.getRenderContext().getMultiLayerTransformer(); MutableTransformer viewTransformer = multiLayerTransformer.getTransformer(Layer.VIEW); MutableTransformer layoutTransformer = multiLayerTransformer.getTransformer(Layer.LAYOUT); if (viewTransformer instanceof MutableTransformerDecorator) { shape = multiLayerTransformer.transform(shape); } else if (layoutTransformer instanceof LensTransformer) { LayoutModel<String> layoutModel = vv.getModel().getLayoutModel(); Dimension dimension = new Dimension(layoutModel.getWidth(), layoutModel.getHeight()); HyperbolicShapeTransformer shapeChanger = new HyperbolicShapeTransformer(dimension, viewTransformer); LensTransformer lensTransformer = (LensTransformer) layoutTransformer; shapeChanger.getLens().setLensShape(lensTransformer.getLens().getLensShape()); MutableTransformer layoutDelegate = ((MutableTransformerDecorator) layoutTransformer).getDelegate(); shape = shapeChanger.transform(layoutDelegate.transform(shape)); } else { shape = vv.getRenderContext().getMultiLayerTransformer().transform(Layer.LAYOUT, shape); } g2d.draw(shape); } }
public void setRadius(double viewRadius) { double x = lensShape.getCenterX(); double y = lensShape.getCenterY(); double viewRatio = getRatio(); lensShape.setFrame( x - viewRadius / viewRatio, y - viewRadius, 2 * viewRadius / viewRatio, 2 * viewRadius); }
/** override base class to un-project the fisheye effect */ private Point2D _inverseTransform(Point2D viewPoint) { viewPoint = delegate.inverseTransform(viewPoint); Point2D viewCenter = lens.getCenter(); double viewRadius = lens.getRadius(); double ratio = lens.getRatio(); double dx = viewPoint.getX() - viewCenter.getX(); double dy = viewPoint.getY() - viewCenter.getY(); // factor out ellipse dx *= ratio; Point pointFromCenter = Point.of(dx, dy); PolarPoint polar = PolarPoint.cartesianToPolar(pointFromCenter); double radius = polar.radius; if (radius > viewRadius) { return viewPoint; } double mag = lens.getMagnification(); radius /= mag; polar = polar.newRadius(radius); Point projectedPoint = PolarPoint.polarToCartesian(polar); projectedPoint = Point.of(projectedPoint.x / ratio, projectedPoint.y); Point2D translatedBack = new Point2D.Double( projectedPoint.x + viewCenter.getX(), projectedPoint.y + viewCenter.getY()); return translatedBack; }
Dimension d = new Dimension(layoutModel.getWidth(), layoutModel.getHeight()); Lens lens = new Lens(d); hyperbolicViewSupport = new ViewLensSupport<>( lens = new Lens(d); lens.setMagnification(3.f); magnifyViewSupport = new ViewLensSupport<>( .getLensTransformer() .getLens() .setLensShape(hyperbolicViewSupport.getLensTransformer().getLens().getLensShape()); magnifyViewSupport .getLensTransformer() .getLens() .setLensShape(hyperbolicLayoutSupport.getLensTransformer().getLens().getLensShape()); magnifyLayoutSupport .getLensTransformer() .getLens() .setLensShape(magnifyViewSupport.getLensTransformer().getLens().getLensShape());
new HyperbolicShapeTransformer(d, viewTransformer); LensTransformer lensTransformer = (LensTransformer) layoutTransformer; shapeChanger.getLens().setLensShape(lensTransformer.getLens().getLensShape()); MutableTransformer layoutDelegate = ((MutableTransformerDecorator) layoutTransformer).getDelegate();
/** @param d the size used for the lens */ public LensTransformer(Dimension d) { this(new Lens(d)); }