public static <N, E> void apply( VisualizationServer<N, E> visualizationServer, LayoutAlgorithm<N> endLayoutAlgorithm) { visualizationServer.getModel().setLayoutAlgorithm(endLayoutAlgorithm); }
public static <N, E> void animate( VisualizationServer<N, E> visualizationServer, LayoutAlgorithm<N> endLayoutAlgorithm) { fireLayoutStateChanged(visualizationServer.getModel().getLayoutModel(), true); LayoutAlgorithm<N> transitionLayoutAlgorithm = new AnimationLayoutAlgorithm<>(visualizationServer, endLayoutAlgorithm); visualizationServer.getModel().setLayoutAlgorithm(transitionLayoutAlgorithm); }
private Spatial<E> createEdgeSpatial(VisualizationServer<N, E> visualizationServer) { switch (getEdgeSpatialSupportPreference()) { case RTREE: return new SpatialRTree.Edges<E, N>( visualizationServer.getModel(), new BoundingRectangleCollector.Edges<>( visualizationServer.getRenderContext(), visualizationServer.getModel()), SplitterContext.of(new QuadraticLeafSplitter(), new QuadraticSplitter())); case NONE: default: return new Spatial.NoOp.Edge<E, N>(visualizationServer.getModel()); } } }
EndpointPair<N> endpoints = vv.getModel().getNetwork().incidentNodes(e); N v1 = endpoints.nodeU(); N v2 = endpoints.nodeV(); boolean isLoop = v1.equals(v2); LayoutModel<N> layoutModel = vv.getModel().getLayoutModel(); Point p1 = layoutModel.apply(v1); Point p2 = layoutModel.apply(v2); vv.getRenderContext() .getEdgeShapeFunction() .apply(Context.getInstance(vv.getModel().getNetwork(), e)); if (isLoop) {
private Spatial<N> createNodeSpatial(VisualizationServer<N, E> visualizationServer) { switch (getNodeSpatialSupportPreference()) { case RTREE: return new SpatialRTree.Nodes<>( visualizationServer.getModel(), new BoundingRectangleCollector.Nodes<>( visualizationServer.getRenderContext(), visualizationServer.getModel()), SplitterContext.of(new RStarLeafSplitter<>(), new RStarSplitter<>())); case GRID: return new SpatialGrid<>(visualizationServer.getModel().getLayoutModel()); case QUADTREE: return new SpatialQuadTree<>(visualizationServer.getModel().getLayoutModel()); case NONE: default: return new Spatial.NoOp.Node<N>(visualizationServer.getModel().getLayoutModel()); } }
/** * Returns <code>true</code> if this edge and its endpoints in this graph are all included in the * collections of elements to be rendered, and <code>false</code> otherwise. * * @return <code>true</code> if this edge and its endpoints are all included in the collections of * elements to be rendered, <code>false</code> otherwise. */ protected boolean isEdgeRendered(E edge) { Predicate<N> nodeIncludePredicate = vv.getRenderContext().getNodeIncludePredicate(); Predicate<E> edgeIncludePredicate = vv.getRenderContext().getEdgeIncludePredicate(); Network<N, E> g = vv.getModel().getNetwork(); if (edgeIncludePredicate != null && !edgeIncludePredicate.test(edge)) { return false; } EndpointPair<N> endpoints = g.incidentNodes(edge); N v1 = endpoints.nodeU(); N v2 = endpoints.nodeV(); return nodeIncludePredicate == null || (nodeIncludePredicate.test(v1) && nodeIncludePredicate.test(v2)); }
protected Collection<E> getFilteredEdges() { Set<E> edges = vv.getModel().getNetwork().edges(); return edgesAreFiltered() ? Sets.filter(edges, vv.getRenderContext().getEdgeIncludePredicate()::test) : edges; }
protected Collection<N> getFilteredNodes() { Set<N> nodes = vv.getModel().getNetwork().nodes(); return nodesAreFiltered() ? Sets.filter(nodes, vv.getRenderContext().getNodeIncludePredicate()::test) : nodes; }
/** * each step of the animation moves every pouit 1/count of the distance from its old location to * its new location */ public void step() { for (N v : layoutModel.getGraph().nodes()) { Point tp = layoutModel.apply(v); Point fp = transitionLayoutModel.apply(v); double dx = (fp.x - tp.x) / (count - counter); double dy = (fp.y - tp.y) / (count - counter); log.trace("dx:{},dy:{}", dx, dy); layoutModel.set(v, tp.x + dx, tp.y + dy); } counter++; if (counter >= count) { done = true; this.transitionLayoutModel.stopRelaxer(); this.visualizationServer.getModel().setLayoutAlgorithm(endLayoutAlgorithm); } }
public void visit(LayoutModel<N> layoutModel) { // save off the existing layoutModel this.layoutModel = layoutModel; // create a LayoutModel to hold points for the transition this.transitionLayoutModel = LoadingCacheLayoutModel.<N>builder() .setGraph(visualizationServer.getModel().getNetwork().asGraph()) .setLayoutModel(layoutModel) .setInitializer(layoutModel) .build(); // start off the transitionLayoutModel with the endLayoutAlgorithm transitionLayoutModel.accept(endLayoutAlgorithm); }
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; }
public Point2D transform(VisualizationServer<N, E> vv, Point2D p) { 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) { // use all layers p = multiLayerTransformer.transform(p); } else if (layoutTransformer instanceof LensTransformer) { // apply the shape changer 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(); p = shapeChanger.transform(layoutDelegate.transform(p)); } else { // use the default p = multiLayerTransformer.transform(Layer.LAYOUT, p); } return p; }
/** * Overriden to perform lens effects when inverse transforming from view to layout. * * @param vv * @param shape * @return */ @Override public Shape inverseTransform(VisualizationServer<N, E> vv, Shape shape) { MultiLayerTransformer multiLayerTransformer = vv.getRenderContext().getMultiLayerTransformer(); MutableTransformer viewTransformer = multiLayerTransformer.getTransformer(Layer.VIEW); MutableTransformer layoutTransformer = multiLayerTransformer.getTransformer(Layer.LAYOUT); if (layoutTransformer instanceof LensTransformer) { // apply the shape changer LayoutModel<N> layoutModel = vv.getModel().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 = layoutDelegate.inverseTransform(shapeChanger.inverseTransform(shape)); } else { // if the viewTransformer is either a LensTransformer or the default shape = multiLayerTransformer.inverseTransform(shape); } return shape; } }