@Override public void writeTo(Graph data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> headers, OutputStream out) throws IOException { Integer width = Integer.parseInt(Optional.ofNullable(request.getParameter("width")).orElse(DEFAULT_WIDTH)); Integer height = Integer.parseInt(Optional.ofNullable(request.getParameter("height")).orElse(DEFAULT_HEIGHT)); String layoutName = Optional.ofNullable(request.getParameter("layout")).orElse(DEFAULT_LAYOUT); GraphJung<Graph> graph = new GraphJung<Graph>(data); AbstractLayout<Vertex, Edge> layout = getLayout(graph, layoutName); layout.setSize(new Dimension(width, height)); BasicVisualizationServer<Vertex, Edge> viz = new BasicVisualizationServer<>(layout); viz.setPreferredSize(new Dimension(width, height)); viz.getRenderContext().setEdgeLabelTransformer(edgeLabelTransformer); viz.getRenderContext().setVertexLabelTransformer(vertexLabelTransformer); viz.getRenderContext().setVertexFillPaintTransformer(vertexColorTransformer); BufferedImage bi = renderImage(viz); String imageType = null; if (mediaType.equals(CustomMediaTypes.IMAGE_JPEG_TYPE)) { imageType = "jpg"; } else if (mediaType.equals(CustomMediaTypes.IMAGE_PNG_TYPE)) { imageType = "png"; } ImageIO.write(bi, imageType, out); }
public static void setupRenderContext(RenderContext<NodeVisualization, EdgeVisualization> ctx) { ctx.setVertexLabelTransformer(NodeVisualization.LABEL); ctx.setVertexDrawPaintTransformer(NodeVisualization.DRAW_COLOR); ctx.setVertexFillPaintTransformer(NodeVisualization.FILL_COLOR); ctx.setVertexShapeTransformer(NodeVisualization.SHAPE); ctx.setVertexStrokeTransformer(NodeVisualization.STROKE); ctx.setEdgeLabelTransformer(EdgeVisualization.LABEL); ctx.setEdgeDrawPaintTransformer(EdgeVisualization.DRAW_COLOR); ctx.setEdgeStrokeTransformer(EdgeVisualization.STROKE); }
/** * check the modifiers. If accepted, use the mouse drag motion * to rotate the graph */ public void mouseDragged(MouseEvent e) { if(down == null) return; VisualizationViewer<?, ?> vv = (VisualizationViewer<?, ?>)e.getSource(); boolean accepted = checkModifiers(e); if(accepted) { MutableTransformer modelTransformer = vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT); // rotate vv.setCursor(cursor); Point2D center = vv.getCenter(); Point2D q = down; Point2D p = e.getPoint(); Point2D v1 = new Point2D.Double(center.getX()-p.getX(), center.getY()-p.getY()); Point2D v2 = new Point2D.Double(center.getX()-q.getX(), center.getY()-q.getY()); double theta = angleBetween(v1, v2); modelTransformer.rotate(theta, vv.getRenderContext().getMultiLayerTransformer().inverseTransform(Layer.VIEW, center)); down.x = e.getX(); down.y = e.getY(); e.consume(); } }
private void checkVertex(V v) { // get the shape to be rendered Shape shape = rc.getVertexShapeTransformer().apply(v); Point2D p = layout.apply(v); p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p); float x = (float)p.getX(); float y = (float)p.getY(); // create a transform that translates to the location of // the vertex to be rendered AffineTransform xform = AffineTransform.getTranslateInstance(x,y); // transform the vertex shape with xtransform shape = xform.createTransformedShape(shape); for(Rectangle2D r : bounds) { if(shape.intersects(r)) { vertices.add(v); } } }
protected boolean vertexHit(RenderContext<V,E> rc, Shape s) { JComponent vv = rc.getScreenDevice(); Rectangle deviceRectangle = null; if(vv != null) { Dimension d = vv.getSize(); deviceRectangle = new Rectangle( 0,0, d.width,d.height); } return rc.getMultiLayerTransformer().getTransformer(Layer.VIEW).transform(s).intersects(deviceRectangle); }
radialLayout.setSize(new Dimension(600,600)); vv = new VisualizationViewer<String,Integer>(treeLayout, new Dimension(600,600)); vv.setBackground(Color.white); vv.getRenderContext().setEdgeShapeTransformer(EdgeShape.line(graph)); vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); vv.getRenderContext().setArrowFillPaintTransformer(Functions.<Paint>constant(Color.lightGray)); rings = new Rings(); }}); JPanel scaleGrid = new JPanel(new GridLayout(1,0)); scaleGrid.setBorder(BorderFactory.createTitledBorder("Zoom")); JPanel controls = new JPanel(); scaleGrid.add(plus); scaleGrid.add(minus);
vv = new VisualizationViewer<>(graph, treeLayoutAlgorithm, new Dimension(600, 600)); vv.setBackground(Color.white); vv.getRenderContext().setEdgeShapeFunction(EdgeShape.line()); vv.getRenderContext().setNodeLabelFunction(Object::toString); vv.getRenderContext().setArrowFillPaintFunction(a -> Color.lightGray); if (e.getStateChange() == ItemEvent.SELECTED) { LayoutAlgorithmTransition.animate(vv, radialLayoutAlgorithm); vv.getRenderContext().getMultiLayerTransformer().setToIdentity(); if (rings == null) { rings = new Rings(vv.getModel().getLayoutModel()); } else { LayoutAlgorithmTransition.animate(vv, treeLayoutAlgorithm); vv.getRenderContext().getMultiLayerTransformer().setToIdentity(); setLtoR(vv); vv.removePreRenderPaintable(rings); }); JPanel scaleGrid = new JPanel(new GridLayout(1, 0)); scaleGrid.setBorder(BorderFactory.createTitledBorder("Zoom")); JPanel controls = new JPanel(); scaleGrid.add(plus); scaleGrid.add(minus);
vv = new VisualizationViewer<Number, Number>(layout, new Dimension(400,400)); vv.getRenderContext().setEdgeDrawPaintTransformer(new PickableEdgePaintTransformer<Number>(vv.getPickedEdgeState(), Color.black, Color.cyan)); vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.cyan)); vv.getRenderContext().setEdgeLabelRenderer(new DefaultEdgeLabelRenderer(Color.cyan)); vv.getRenderContext().setEdgeLabelTransformer(new Function<Number,String>() { URL url = getClass().getResource("/images/lightning-s.gif"); public String apply(Number input) { JPanel modePanel = new JPanel(); modePanel.setBorder(BorderFactory.createTitledBorder("Mouse Mode")); modePanel.add(modeBox); JPanel scaleGrid = new JPanel(new GridLayout(1,0));
radialLayout.setSize(new Dimension(600,600)); Dimension preferredSize = new Dimension(600,600); vv.getRenderContext().setVertexFillPaintTransformer(new PickableVertexPaintTransformer<String>(ps, Color.red, Color.yellow)); vv.getRenderContext().setEdgeDrawPaintTransformer(new PickableEdgePaintTransformer<Integer>(pes, Color.black, Color.cyan)); vv.setBackground(Color.white); vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); vv.getRenderContext().setEdgeShapeTransformer(EdgeShape.line(graph)); vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW)), new ModalLensGraphMouse()); gzsp.setCorner(menubar); JPanel controls = new JPanel(); JPanel zoomControls = new JPanel(new GridLayout(2,1)); zoomControls.setBorder(BorderFactory.createTitledBorder("Zoom")); JPanel hyperControls = new JPanel(new GridLayout(3,2)); hyperControls.setBorder(BorderFactory.createTitledBorder("Examiner Lens"));
Dimension preferredSize = new Dimension(400,400); final VisualizationModel<String,Number> visualizationModel = new DefaultVisualizationModel<String,Number>(layout, preferredSize); vv.getRenderContext().setVertexLabelTransformer( return "<html><center>Vertex<p>"+input; }}, new ToStringLabeller())); vv.getRenderContext().setVertexShapeTransformer(vlasr); vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.red)); vv.getRenderContext().setEdgeDrawPaintTransformer(Functions.<Paint>constant(Color.yellow)); vv.getRenderContext().setEdgeStrokeTransformer(Functions.<Stroke>constant(new BasicStroke(2.5f))); JPanel controls = new JPanel(); JPanel zoomControls = new JPanel(new GridLayout(2,1)); zoomControls.setBorder(BorderFactory.createTitledBorder("Zoom")); zoomControls.add(plus); zoomControls.add(minus);
new Dimension(600,600)); vv.getRenderContext().setVertexLabelTransformer(labeller); vv.getRenderContext().setEdgeLabelTransformer(labeller); vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer()); JPanel controls = new JPanel(); controls.add(plus); controls.add(minus); JComboBox<Mode> modeBox = graphMouse.getModeComboBox(); controls.add(modeBox);
p1 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p1); p2 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p2); float x1 = (float) p1.getX(); float y1 = (float) p1.getY(); float x2 = (float) p2.getX(); float y2 = (float) p2.getY(); Shape s2 = rc.getVertexShapeTransformer().apply(v2); Shape edgeShape = rc.getEdgeShapeTransformer().apply(e); AffineTransform xform = AffineTransform.getTranslateInstance(x1, y1); Rectangle2D s2Bounds = s2.getBounds2D(); xform.scale(s2Bounds.getWidth(),s2Bounds.getHeight()); xform.translate(0, -edgeShape.getBounds2D().getWidth()/2); } else if(rc.getEdgeShapeTransformer() instanceof EdgeShape.Orthogonal) { float dx = x2-x1; float dy = y2-y1; int index = 0; if(rc.getEdgeShapeTransformer() instanceof ParallelEdgeShapeTransformer) { @SuppressWarnings("unchecked") EdgeIndexFunction<V,E> peif = ((ParallelEdgeShapeTransformer<V,E>)rc.getEdgeShapeTransformer()) .getEdgeIndexFunction(); index = peif.getIndex(null, e);
vis.getRenderContext().setEdgeLabelTransformer( new NoStringLabeller ()); vis.getRenderContext().setEdgeShapeTransformer( edgeShapeTransformer ); vis.getRenderContext().setVertexLabelTransformer( new ToStringLabeller<AbstractType> ()); vis.getRenderContext().setVertexShapeTransformer( new VertexShape()); vis.getRenderContext().setVertexFontTransformer( new VertexFont()); vis.getRenderContext().setVertexFillPaintTransformer( new VertexColor( selectedComponent, defaultBgColor, highlightBgcolor )); vis.getRenderContext().setVertexLabelRenderer( new MyVertexLabelRenderer( selectedComponent, defaultFgColor )); vis.getRenderer().getVertexLabelRenderer().setPosition( Position.CNTR ); layout.getSize().getWidth() / 2, layout.getSize().getHeight() / 2), new Dimension( layout.getSize()));
vv.getRenderContext().setVertexLabelTransformer(new UnicodeVertexStringer<Integer>(v)); vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.cyan)); vv.getRenderContext().setEdgeLabelRenderer(new DefaultEdgeLabelRenderer(Color.cyan)); VertexIconShapeTransformer<Integer> vertexIconShapeFunction = new VertexIconShapeTransformer<Integer>(new EllipseVertexShapeTransformer<Integer>()); Function<Integer, Icon> vertexIconFunction = Functions.forMap(iconMap); vv.getRenderContext().setVertexShapeTransformer(vertexIconShapeFunction); vv.getRenderContext().setVertexIconTransformer(vertexIconFunction); loadImages(v, iconMap); vertexIconShapeFunction.setIconMap(iconMap); vv.getRenderContext().setVertexFillPaintTransformer(new PickableVertexPaintTransformer<Integer>(vv.getPickedVertexState(), Color.white, Color.yellow)); vv.getRenderContext().setEdgeDrawPaintTransformer(new PickableEdgePaintTransformer<Number>(vv.getPickedEdgeState(), Color.black, Color.lightGray)); lo.setSelected(true); JPanel controls = new JPanel(); controls.add(plus); controls.add(minus); controls.add(lo); controls.add(gm.getModeComboBox());
rectangle = ((MutableTransformerDecorator)vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW)).getDelegate().inverseTransform(rectangle); if(p == null) continue; Shape shape = vv.getRenderContext().getVertexShapeTransformer().apply(v); AffineTransform.getTranslateInstance(p.getX(), p.getY()); shape = xform.createTransformedShape(shape); shape = vv.getRenderContext().getMultiLayerTransformer().transform(shape); Rectangle2D bounds = shape.getBounds2D(); p.setLocation(bounds.getCenterX(),bounds.getCenterY()); if(rectangle.contains(p)) { pickedVertices.add(v);
Object ann = annotation.getAnnotation(); if(ann instanceof Shape) { Point2D ip = rc.getMultiLayerTransformer().inverseTransform(p); Shape shape = (Shape)ann; if(shape.contains(ip)) { Rectangle2D shapeBounds = shape.getBounds2D(); Point2D shapeCenter = new Point2D.Double(shapeBounds.getCenterX(), shapeBounds.getCenterY()); double distanceSq = shapeCenter.distanceSq(ip); if(distanceSq < closestDistance) { closestDistance = distanceSq; Point2D ip = rc.getMultiLayerTransformer().inverseTransform(Layer.VIEW, p); Point2D ap = annotation.getLocation(); String label = (String)ann; Component component = prepareRenderer(rc, annotationRenderer, label); AffineTransform base = new AffineTransform(transformer.getTransform()); double rotation = transformer.getRotation(); AffineTransform.getRotateInstance(-rotation, ap.getX(), ap.getY()); base.concatenate(unrotate); Shape componentBoundsShape = base.createTransformedShape(componentBounds); Point2D componentCenter = new Point2D.Double(componentBoundsShape.getBounds().getCenterX(), componentBoundsShape.getBounds().getCenterY()); if(componentBoundsShape.contains(ip)) {
public void export(final DirectedGraph<ElementName, Dependency> g) throws IOException { final Dimension d = new Dimension(this.width, this.height); final Layout<ElementName, Dependency> layout = pickLayout(g, d); final VisualizationImageServer<ElementName, Dependency> viz = new VisualizationImageServer<ElementName, Dependency>( layout, d); final RenderContext<ElementName, Dependency> context = viz .getRenderContext(); context.setEdgeLabelTransformer(new EdgeLabeller()); context.setVertexLabelTransformer(new VertexLabeller()); final VertexRenderer vertexRenderer = new VertexRenderer( viz.getRenderContext()); viz.getRenderContext().setVertexShapeTransformer(vertexRenderer); viz.getRenderer().setVertexLabelRenderer(vertexRenderer); context.setVertexFillPaintTransformer(fillVertex()); context.setEdgeDrawPaintTransformer(fillEdge(g)); context.setEdgeLabelClosenessTransformer(closenessTransformer()); context.setEdgeStrokeTransformer(edgeWeight()); context.setEdgeArrowStrokeTransformer(edgeWeight()); context.setArrowFillPaintTransformer(fillEdge(g)); context.setArrowDrawPaintTransformer(fillEdge(g)); viz.setPreferredSize(new Dimension(this.width, this.height)); viz.setBackground(new Color(1, 1, 1, 0)); final SVGGraphics2D svgGenerator = new SVGGraphics2D(this.out, d); svgGenerator.writeHeader(); viz.paintAll(svgGenerator); svgGenerator.writeTrailer(); svgGenerator.dispose(); }
public void mouseDragged(MouseEvent e) { if(locked == false) { VisualizationViewer<V,E> vv = (VisualizationViewer<V, E>)e.getSource(); if(vertex != null) { Point p = e.getPoint(); Point2D graphPoint = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(p); Point2D graphDown = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(down); Layout<V,E> layout = vv.getGraphLayout(); double dx = graphPoint.getX()-graphDown.getX(); double dy = graphPoint.getY()-graphDown.getY(); PickedState<V> ps = vv.getPickedVertexState(); Point2D out = e.getPoint(); if(e.getModifiers() == this.addToSelectionModifiers || e.getModifiers() == modifiers) { rect.setFrameFromDiagonal(down,out);
private static VisualizationViewer<String, Edge> createVisualizationViewer( Graph<String, Edge> graph) { FRLayout<String, Edge> layout = new FRLayout<String, Edge>(graph, new Dimension(800, 600)); while (!layout.done()) layout.step(); new Dimension(800, 600)) { vv.getRenderContext().setVertexLabelTransformer(s -> s); vv.getRenderContext().setVertexFillPaintTransformer(vertex -> vertex.equals("Created") ? Color.decode("#B5D9E6") : Color.decode("#FFF1BC")); vv.getRenderContext().setVertexDrawPaintTransformer(vertex -> Color.black); vv.getRenderContext().setVertexShapeTransformer(createVertexShapeTransformer(layout)); vv.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.CNTR); vv.getRenderContext().setEdgeLabelTransformer(edge -> " " + edge.name + " "); vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.QuadCurve<String, Edge>()); vv.getRenderer().setEdgeLabelRenderer(new MyEdgeLabelRenderer<>(-10, Color.white));
public void paint(Graphics g) { g.setColor(Color.gray); Graphics2D g2d = (Graphics2D)g; Point2D center = radialLayout.getCenter(); Ellipse2D ellipse = new Ellipse2D.Double(); for(double d : depths) { ellipse.setFrameFromDiagonal(center.getX()-d, center.getY()-d, center.getX()+d, center.getY()+d); Shape shape = vv.getRenderContext().getMultiLayerTransformer().transform(ellipse); g2d.draw(shape); } }