Search in sources :

Example 1 with LinearGradient

use of org.gephi.ui.utils.GradientUtils.LinearGradient in project gephi by gephi.

the class HeatMap method getListeners.

@Override
public ToolEventListener[] getListeners() {
    listeners = new ToolEventListener[1];
    listeners[0] = new NodeClickEventListener() {

        @Override
        public void clickNodes(Node[] nodes) {
            try {
                Node n = nodes[0];
                Color[] colors;
                float[] positions;
                if (heatMapPanel.isUsePalette()) {
                    colors = heatMapPanel.getSelectedPalette().getColors();
                    positions = heatMapPanel.getSelectedPalette().getPositions();
                    dontPaintUnreachable = true;
                } else {
                    gradientColors = colors = heatMapPanel.getGradientColors();
                    gradientPositions = positions = heatMapPanel.getGradientPositions();
                    dontPaintUnreachable = heatMapPanel.isDontPaintUnreachable();
                }
                GraphController gc = Lookup.getDefault().lookup(GraphController.class);
                AbstractShortestPathAlgorithm algorithm;
                if (gc.getGraphModel().isDirected()) {
                    DirectedGraph graph = gc.getGraphModel().getDirectedGraphVisible();
                    algorithm = new BellmanFordShortestPathAlgorithm(graph, n);
                    algorithm.compute();
                } else {
                    Graph graph = gc.getGraphModel().getGraphVisible();
                    algorithm = new DijkstraShortestPathAlgorithm(graph, n);
                    algorithm.compute();
                }
                // Color
                LinearGradient linearGradient = new LinearGradient(colors, positions);
                // Algorithm
                double maxDistance = algorithm.getMaxDistance();
                if (!dontPaintUnreachable) {
                    // +1 to have the maxdistance nodes a ratio<1
                    maxDistance++;
                }
                if (maxDistance > 0) {
                    for (Entry<Node, Double> entry : algorithm.getDistances().entrySet()) {
                        Node node = entry.getKey();
                        if (!Double.isInfinite(entry.getValue())) {
                            float ratio = (float) (entry.getValue() / maxDistance);
                            Color c = linearGradient.getValue(ratio);
                            node.setColor(c);
                        } else if (!dontPaintUnreachable) {
                            Color c = colors[colors.length - 1];
                            node.setColor(c);
                        }
                    }
                }
                Color c = colors[0];
                n.setColor(c);
                heatMapPanel.setStatus(NbBundle.getMessage(HeatMap.class, "HeatMap.status.maxdistance") + new DecimalFormat("#.##").format(algorithm.getMaxDistance()));
            } catch (Exception e) {
                Logger.getLogger("").log(Level.SEVERE, "", e);
            }
        }
    };
    return listeners;
}
Also used : Node(org.gephi.graph.api.Node) Color(java.awt.Color) DecimalFormat(java.text.DecimalFormat) DijkstraShortestPathAlgorithm(org.gephi.algorithms.shortestpath.DijkstraShortestPathAlgorithm) AbstractShortestPathAlgorithm(org.gephi.algorithms.shortestpath.AbstractShortestPathAlgorithm) BellmanFordShortestPathAlgorithm(org.gephi.algorithms.shortestpath.BellmanFordShortestPathAlgorithm) LinearGradient(org.gephi.ui.utils.GradientUtils.LinearGradient) Entry(java.util.Map.Entry) DirectedGraph(org.gephi.graph.api.DirectedGraph) Graph(org.gephi.graph.api.Graph) DirectedGraph(org.gephi.graph.api.DirectedGraph) NodeClickEventListener(org.gephi.tools.spi.NodeClickEventListener) GraphController(org.gephi.graph.api.GraphController)

Aggregations

Color (java.awt.Color)1 DecimalFormat (java.text.DecimalFormat)1 Entry (java.util.Map.Entry)1 AbstractShortestPathAlgorithm (org.gephi.algorithms.shortestpath.AbstractShortestPathAlgorithm)1 BellmanFordShortestPathAlgorithm (org.gephi.algorithms.shortestpath.BellmanFordShortestPathAlgorithm)1 DijkstraShortestPathAlgorithm (org.gephi.algorithms.shortestpath.DijkstraShortestPathAlgorithm)1 DirectedGraph (org.gephi.graph.api.DirectedGraph)1 Graph (org.gephi.graph.api.Graph)1 GraphController (org.gephi.graph.api.GraphController)1 Node (org.gephi.graph.api.Node)1 NodeClickEventListener (org.gephi.tools.spi.NodeClickEventListener)1 LinearGradient (org.gephi.ui.utils.GradientUtils.LinearGradient)1