Translate MouseEvent coordinates to GraphStream's element coordinates

53 Views Asked by At

tl;dr how to get closest GraphicElement coordinates given MouseEvent coordinates?

I created a big graph that represents the road map of a certain region using Graphstream and I'm trying to find the closest node to an occuring MouseEvent.

My problem is that the MouseEvent coordinates are relative to the frame resulotion while my GraphicElement's coordinates are longitude and latitude of real location.

For example, when clicking on a Node and get it using MouseManager with the following code:

    @Override
    public void mouseReleased(MouseEvent e) {
        super.mouseReleased(e);
        GraphicElement graphicElement = view.findNodeOrSpriteAt(e.getX(), e.getY());
        if(graphicElement!= null){
            System.out.println( "node "+graphicElement.getLabel()+ ", xy ("+graphicElement.getX() +","+ graphicElement.getY()+").");
            System.out.println( "MouseEvent xy ("+e.getX() +","+e.getY()+").");
        }
    }

the output will be:

node 2, xy (34.7811627,32.0528169).
MouseEvent xy (281,489).

Is there a GraphStream built-in method or someother way I can translate the frame's coordinates to my coordinates?

1

There are 1 best solutions below

0
Kfir Ettinger On BEST ANSWER

After a lot of reading and debuging while trying to understand how view.findNodeOrSpriteAt(); is working I've found a solution.

The Camera class (view.getCamera( )) have methods to do exactly what I was looking for.
transformGuToPx(double x, double y, double z) -> coordinates to pixels.
transformPxToGu(double x, double y) -> pixels to coordinates.

So, using them I can convert the MouseEvent coordinates:

view.getCamera().transformPxToGu(mouseEvent.getX(), mouseEvent.getY());