From f8f75e639811cab7f7665d75b944b544677ecb9d Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Thu, 12 Dec 2013 18:29:05 +0100 Subject: [PATCH 1/5] improve GraphStreamViewer --- .../analysis/toolbox/GraphStreamViewer.java | 87 ++++++++++++------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java index bcd4b071..0b31fae5 100644 --- a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java @@ -1,5 +1,17 @@ package jsprit.analysis.toolbox; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.text.MessageFormat; + +import javax.swing.BoxLayout; +import javax.swing.JFormattedTextField; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.JTextField; + import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Service; @@ -69,22 +81,6 @@ public class GraphStreamViewer { public static enum Label { NO_LABEL, ID } - -// private static class BoundingBox { -// final double minX; -// final double minY; -// final double maxX; -// final double maxY; -// -// public BoundingBox(double minX, double minY, double maxX, double maxY) { -// super(); -// this.minX = minX; -// this.minY = minY; -// this.maxX = maxX; -// this.maxY = maxY; -// } -// -// } private static class Center { final double x; @@ -108,8 +104,6 @@ public class GraphStreamViewer { private Center center; -// private BoundingBox boundingBox; - private VehicleRoutingProblem vrp; private VehicleRoutingProblemSolution solution; @@ -166,36 +160,63 @@ public class GraphStreamViewer { public void display(){ -// JFrame jframe = new JFrame(); + JFrame jframe = new JFrame(); + JPanel basic = new JPanel(); + basic.setLayout(new BoxLayout(basic,BoxLayout.Y_AXIS)); + + JPanel topPanel = new JPanel(new BorderLayout()); + topPanel.setMaximumSize(new Dimension(450, 0)); + + MessageFormat format = new MessageFormat("{0,number,00}:{1,number,00}:{2,number,00}"); + JFormattedTextField textField = new JFormattedTextField(format); + textField.setEditable(false); + textField.setMaximumSize(new Dimension(100,30)); + textField.setMinimumSize(new Dimension(80,30)); + textField.setHorizontalAlignment(JTextField.LEFT); + textField.setText("00:01:56"); + + topPanel.add(textField, BorderLayout.WEST); + + + + basic.add(topPanel); + + + System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); Graph g = new MultiGraph("g"); g.addAttribute("ui.quality"); g.addAttribute("ui.antialias"); g.addAttribute("ui.stylesheet", styleSheet); - Viewer viewer; -// viewer.getDefaultView().setLayout(new BorderLayout()); + Viewer viewer = new Viewer(g,Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD); + View view = viewer.addDefaultView(false); + + basic.add(view); + + // viewer.getDefaultView().setLayout(new BorderLayout()); // -// MessageFormat format = new MessageFormat("{0,number,00}:{1,number,00}:{2,number,00}"); + jframe.add(basic); //// -// JFormattedTextField textField = new JFormattedTextField(format); -// textField.setEditable(false); -// textField.setMaximumSize(new Dimension(100,30)); -// textField.setMinimumSize(new Dimension(80,30)); -// textField.setHorizontalAlignment(JTextField.LEFT); -// textField.setText("00:01:56"); -// textField.s -// viewer.getDefaultView().add(textField,BorderLayout.NORTH,); + jframe.setVisible(true); + jframe.setSize(800,600); + jframe.setLocationRelativeTo(null); + jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); if(center != null){ - viewer = g.display(false); - View view = viewer.getDefaultView(); +// viewer = g.display(false); +// View view = viewer.getDefaultView(); view.resizeFrame(800, 600); view.getCamera().setViewCenter(center.x, center.y, 0); view.getCamera().setViewPercent(zoomFactor); } - else viewer = g.display(); +// else viewer = g.display(); + + + +// viewer.getDefaultView().add(textField,BorderLayout.NORTH); +// viewer.getDefaultView().; if(!enableAutoLayout) viewer.disableAutoLayout(); From 28116c239e3f0d2298ab5b5489539c0593eadfa0 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Mon, 16 Dec 2013 08:42:48 +0100 Subject: [PATCH 2/5] improve viewer --- .../analysis/toolbox/GraphStreamViewer.java | 274 +++++++++++++++--- 1 file changed, 230 insertions(+), 44 deletions(-) diff --git a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java index 0b31fae5..aa7feef7 100644 --- a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java @@ -1,16 +1,18 @@ package jsprit.analysis.toolbox; -import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; -import java.text.MessageFormat; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JFormattedTextField; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JSeparator; -import javax.swing.JTextField; import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.job.Job; @@ -28,9 +30,13 @@ import org.graphstream.graph.Edge; import org.graphstream.graph.Graph; import org.graphstream.graph.Node; import org.graphstream.graph.implementations.MultiGraph; +import org.graphstream.ui.graphicGraph.GraphicGraph; +import org.graphstream.ui.swingViewer.LayerRenderer; import org.graphstream.ui.swingViewer.View; import org.graphstream.ui.swingViewer.Viewer; + + public class GraphStreamViewer { protected static String styleSheet = @@ -159,67 +165,78 @@ public class GraphStreamViewer { } public void display(){ + System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); JFrame jframe = new JFrame(); - JPanel basic = new JPanel(); - basic.setLayout(new BoxLayout(basic,BoxLayout.Y_AXIS)); + JPanel basicPanel = new JPanel(); + basicPanel.setLayout(new BoxLayout(basicPanel, BoxLayout.Y_AXIS)); - JPanel topPanel = new JPanel(new BorderLayout()); - topPanel.setMaximumSize(new Dimension(450, 0)); + //result-panel + JPanel resultPanel = createResultPanel(); + //legend-panel + final JPanel legendPanel = createLegendPanel(); - MessageFormat format = new MessageFormat("{0,number,00}:{1,number,00}:{2,number,00}"); - JFormattedTextField textField = new JFormattedTextField(format); - textField.setEditable(false); - textField.setMaximumSize(new Dimension(100,30)); - textField.setMinimumSize(new Dimension(80,30)); - textField.setHorizontalAlignment(JTextField.LEFT); - textField.setText("00:01:56"); - - topPanel.add(textField, BorderLayout.WEST); - - - - basic.add(topPanel); - - - - System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); + //graphstream-panel Graph g = new MultiGraph("g"); g.addAttribute("ui.quality"); g.addAttribute("ui.antialias"); g.addAttribute("ui.stylesheet", styleSheet); + JPanel graphStreamPanel = new JPanel(); + graphStreamPanel.setPreferredSize(new Dimension(800,460)); + graphStreamPanel.setBackground(Color.WHITE); + + JPanel graphStreamBackPanel = new JPanel(); + graphStreamBackPanel.setPreferredSize(new Dimension(700,450)); + graphStreamBackPanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); + graphStreamBackPanel.setBackground(Color.WHITE); + Viewer viewer = new Viewer(g,Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD); View view = viewer.addDefaultView(false); + view.setPreferredSize(new Dimension(698,440)); + view.setForeLayoutRenderer(new LayerRenderer() { + + @Override + public void render(Graphics2D graphics, GraphicGraph graph, double px2Gu, + int widthPx, int heightPx, double minXGu, double minYGu, + double maxXGu, double maxYGu) { + legendPanel.repaint(); + + } + }); - basic.add(view); + graphStreamBackPanel.add(view); - // viewer.getDefaultView().setLayout(new BorderLayout()); -// - jframe.add(basic); -//// - jframe.setVisible(true); - jframe.setSize(800,600); + graphStreamPanel.add(graphStreamBackPanel); + + //setup basicPanel + basicPanel.add(resultPanel); + basicPanel.add(graphStreamPanel); + basicPanel.add(legendPanel); + + //put it together + jframe.add(basicPanel); + + //conf jframe + jframe.setSize(800,580); jframe.setLocationRelativeTo(null); jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + jframe.setVisible(true); + jframe.pack(); + jframe.setTitle("jsprit - GraphStream"); + //start rendering graph + render(g,view); + + } + + private void render(Graph g, View view) { if(center != null){ -// viewer = g.display(false); -// View view = viewer.getDefaultView(); - view.resizeFrame(800, 600); + view.resizeFrame(view.getWidth(), view.getHeight()); view.getCamera().setViewCenter(center.x, center.y, 0); view.getCamera().setViewPercent(zoomFactor); } -// else viewer = g.display(); - - - -// viewer.getDefaultView().add(textField,BorderLayout.NORTH); -// viewer.getDefaultView().; - - if(!enableAutoLayout) viewer.disableAutoLayout(); - for(Vehicle vehicle : vrp.getVehicles()){ renderVehicle(g,vehicle,label); @@ -244,6 +261,175 @@ public class GraphStreamViewer { routeId++; } } + + } + + private JPanel createLegendPanel() { + int width = 800; + int height = 50; + + JPanel panel = new JPanel(); + panel.setPreferredSize(new Dimension(width,height)); + panel.setBackground(Color.WHITE); + + JPanel subpanel = new JPanel(); + subpanel.setLayout(new FlowLayout()); + subpanel.setPreferredSize(new Dimension(700,40)); + subpanel.setBackground(Color.WHITE); + subpanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); + + Font font = Font.decode("couriernew"); + + //graphic2d +// Graphics2D gr = new + + JLabel circleL = new JLabel(){ + + public void paintComponent(Graphics g){ + Color orig = g.getColor(); + g.setColor(Color.RED); + g.fillOval(50,50,50,50); + } + + }; +// circleL.paintComponents(circle); + + + //label + JLabel depots = new JLabel(new String("depots")); + depots.setFont(font); + depots.setPreferredSize(new Dimension(40,25)); + + + //graphic2d + + //label + JLabel pickups = new JLabel(new String("pickups")); + pickups.setFont(font); + pickups.setPreferredSize(new Dimension(40,25)); + + //graphic2d + + //label + JLabel deliveries = new JLabel(new String("deliveries")); + deliveries.setFont(font); + deliveries.setPreferredSize(new Dimension(40,25)); + + //shipments +// if(renderShipments()){ +// +// } + subpanel.add(circleL); + subpanel.add(depots); + + JLabel emptyLabel1 = createEmptyLabel(); + subpanel.add(emptyLabel1); + + subpanel.add(pickups); + subpanel.add(createEmptyLabel()); + + subpanel.add(deliveries); + + + + panel.add(subpanel); + + return panel; + } + + private JLabel createEmptyLabel() { + JLabel emptyLabel1 = new JLabel(); + emptyLabel1.setPreferredSize(new Dimension(40,25)); + return emptyLabel1; + } + + private JPanel createResultPanel() { + int width = 800; + int height = 50; + + JPanel panel = new JPanel(); + panel.setPreferredSize(new Dimension(width,height)); + panel.setBackground(Color.WHITE); + + JPanel subpanel = new JPanel(); + subpanel.setLayout(new FlowLayout()); + subpanel.setPreferredSize(new Dimension(700,40)); + subpanel.setBackground(Color.WHITE); + subpanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY,1)); + + Font font = Font.decode("couriernew"); + + JLabel jobs = new JLabel(new String("jobs")); + jobs.setFont(font); + jobs.setPreferredSize(new Dimension(40,25)); + + JFormattedTextField nJobs = new JFormattedTextField(this.vrp.getJobs().values().size()); + nJobs.setFont(font); + nJobs.setEditable(false); + nJobs.setBorder(BorderFactory.createEmptyBorder()); + nJobs.setBackground(new Color(230,230,230)); + + JLabel costs = new JLabel(new String("costs")); + costs.setFont(font); + costs.setPreferredSize(new Dimension(40,25)); + + JFormattedTextField costsVal = new JFormattedTextField(new Double(getSolutionCosts())); + costsVal.setFont(font); + costsVal.setEditable(false); + costsVal.setBorder(BorderFactory.createEmptyBorder()); + costsVal.setBackground(new Color(230,230,230)); + + JLabel vehicles = new JLabel(new String("routes")); + vehicles.setFont(font); + vehicles.setPreferredSize(new Dimension(40,25)); +// vehicles.setForeground(Color.DARK_GRAY); + + JFormattedTextField vehVal = new JFormattedTextField(getNuRoutes()); + vehVal.setFont(font); + vehVal.setEditable(false); + vehVal.setBorder(BorderFactory.createEmptyBorder()); +// vehVal.setForeground(Color.DARK_GRAY); + vehVal.setBackground(new Color(230,230,230)); + + //platzhalter + JLabel placeholder1 = new JLabel(); + placeholder1.setPreferredSize(new Dimension(60,25)); + +JLabel emptyLabel1 = createEmptyLabel(); + + subpanel.add(jobs); + subpanel.add(nJobs); + + subpanel.add(emptyLabel1); + + subpanel.add(costs); + subpanel.add(costsVal); + + JLabel emptyLabel2 = createEmptyLabel(); + subpanel.add(emptyLabel2); + + subpanel.add(vehicles); + subpanel.add(vehVal); + +// subpanel.add(emptyLabel); +// subpanel.add(placeholder1); +// subpanel.add(placeholder1); +// subpanel.add(placeholder1); +// subpanel.add(placeholder1); + + panel.add(subpanel); + + return panel; + } + + private Integer getNuRoutes() { + if(solution!=null) return Integer.valueOf(solution.getRoutes().size()); + return 0; + } + + private Double getSolutionCosts() { + if(solution!=null) return Double.valueOf(solution.getCost()); + return 0.0; } private void renderShipment(Graph g, Shipment shipment, Label label, boolean renderShipments) { From aea6574e607d5c75714dc43aa9530d13bed682fe Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Mon, 16 Dec 2013 08:43:01 +0100 Subject: [PATCH 3/5] play --- .../src/main/java/jsprit/examples/BicycleMessenger.java | 4 ++-- .../src/main/java/jsprit/examples/SimpleExample.java | 5 ++--- .../src/main/java/jsprit/examples/SolomonOpenExample.java | 5 +++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java b/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java index 16684ab7..f3ac2377 100644 --- a/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java +++ b/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java @@ -266,9 +266,9 @@ public class BicycleMessenger { SolutionPrinter.print(bicycleMessengerProblem, Solutions.bestOf(solutions), Print.VERBOSE); - new GraphStreamViewer(bicycleMessengerProblem).setRenderShipments(true).setRenderDelay(150).display(); +// new GraphStreamViewer(bicycleMessengerProblem).setRenderShipments(true).setRenderDelay(150).display(); - new GraphStreamViewer(bicycleMessengerProblem, Solutions.bestOf(solutions)).setCameraView(12500, 55000, 0.3).labelWith(Label.ID).setRenderDelay(150).display(); + new GraphStreamViewer(bicycleMessengerProblem, Solutions.bestOf(solutions)).setCameraView(12500, 55000, 0.25).labelWith(Label.ID).setRenderDelay(150).display(); } diff --git a/jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java index f9b4e323..b303d591 100644 --- a/jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java @@ -20,9 +20,8 @@ import java.io.File; import java.util.Collection; import jsprit.analysis.toolbox.GraphStreamViewer; -import jsprit.analysis.toolbox.SolutionPlotter; -import jsprit.analysis.toolbox.SolutionPrinter; import jsprit.analysis.toolbox.GraphStreamViewer.Label; +import jsprit.analysis.toolbox.SolutionPrinter; import jsprit.analysis.toolbox.SolutionPrinter.Print; import jsprit.core.algorithm.VehicleRoutingAlgorithm; import jsprit.core.algorithm.box.SchrimpfFactory; @@ -107,7 +106,7 @@ public class SimpleExample { */ // SolutionPlotter.plotSolutionAsPNG(problem, bestSolution, "output/solution.png", "solution"); - new GraphStreamViewer(problem, bestSolution).labelWith(Label.ID).setRenderDelay(100).display(); + new GraphStreamViewer(problem, bestSolution).labelWith(Label.ID).setRenderDelay(200).display(); } } diff --git a/jsprit-examples/src/main/java/jsprit/examples/SolomonOpenExample.java b/jsprit-examples/src/main/java/jsprit/examples/SolomonOpenExample.java index 99dbc305..8f35317c 100644 --- a/jsprit-examples/src/main/java/jsprit/examples/SolomonOpenExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SolomonOpenExample.java @@ -22,6 +22,7 @@ import java.util.Collection; import jsprit.analysis.toolbox.GraphStreamViewer; import jsprit.analysis.toolbox.SolutionPlotter; import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.analysis.toolbox.GraphStreamViewer.Label; import jsprit.core.algorithm.VehicleRoutingAlgorithm; import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; import jsprit.core.algorithm.selector.SelectBest; @@ -92,10 +93,10 @@ public class SolomonOpenExample { /* * Plot solution. */ - SolutionPlotter.plotSolutionAsPNG(vrp, solution, "output/solomon_C101_open_solution.png","C101"); +// SolutionPlotter.plotSolutionAsPNG(vrp, solution, "output/solomon_C101_open_solution.png","C101"); - new GraphStreamViewer(vrp, solution).setRenderDelay(50).setEnableAutoLayout(true).display(); + new GraphStreamViewer(vrp, solution).setRenderDelay(150).labelWith(Label.ID).setEnableAutoLayout(true).display(); } From 3eeb8fa08465da07df62aa25e87134ff25fd74a2 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Mon, 16 Dec 2013 14:54:54 +0100 Subject: [PATCH 4/5] improver graphstreamer --- .../analysis/toolbox/GraphStreamViewer.java | 97 ++++++++----------- 1 file changed, 40 insertions(+), 57 deletions(-) diff --git a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java index aa7feef7..c8f3204e 100644 --- a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/GraphStreamViewer.java @@ -4,8 +4,6 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; -import java.awt.Graphics; -import java.awt.Graphics2D; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -30,8 +28,6 @@ import org.graphstream.graph.Edge; import org.graphstream.graph.Graph; import org.graphstream.graph.Node; import org.graphstream.graph.implementations.MultiGraph; -import org.graphstream.ui.graphicGraph.GraphicGraph; -import org.graphstream.ui.swingViewer.LayerRenderer; import org.graphstream.ui.swingViewer.View; import org.graphstream.ui.swingViewer.Viewer; @@ -85,7 +81,7 @@ public class GraphStreamViewer { "}" ; public static enum Label { - NO_LABEL, ID + NO_LABEL, ID, ACTIVITY } private static class Center { @@ -115,6 +111,8 @@ public class GraphStreamViewer { private VehicleRoutingProblemSolution solution; private double zoomFactor; + + private double scaling = 1.0; public GraphStreamViewer(VehicleRoutingProblem vrp) { super(); @@ -146,6 +144,11 @@ public class GraphStreamViewer { this.renderShipments = renderShipments; return this; } + + public GraphStreamViewer setGraphStreamFrameScalingFactor(double factor){ + this.scaling=factor; + return this; + } /** * Sets the camera-view. Center describes the center-focus of the camera and zoomFactor its @@ -184,42 +187,31 @@ public class GraphStreamViewer { g.addAttribute("ui.stylesheet", styleSheet); JPanel graphStreamPanel = new JPanel(); - graphStreamPanel.setPreferredSize(new Dimension(800,460)); + graphStreamPanel.setPreferredSize(new Dimension((int)(800*scaling),(int)(460*scaling))); graphStreamPanel.setBackground(Color.WHITE); JPanel graphStreamBackPanel = new JPanel(); - graphStreamBackPanel.setPreferredSize(new Dimension(700,450)); + graphStreamBackPanel.setPreferredSize(new Dimension((int)(700*scaling),(int)(450*scaling))); graphStreamBackPanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); graphStreamBackPanel.setBackground(Color.WHITE); Viewer viewer = new Viewer(g,Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD); View view = viewer.addDefaultView(false); - view.setPreferredSize(new Dimension(698,440)); - view.setForeLayoutRenderer(new LayerRenderer() { + view.setPreferredSize(new Dimension((int)(698*scaling),(int)(440*scaling))); - @Override - public void render(Graphics2D graphics, GraphicGraph graph, double px2Gu, - int widthPx, int heightPx, double minXGu, double minYGu, - double maxXGu, double maxYGu) { - legendPanel.repaint(); - - } - }); - - graphStreamBackPanel.add(view); - + graphStreamBackPanel.add(view); graphStreamPanel.add(graphStreamBackPanel); //setup basicPanel basicPanel.add(resultPanel); basicPanel.add(graphStreamPanel); - basicPanel.add(legendPanel); +// basicPanel.add(legendPanel); //put it together jframe.add(basicPanel); //conf jframe - jframe.setSize(800,580); + jframe.setSize((int)(800*scaling),(int)(580*scaling)); jframe.setLocationRelativeTo(null); jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jframe.setVisible(true); @@ -256,7 +248,7 @@ public class GraphStreamViewer { if(solution != null){ int routeId = 1; for(VehicleRoute route : solution.getRoutes()){ - renderRoute(g,route,routeId,renderDelay_in_ms); + renderRoute(g,route,routeId,renderDelay_in_ms,label); sleep(renderDelay_in_ms); routeId++; } @@ -269,12 +261,12 @@ public class GraphStreamViewer { int height = 50; JPanel panel = new JPanel(); - panel.setPreferredSize(new Dimension(width,height)); + panel.setPreferredSize(new Dimension((int)(width*scaling),(int)(height*scaling))); panel.setBackground(Color.WHITE); JPanel subpanel = new JPanel(); subpanel.setLayout(new FlowLayout()); - subpanel.setPreferredSize(new Dimension(700,40)); + subpanel.setPreferredSize(new Dimension((int)(700*scaling),(int)(40*scaling))); subpanel.setBackground(Color.WHITE); subpanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); @@ -282,23 +274,11 @@ public class GraphStreamViewer { //graphic2d // Graphics2D gr = new - - JLabel circleL = new JLabel(){ - - public void paintComponent(Graphics g){ - Color orig = g.getColor(); - g.setColor(Color.RED); - g.fillOval(50,50,50,50); - } - - }; -// circleL.paintComponents(circle); - - + //label JLabel depots = new JLabel(new String("depots")); depots.setFont(font); - depots.setPreferredSize(new Dimension(40,25)); + depots.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); //graphic2d @@ -306,20 +286,20 @@ public class GraphStreamViewer { //label JLabel pickups = new JLabel(new String("pickups")); pickups.setFont(font); - pickups.setPreferredSize(new Dimension(40,25)); + pickups.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); //graphic2d //label JLabel deliveries = new JLabel(new String("deliveries")); deliveries.setFont(font); - deliveries.setPreferredSize(new Dimension(40,25)); + deliveries.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); //shipments // if(renderShipments()){ // // } - subpanel.add(circleL); + subpanel.add(depots); JLabel emptyLabel1 = createEmptyLabel(); @@ -339,7 +319,7 @@ public class GraphStreamViewer { private JLabel createEmptyLabel() { JLabel emptyLabel1 = new JLabel(); - emptyLabel1.setPreferredSize(new Dimension(40,25)); + emptyLabel1.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); return emptyLabel1; } @@ -348,12 +328,12 @@ public class GraphStreamViewer { int height = 50; JPanel panel = new JPanel(); - panel.setPreferredSize(new Dimension(width,height)); + panel.setPreferredSize(new Dimension((int)(width*scaling),(int)(height*scaling))); panel.setBackground(Color.WHITE); JPanel subpanel = new JPanel(); subpanel.setLayout(new FlowLayout()); - subpanel.setPreferredSize(new Dimension(700,40)); + subpanel.setPreferredSize(new Dimension((int)(700*scaling),(int)(40*scaling))); subpanel.setBackground(Color.WHITE); subpanel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY,1)); @@ -361,7 +341,7 @@ public class GraphStreamViewer { JLabel jobs = new JLabel(new String("jobs")); jobs.setFont(font); - jobs.setPreferredSize(new Dimension(40,25)); + jobs.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); JFormattedTextField nJobs = new JFormattedTextField(this.vrp.getJobs().values().size()); nJobs.setFont(font); @@ -371,7 +351,7 @@ public class GraphStreamViewer { JLabel costs = new JLabel(new String("costs")); costs.setFont(font); - costs.setPreferredSize(new Dimension(40,25)); + costs.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); JFormattedTextField costsVal = new JFormattedTextField(new Double(getSolutionCosts())); costsVal.setFont(font); @@ -381,7 +361,7 @@ public class GraphStreamViewer { JLabel vehicles = new JLabel(new String("routes")); vehicles.setFont(font); - vehicles.setPreferredSize(new Dimension(40,25)); + vehicles.setPreferredSize(new Dimension((int)(40*scaling),(int)(25*scaling))); // vehicles.setForeground(Color.DARK_GRAY); JFormattedTextField vehVal = new JFormattedTextField(getNuRoutes()); @@ -393,9 +373,9 @@ public class GraphStreamViewer { //platzhalter JLabel placeholder1 = new JLabel(); - placeholder1.setPreferredSize(new Dimension(60,25)); + placeholder1.setPreferredSize(new Dimension((int)(60*scaling),(int)(25*scaling))); -JLabel emptyLabel1 = createEmptyLabel(); + JLabel emptyLabel1 = createEmptyLabel(); subpanel.add(jobs); subpanel.add(nJobs); @@ -410,12 +390,6 @@ JLabel emptyLabel1 = createEmptyLabel(); subpanel.add(vehicles); subpanel.add(vehVal); - -// subpanel.add(emptyLabel); -// subpanel.add(placeholder1); -// subpanel.add(placeholder1); -// subpanel.add(placeholder1); -// subpanel.add(placeholder1); panel.add(subpanel); @@ -480,16 +454,25 @@ JLabel emptyLabel1 = createEmptyLabel(); private void renderVehicle(Graph g, Vehicle vehicle, Label label) { Node n = g.addNode(makeId(vehicle.getId(),vehicle.getLocationId())); if(label.equals(Label.ID)) n.addAttribute("ui.label", "depot"); +// if(label.equals(Label.ACTIVITY)) n.addAttribute("ui.label", "start"); n.addAttribute("x", vehicle.getCoord().getX()); n.addAttribute("y", vehicle.getCoord().getY()); n.setAttribute("ui.class", "depot"); } - private void renderRoute(Graph g, VehicleRoute route, int routeId, long renderDelay_in_ms) { + private void renderRoute(Graph g, VehicleRoute route, int routeId, long renderDelay_in_ms, Label label) { int vehicle_edgeId = 1; String prevIdentifier = makeId(route.getVehicle().getId(),route.getVehicle().getLocationId()); + if(label.equals(Label.ACTIVITY)){ + Node n = g.getNode(prevIdentifier); + n.addAttribute("ui.label", "start"); + } for(TourActivity act : route.getActivities()){ String currIdentifier = makeId(((JobActivity)act).getJob().getId(),act.getLocationId()); + if(label.equals(Label.ACTIVITY)){ + Node actNode = g.getNode(currIdentifier); + actNode.addAttribute("ui.label", act.getName()); + } g.addEdge(makeEdgeId(routeId,vehicle_edgeId), prevIdentifier, currIdentifier, true); if(act instanceof PickupActivity) g.getNode(currIdentifier).addAttribute("ui.class", "pickupInRoute"); else if (act instanceof DeliveryActivity) g.getNode(currIdentifier).addAttribute("ui.class", "deliveryInRoute"); From 48d8a4a826fa7a65fdb1a1a76102cb321647dde8 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Mon, 16 Dec 2013 14:56:57 +0100 Subject: [PATCH 5/5] play --- .../src/main/java/jsprit/examples/BicycleMessenger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java b/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java index f3ac2377..da71f430 100644 --- a/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java +++ b/jsprit-examples/src/main/java/jsprit/examples/BicycleMessenger.java @@ -268,7 +268,7 @@ public class BicycleMessenger { // new GraphStreamViewer(bicycleMessengerProblem).setRenderShipments(true).setRenderDelay(150).display(); - new GraphStreamViewer(bicycleMessengerProblem, Solutions.bestOf(solutions)).setCameraView(12500, 55000, 0.25).labelWith(Label.ID).setRenderDelay(150).display(); + new GraphStreamViewer(bicycleMessengerProblem, Solutions.bestOf(solutions)).setGraphStreamFrameScalingFactor(1.5).setCameraView(12500, 55000, 0.25).labelWith(Label.ACTIVITY).setRenderShipments(true).setRenderDelay(150).display(); }