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.