0

I am using graphstream library in order to build an application. When i zoom the graph, using view.getCamera().setPercent(), some nodes will be hidden, until now there no problem. My problem is when tow nodes connected by an edge are hidden after zooming the graph, its edge will be also hidden. I want to keep this edge as appeared even if its extremities are hidden. I tried this code to explain my problem:

public class Zoom {

    public static void main(String[] args) {

        //create a simple graph
        Graph graph = new SingleGraph("Zoom");
        graph.setAttribute("ui.stylesheet", "node{size:30px; fill-color:red; text-size:20;}");
        Node[] nodes = new Node[2];

        for (int i = 0; i < 2; i++) {
            nodes[i] = graph.addNode("" + i);
            nodes[i].setAttribute("ui.label", "" + i);
        }
        graph.addEdge("01", "0", "1");

        //create the viewer
        Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        viewer.enableAutoLayout();
        ViewPanel view_panel = viewer.addDefaultView(false);

        //create the main frame
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout());
        frame.setLocation(new Point(200, 200));
        frame.setPreferredSize(new Dimension(600, 400));

        //the function responsible of zooming
        frame.addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent mwe) {
                double scaleZoom;
                if (Event.ALT_MASK != 0) {
                    scaleZoom = viewer.getDefaultView().getCamera().getViewPercent();
                    if (mwe.getWheelRotation() > 0) {
                        scaleZoom += 0.05;
                        viewer.getDefaultView().getCamera().setViewPercent(scaleZoom);
                    } else if (mwe.getWheelRotation() < 0) {
                        if (scaleZoom > 0.05) {
                            scaleZoom -= 0.05;
                            viewer.getDefaultView().getCamera().setViewPercent(scaleZoom);
                        }
                    }
                }
            }
        });
        view_panel.setPreferredSize(new Dimension(frame.getPreferredSize()));
        frame.add(view_panel);
        frame.pack();
        frame.setVisible(true);
    }
}

Any help please.

1 Answers1

0

Unfortunately, when the two component of an edge disapear, the edge hide too. This is a natural behavior for memory saving, I don't think you can avoid that.

Also, for a regular zoom, graphstream handle it naturally with page up/down key, you don't have to make it yourself.

H.Brahimi
  • 254
  • 1
  • 7