/** * @see edu.uci.ics.jung.algorithms.layout.Layout#transform(Object) */ public Point2D transform(V v) { return delegate.transform(v); }
@Override public Point2D transform(V v) { Point2D point = delegate.transform(v); return new Point.Double(point.getX() + xOffset, point.getY() + yOffset); } };
private void shift(final Layout<ElementName, Dependency> l, final int dx, final int dy) { for (final ElementName each : l.getGraph().getVertices()) { final Point2D point = l.transform(each); point.setLocation(point.getX() + dx, point.getY() + dy); } } }
private void copyOldLayout() { for (ONDEXConcept node : graph.getVertices()) { Point2D coord = oldLayouter.transform(node); Point2D coordNew = transform(node); coordNew.setLocation(coord.getX(), coord.getY()); } }
private void shift(final Layout<ElementName, Dependency> l, final int dx, final int dy) { for (final ElementName each : l.getGraph().getVertices()) { final Point2D point = l.transform(each); point.setLocation(point.getX() + dx, point.getY() + dy); } } }
private void shift(final Layout<ElementName, Dependency> l, final int dx, final int dy) { for (final ElementName each : l.getGraph().getVertices()) { final Point2D point = l.transform(each); point.setLocation(point.getX() + dx, point.getY() + dy); } } }
/** * Returns the location of the vertex. The location is specified first * by the sublayouts, and then by the base layout if no sublayouts operate * on this vertex. * @return the location of the vertex * @see org.apache.commons.collections15.Transformer#transform(java.lang.Object) */ public Point2D transform(V v) { boolean wasInSublayout = false; for(Layout<V,E> layout : layouts.keySet()) { if(layout.getGraph().getVertices().contains(v)) { wasInSublayout = true; Point2D center = layouts.get(layout); // transform by the layout itself, but offset to the // center of the sublayout Dimension d = layout.getSize(); AffineTransform at = AffineTransform.getTranslateInstance(center.getX()-d.width/2, center.getY()-d.height/2); return at.transform(layout.transform(v),null); } } if(wasInSublayout == false) { return delegate.transform(v); } return null; }
/** * Calculates the bounds of all nodes in a given viewer. * * @return Point2D[] min bounds, max bounds */ private Point2D[] calcBounds() { Point2D[] result = new Point2D[2]; Point2D min = null; Point2D max = null; Layout<ONDEXConcept, ONDEXRelation> layout = viewer.getVisualizationViewer().getGraphLayout(); Iterator<ONDEXConcept> it = layout.getGraph().getVertices().iterator(); while (it.hasNext()) { Point2D point = layout.transform(it.next()); if (min == null) { min = new Point2D.Double(0, 0); min.setLocation(point); } if (max == null) { max = new Point2D.Double(0, 0); max.setLocation(point); } min.setLocation(Math.min(min.getX(), point.getX()), Math.min(min.getY(), point.getY())); max.setLocation(Math.max(max.getX(), point.getX()), Math.max(max.getY(), point.getY())); } result[0] = min; result[1] = max; return result; }
public Collection<V> getVertices(Layout<V,E> layout, Shape rectangle) { Set<V> pickedVertices = new HashSet<V>(); while(true) { try { for(V v : layout.getGraph().getVertices()) { Point2D p = layout.transform(v); if(rectangle.contains(p)) { pickedVertices.add(v); } } break; } catch(ConcurrentModificationException cme) {} } return pickedVertices; }
/** * Gets the vertex nearest to the location of the (x,y) location selected, * within a distance of <tt>maxDistance</tt>. Iterates through all * visible vertices and checks their distance from the click. Override this * method to provde a more efficient implementation. * @param x * @param y * @param maxDistance temporarily overrides member maxDistance */ public V getVertex(Layout<V,E> layout, double x, double y, double maxDistance) { double minDistance = maxDistance * maxDistance; V closest = null; while(true) { try { for(V v : layout.getGraph().getVertices()) { Point2D p = layout.transform(v); double dx = p.getX() - x; double dy = p.getY() - y; double dist = dx * dx + dy * dy; if (dist < minDistance) { minDistance = dist; closest = v; } } break; } catch(ConcurrentModificationException cme) {} } return closest; }
double min = Double.POSITIVE_INFINITY, max = Double.NEGATIVE_INFINITY; for (ONDEXConcept node : nodes) { Point2D coord = oldLayouter.transform(node); if (coord.getY() < min) min = coord.getY(); rest.removeAll(nodes); for (ONDEXConcept node : rest) { Point2D coord = oldLayouter.transform(node); double y = coord.getY(); double x = coord.getX(); Point2D coord = oldLayouter.transform(node); double y = coord.getY(); double x = coord.getX();
public void Animator(String vertex) { Layout<String, String> layout = vv.getGraphLayout(); Point2D q = layout.transform(vertex); Point2D lvc = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(vv.getCenter()); final double dx = (lvc.getX() - q.getX()) / 10; final double dy = (lvc.getY() - q.getY()) / 10; Runnable animator = new Runnable() { public void run() { for (int i = 0; i < 10; i++) { vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).translate(dx, dy); try { Thread.sleep(100); } catch (InterruptedException ex) { } } } }; Thread thread = new Thread(animator); thread.start(); }
public void EdgeAnimator(Pair edge) { Layout<String, String> layout = vv.getGraphLayout(); String first = (String) edge.getFirst(); String second = (String) edge.getSecond(); Point2D q = layout.transform(first); Point2D y = layout.transform(second); Line2D line = new Line2D.Double(q.getX(), q.getY(), y.getX(), y.getY()); Point2D lvc = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(vv.getCenter()); final double dx = (lvc.getX() - line.getBounds().getCenterX()) / 10; final double dy = (lvc.getY() - line.getBounds().getCenterY()) / 10; Runnable edgeAnimator = new Runnable() { public void run() { for (int i = 0; i < 10; i++) { vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).translate(dx, dy); try { Thread.sleep(100); } catch (InterruptedException ex) { } } } }; Thread thread = new Thread(edgeAnimator); thread.start(); }
/** * Writes y:Geometry tag with node positions. * * @param vertex * V * @param xmlw * XMLStreamWriter2 * @throws XMLStreamException */ private void writeGeometry(ONDEXConcept vertex, XMLStreamWriter2 xmlw) throws XMLStreamException { // get coordinates of node Point2D coords = viewer.getGraphLayout().transform(vertex); // get shape of node Shape shape = viewer.getRenderContext().getVertexShapeTransformer() .transform(vertex); Rectangle bounds = shape.getBounds(); xmlw.writeStartElement("y:Geometry"); xmlw.writeAttribute("x", String.valueOf(coords.getX())); xmlw.writeAttribute("y", String.valueOf(coords.getY())); xmlw.writeAttribute("width", String.valueOf(bounds.getWidth())); xmlw.writeAttribute("height", String.valueOf(bounds.getHeight())); xmlw.writeEndElement(); }
@Override protected void paintIconForVertex(RenderContext<ONDEXConcept, ONDEXRelation> rc, ONDEXConcept v, Layout<ONDEXConcept, ONDEXRelation> layout) { super.paintIconForVertex(rc, v, layout); // check for flagged drawing boolean flagged = false; AttributeName anFlag = graph.getMetaData().getAttributeName(AppearanceSynchronizer.FLAGGED); if (anFlag != null && v.getAttribute(anFlag) != null) { flagged = (Boolean) v.getAttribute(anFlag).getValue(); } // draw arrow / flag if (flagged) { boolean vertexHit = true; // get the shape to be rendered Shape shape = createArrow(); Point2D p = layout.transform(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); vertexHit = vertexHit(rc, shape); // rc.getViewTransformer().transform(shape).intersects(deviceRectangle); if (vertexHit) { paintShapeForVertex(rc, v, shape); } } }
public void labelVertex(final RenderContext<ElementName, Dependency> rc, final Layout<ElementName, Dependency> layout, final ElementName v, final String label) { final Graph<ElementName, Dependency> graph = layout.getGraph(); if (rc.getVertexIncludePredicate().evaluate( Context.<Graph<ElementName, Dependency>, ElementName> getInstance( graph, v)) == false) { return; } final GraphicsDecorator g = rc.getGraphicsContext(); final Component component = prepareRenderer(rc, rc.getVertexLabelRenderer(), label, rc.getPickedVertexState().isPicked(v), v); final Dimension d = component.getPreferredSize(); final int h_offset = -d.width / 2; final int v_offset = -d.height / 2; Point2D p = layout.transform(v); p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p); final int x = (int) p.getX(); final int y = (int) p.getY(); g.draw(component, rc.getRendererPane(), x + h_offset, y + v_offset, d.width, d.height, true); }
public void labelVertex(final RenderContext<ElementName, Dependency> rc, final Layout<ElementName, Dependency> layout, final ElementName v, final String label) { final Graph<ElementName, Dependency> graph = layout.getGraph(); if (rc.getVertexIncludePredicate().evaluate( Context.<Graph<ElementName, Dependency>, ElementName> getInstance( graph, v)) == false) { return; } final GraphicsDecorator g = rc.getGraphicsContext(); final Component component = prepareRenderer(rc, rc.getVertexLabelRenderer(), label, rc.getPickedVertexState().isPicked(v), v); final Dimension d = component.getPreferredSize(); final int h_offset = -d.width / 2; final int v_offset = -d.height / 2; Point2D p = layout.transform(v); p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p); final int x = (int) p.getX(); final int y = (int) p.getY(); g.draw(component, rc.getRendererPane(), x + h_offset, y + v_offset, d.width, d.height, true); }
public void labelVertex(final RenderContext<ElementName, Dependency> rc, final Layout<ElementName, Dependency> layout, final ElementName v, final String label) { final Graph<ElementName, Dependency> graph = layout.getGraph(); if (rc.getVertexIncludePredicate().evaluate( Context.<Graph<ElementName, Dependency>, ElementName> getInstance( graph, v)) == false) { return; } final GraphicsDecorator g = rc.getGraphicsContext(); final Component component = prepareRenderer(rc, rc.getVertexLabelRenderer(), label, rc.getPickedVertexState().isPicked(v), v); final Dimension d = component.getPreferredSize(); final int h_offset = -d.width / 2; final int v_offset = -d.height / 2; Point2D p = layout.transform(v); p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p); final int x = (int) p.getX(); final int y = (int) p.getY(); g.draw(component, rc.getRendererPane(), x + h_offset, y + v_offset, d.width, d.height, true); }