Commit 8e408fbf authored by Björn Richerzhagen's avatar Björn Richerzhagen
Browse files

OSM-Visualization and Movement Model

- Refactored data scaling to adhere to the world dimensions specified in
meters
- Scaling of UI elements is now done in a unified fashion by the
VisualizationInjector
parent 2fa7daee
......@@ -45,8 +45,8 @@ public class ModularMovementModelViz extends JComponent {
private ModularMovementModel movementModel;
public ModularMovementModelViz(ModularMovementModel model) {
setBounds(0, 0, VisualizationInjector.WORLD_X,
VisualizationInjector.WORLD_Y);
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(true);
setVisible(true);
this.movementModel = model;
......@@ -64,10 +64,12 @@ public class ModularMovementModelViz extends JComponent {
// draw border
g2.setColor(Color.BLACK);
g2.setStroke(new BasicStroke(1f));
g2.drawOval(point.x - 15, point.y - 15, 30, 30);
g2.drawOval(VisualizationInjector.scaleValue(point.x) - 15,
VisualizationInjector.scaleValue(point.y) - 15, 30, 30);
g2.setColor(new Color(0.2f, 0.8f, 0.2f, 0.6f));
g2.fillOval(point.x - 15, point.y - 15, 30, 30);
g2.fillOval(VisualizationInjector.scaleValue(point.x) - 15,
VisualizationInjector.scaleValue(point.y) - 15, 30, 30);
}
}
......
......@@ -20,6 +20,8 @@
package de.tud.kom.p2psim.impl.topology.movement.modularosm;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
public class GPSCalculation {
private static double latCenter;
......@@ -31,7 +33,15 @@ public class GPSCalculation {
}
private void setScaleFactor() {
this.scaleFactor = Math.pow(2.0d, (13-zoom));
//this.scaleFactor = Math.pow(2.0d, (13 - zoom));
/*
* BR: set scaleFactor to fixed zoom level 15 (as in this case, 1px ==
* 1m) - this way, the world-size specified in the configs is valid on
* all zoom levels.
*/
this.scaleFactor = 0.125;
// 17: 2, 16: 1, 15: 0.5, 14: 0.25
VisualizationInjector.setScale(Math.pow(2.0d, (zoom - 16)));
}
public static double getLatCenter() {
......
......@@ -20,7 +20,6 @@
package de.tud.kom.p2psim.impl.topology.movement.modularosm;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
......@@ -30,6 +29,7 @@ import java.awt.RenderingHints;
import javax.swing.JComponent;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.AttractionPoint;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
/**
......@@ -43,9 +43,11 @@ public class ModularMovementModelViz extends JComponent {
private ModularMovementModel movementModel;
private static Color COLOR_ATTR_POINT = new Color(0.2f, 0.2f, 0.2f, 0.4f);
public ModularMovementModelViz(ModularMovementModel model) {
setBounds(0, 0, VisualizationInjector.WORLD_X,
VisualizationInjector.WORLD_Y);
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(true);
setVisible(true);
this.movementModel = model;
......@@ -62,11 +64,13 @@ public class ModularMovementModelViz extends JComponent {
Point point = aPoint.getRealPosition().asPoint();
// draw border
g2.setColor(Color.BLACK);
g2.setStroke(new BasicStroke(1f));
g2.drawOval(point.x - 15, point.y - 15, 20, 20);
g2.drawString(aPoint.getName(), point.x - 15, point.y - 15);
g2.setColor(new Color(0.2f, 0.8f, 0.2f, 0.6f));
g2.fillOval(point.x - 15, point.y - 15, 20, 20);
g2.setFont(VisualizationTopologyView.FONT_MEDIUM);
g2.drawString(aPoint.getName(),
VisualizationInjector.scaleValue(point.x) - 15,
VisualizationInjector.scaleValue(point.y) - 15);
g2.setColor(COLOR_ATTR_POINT);
g2.fillOval(VisualizationInjector.scaleValue(point.x) - 15,
VisualizationInjector.scaleValue(point.y) - 15, 20, 20);
}
}
......
......@@ -46,7 +46,8 @@ public class ShowGoogleMapsMapViz extends JComponent implements IMapVisualizatio
private boolean initialized = false;
public ShowGoogleMapsMapViz() {
setBounds(0, 0, VisualizationInjector.WORLD_X, VisualizationInjector.WORLD_Y);
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(true);
setVisible(true);
}
......@@ -97,7 +98,10 @@ public class ShowGoogleMapsMapViz extends JComponent implements IMapVisualizatio
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f));
Image imageToDraw = resize(Toolkit.getDefaultToolkit().getImage(tempImageFilePath), VisualizationInjector.WORLD_X, VisualizationInjector.WORLD_Y);
Image imageToDraw = resize(
Toolkit.getDefaultToolkit().getImage(tempImageFilePath),
VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
g2.drawImage(imageToDraw , 0, 0, this);
}
......
......@@ -39,53 +39,61 @@ import javax.swing.JComponent;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.GPSCalculation;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
public class ShowMapQuestMapViz extends JComponent implements IMapVisualization{
public class ShowMapQuestMapViz extends JComponent
implements IMapVisualization {
private String tempImageFilePath;
private String mapType;
private String mapQuestKey;
private boolean initialized = false;
public ShowMapQuestMapViz() {
setBounds(0, 0, VisualizationInjector.WORLD_X, VisualizationInjector.WORLD_Y);
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(true);
setVisible(true);
setVisible(true);
}
private void initializeImage() {
if(!initialized) {
tempImageFilePath = tempImageFilePath +
"mapquest" +
GPSCalculation.getLatCenter() +
GPSCalculation.getLonCenter() +
GPSCalculation.getZoom() +
mapType + ".jpg";
//Check if the file with same properties (same location) already exists
if (!initialized) {
tempImageFilePath = tempImageFilePath + "mapquest"
+ GPSCalculation.getLatCenter()
+ GPSCalculation.getLonCenter() + GPSCalculation.getZoom()
+ VisualizationInjector.getWorldX()
+ VisualizationInjector.getWorldY() + mapType + ".jpg";
// Check if the file with same properties (same location) already
// exists
File f = new File(tempImageFilePath);
if(!f.exists()) {
if (!f.exists()) {
try {
String imageUrl = "http://www.mapquestapi.com/staticmap/v4/getmap?key=" + mapQuestKey + "&type=" + mapType + "&imagetype=jpeg&center=" +
GPSCalculation.getLatCenter() + "," +
GPSCalculation.getLonCenter() + "&zoom=" +
((GPSCalculation.getZoom())+1) + "&size=1000,1000";
URL url = new URL(imageUrl);
InputStream is = url.openStream();
OutputStream os = new FileOutputStream(tempImageFilePath);
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
String imageUrl = "http://www.mapquestapi.com/staticmap/v4/getmap?key="
+ mapQuestKey + "&type=" + mapType
+ "&imagetype=jpeg&center="
+ GPSCalculation.getLatCenter() + ","
+ GPSCalculation.getLonCenter() + "&zoom="
+ ((GPSCalculation.getZoom()) + 1) + "&size="
+ VisualizationInjector.getWorldX() + ","
+ VisualizationInjector.getWorldY();
URL url = new URL(imageUrl);
InputStream is = url.openStream();
OutputStream os = new FileOutputStream(tempImageFilePath);
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
initialized = true;
}
......@@ -94,28 +102,32 @@ public class ShowMapQuestMapViz extends JComponent implements IMapVisualization{
@Override
public void paint(Graphics g) {
initializeImage();
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f));
Image imageToDraw = resize(Toolkit.getDefaultToolkit().getImage(tempImageFilePath), VisualizationInjector.WORLD_X, VisualizationInjector.WORLD_Y);
g2.drawImage(imageToDraw , 0, 0, this);
g2.setComposite(
AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f));
Image imageToDraw = resize(
Toolkit.getDefaultToolkit().getImage(tempImageFilePath),
VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
g2.drawImage(imageToDraw, 0, 0, this);
}
public void setTempImageFilePath(String tempImageFilePath) {
this.tempImageFilePath = tempImageFilePath;
}
public void setMapType(String mapType) {
this.mapType = mapType;
}
public void setMapQuestKey(String mapQuestKey) {
this.mapQuestKey = mapQuestKey;
}
/**
* Resizes the given image to the given width and height
*
......@@ -124,17 +136,20 @@ public class ShowMapQuestMapViz extends JComponent implements IMapVisualization{
* @param height
*/
private Image resize(Image originalImage, int width, int height) {
int type = BufferedImage.TYPE_INT_ARGB;
BufferedImage resizedImage = new BufferedImage(width, height, type);
Graphics2D g = resizedImage.createGraphics();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(originalImage, 0, 0, width, height, this);
g.dispose();
return resizedImage;
int type = BufferedImage.TYPE_INT_ARGB;
BufferedImage resizedImage = new BufferedImage(width, height, type);
Graphics2D g = resizedImage.createGraphics();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(originalImage, 0, 0, width, height, this);
g.dispose();
return resizedImage;
}
}
......@@ -100,8 +100,6 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
protected final int WORLD_Y;
public static double SCALE;
protected HashMap<INodeID, TopologyComponentVis> compVisPerHost = new HashMap<INodeID, TopologyComponentVis>();
protected final WorldPanel worldPanel;
......@@ -127,12 +125,10 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
/**
*
*/
@XMLConfigurableConstructor({ "worldX", "worldY", "scale" })
public VisualizationTopologyView(int worldX, int worldY, double scale) {
@XMLConfigurableConstructor({ "worldX", "worldY" })
public VisualizationTopologyView(int worldX, int worldY) {
WORLD_X = worldX;
WORLD_Y = worldY;
SCALE = scale;
worldPanel = new WorldPanel();
visManager = new ComponentVisManager(worldPanel);
......@@ -233,8 +229,8 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
if (model == null)
return;
weakWaypointComponentVis = new WeakWaypointComponentVis(this, model);
strongWaypointComponentVis = new StrongWaypointComponentVis(this, model);
weakWaypointComponentVis = new WeakWaypointComponentVis(model);
strongWaypointComponentVis = new StrongWaypointComponentVis(model);
this.visManager.addComponent("Streets", 0, weakWaypointComponentVis);
this.visManager
.addComponent("Waypoints", 0, strongWaypointComponentVis);
......@@ -249,7 +245,7 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
if (model == null)
return;
obstacleComponentVis = new ObstacleComponentVis(this, model);
obstacleComponentVis = new ObstacleComponentVis(model);
this.visManager.addComponent("Buildings", 0, obstacleComponentVis);
// worldPanel.add(obstacleComponentVis);
}
......@@ -314,8 +310,9 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
public WorldPanel() {
this.setLayout(null);
this.setPreferredSize(new Dimension((int) (WORLD_X / SCALE),
(int) (WORLD_Y / SCALE)));
this.setPreferredSize(
new Dimension(VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY()));
}
@Override
......@@ -337,17 +334,15 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
g2.setColor(Color.DARK_GRAY);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, (int) (WORLD_X / SCALE), (int) (WORLD_Y / SCALE));
g2.fillRect(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
g2.setPaint(Color.BLACK);
g2.drawLine(10, 10, (int) (10 + 50 / SCALE), 10);
g2.drawString("100 meters", 10, 15);
g2.drawLine(10, 30, 10 + VisualizationInjector.scaleValue(100), 30);
}
}
public double getScale() {
return SCALE;
}
public void notifyInteractionListenersOnClick(long hostid, boolean isActive) {
VisualizationInjector.notifyInteractionListenersOnClick(hostid,
isActive);
......@@ -395,9 +390,11 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
protected static long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK
+ AWTEvent.MOUSE_EVENT_MASK;
public static int WORLD_X = 0;
private static int WORLD_X = 0;
private static int WORLD_Y = 0;
public static int WORLD_Y = 0;
private static double SCALE = 1;
protected static Map<String, PlottingView> plottingViews = Maps
.newHashMap();
......@@ -565,12 +562,51 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
}
}
/**
* Returns a SCALED x-length of the world size, only to be used by
* visualizations.
*
* @return
*/
public static int getWorldX() {
return WORLD_X;
// return WORLD_X;
return (int) (WORLD_X * getScale());
}
/**
* Returns a SCALED y-length of the world size, only to be used by
* visualizations.
*
* @return
*/
public static int getWorldY() {
return WORLD_Y;
// return WORLD_Y;
return (int) (WORLD_Y * getScale());
}
/**
* Still needed by OSM-loader (Fabio), however: should not be used
* anymore. The coordinates should be final.
*
* @param x
* @param y
*/
@Deprecated
public static void setWorldCoordinates(int x, int y) {
WORLD_X = x;
WORLD_Y = y;
}
public static double getScale() {
return SCALE;
}
public static void setScale(double scale) {
SCALE = scale;
}
public static int scaleValue(double value) {
return (int) (value * getScale());
}
public static void injectComponent(String name, int priority,
......
......@@ -60,7 +60,8 @@ public class SimControlPanel extends JToolBar implements ActionListener,
public SimControlPanel() {
super("Control");
this.setFloatable(false);
this.setPreferredSize(new Dimension(VisualizationInjector.WORLD_X, 30));
this.setPreferredSize(
new Dimension(VisualizationInjector.getWorldX(), 30));
this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
this.add(getPlayPauseButton());
this.add(Box.createHorizontalGlue());
......
......@@ -27,7 +27,7 @@ import java.util.Set;
import javax.swing.JComponent;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
import de.tud.kom.p2psim.impl.simengine.Simulator;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
import de.tud.kom.p2psim.impl.topology.views.visualization.ui.VisHelper;
import de.tudarmstadt.maki.simonstrator.api.common.graph.IEdge;
......@@ -42,27 +42,12 @@ import de.tudarmstadt.maki.simonstrator.api.component.topology.TopologyID;
*/
public class LinkComponentVis extends JComponent {
/**
*
*/
private final VisualizationTopologyView visualizationTopologyView;
private TopologyComponentVis src;
public LinkComponentVis(VisualizationTopologyView visualizationTopologyView,
TopologyComponentVis src) {
this.visualizationTopologyView = visualizationTopologyView;
public LinkComponentVis(TopologyComponentVis src) {
this.src = src;
setBounds(0, 0,
(int) (this.visualizationTopologyView.getWorldDimensions()
.getX() / this.visualizationTopologyView.getScale()),
(int) (this.visualizationTopologyView.getWorldDimensions()
.getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0,
(int) (this.visualizationTopologyView.getWorldDimensions()
.getX() / this.visualizationTopologyView.getScale()),
(int) (this.visualizationTopologyView.getWorldDimensions()
.getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(false);
}
......@@ -71,17 +56,20 @@ public class LinkComponentVis extends JComponent {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Simulator.getScheduler().pause();
TopologyID tId = src.getTopologyComp().getTopologyID(NetInterfaceName.WIFI, true);
Set<IEdge> neighbors = new HashSet<IEdge>(src.getTopologyComp().getNeighbors(tId));
for (IEdge mAddr : neighbors) {
TopologyComponentVis dst = VisualizationInjector
.getTopologyComponentVis(mAddr.toId());
double scale = this.visualizationTopologyView.getScale();
VisHelper.drawArrow(g2, src.getPosition().getX() / scale,
src.getPosition().getY() / scale,
dst.getPosition().getX() / scale,
dst.getPosition().getY() / scale, 2);
VisHelper.drawArrow(g2,
VisualizationInjector.scaleValue(src.getPosition().getX()),
VisualizationInjector.scaleValue(src.getPosition().getY()),
VisualizationInjector.scaleValue(dst.getPosition().getX()),
VisualizationInjector.scaleValue(dst.getPosition().getY()),
2);
}
Simulator.getScheduler().unpause();
}
}
\ No newline at end of file
......@@ -55,8 +55,8 @@ public class NodeInfoComponentVis extends JComponent {
public <T extends HostComponent> NodeInfoComponentVis(
final Class<T> componentClass) {
setBounds(0, 0, VisualizationInjector.WORLD_X,
VisualizationInjector.WORLD_Y);
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(true);
setVisible(true);
......
......@@ -37,7 +37,7 @@ import de.tud.kom.p2psim.api.topology.obstacles.Obstacle;
import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel;
import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModelListener;
import de.tud.kom.p2psim.impl.topology.obstacles.PolygonObstacle;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
/**
*
......@@ -46,25 +46,21 @@ import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
*/
public class ObstacleComponentVis extends JComponent implements ObstacleModelListener {
/**
*
*/
private final VisualizationTopologyView visualizationTopologyView;
protected BufferedImage image;
protected volatile boolean needsRedraw = true;
private ObstacleModel model;
public ObstacleComponentVis(VisualizationTopologyView visualizationTopologyView, ObstacleModel model) {
this.visualizationTopologyView = visualizationTopologyView;
public ObstacleComponentVis(ObstacleModel model) {
this.model = model;
setBounds(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(false);
setVisible(true);
image = new BufferedImage((int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()), BufferedImage.TYPE_INT_ARGB);
image = new BufferedImage(VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY(), BufferedImage.TYPE_INT_ARGB);
}
......@@ -87,7 +83,9 @@ public class ObstacleComponentVis extends JComponent implements ObstacleModelLis
Composite c = g2.getComposite();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()));
Rectangle2D.Double rect = new Rectangle2D.Double(0, 0,
VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
g2.fill(rect);
g2.setComposite(c);
......@@ -124,14 +122,16 @@ public class ObstacleComponentVis extends JComponent implements ObstacleModelLis
}
label = "Damping: " + obstacle.dampingFactor();
shape = pObstacle.getAwtPolygon(this.visualizationTopologyView.getScale());
shape = pObstacle.getAwtPolygon(VisualizationInjector.getScale());
int[] xpoints = pObstacle.getXPoints();
int[] ypoints = pObstacle.getYPoints();
for (int i = 0; i < xpoints.length; i++) {
xpoints[i] = (int)(xpoints[i] / this.visualizationTopologyView.getScale());
ypoints[i] = (int)(ypoints[i] / this.visualizationTopologyView.getScale());
xpoints[i] = (int) (xpoints[i]
/ VisualizationInjector.getScale());
ypoints[i] = (int) (ypoints[i]
/ VisualizationInjector.getScale());
}
shape = new Polygon(xpoints, ypoints, xpoints.length);
......
......@@ -93,8 +93,8 @@ public class SocialViewComponentVis extends JComponent implements
}
}
setBounds(0, 0, VisualizationInjector.WORLD_X,
VisualizationInjector.WORLD_Y);
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(true);
setVisible(true);
......
......@@ -35,76 +35,75 @@ import javax.swing.JComponent;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModelListener;
import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.Path;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.StrongWaypoint;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.Waypoint;
import de.tudarmstadt.maki.simonstrator.api.Randoms;
public class StrongWaypointComponentVis extends JComponent implements WaypointModelListener {
public class StrongWaypointComponentVis extends JComponent
implements WaypointModelListener {
/**
*
*/
private final VisualizationTopologyView visualizationTopologyView;
protected final int WAYPOINT_STRONG_RADIUS = 2;
protected final int WAYPOINT_WEAK_RADIUS = 1;
protected Color COLOR_PATH;
protected Color COLOR_STRONG_WAYPOINT;
protected Color COLOR_WEAK_WAYPOINT;
protected Random rnd = Randoms
.getRandom(StrongWaypointComponentVis.class);
protected Random rnd = Randoms.getRandom(StrongWaypointComponentVis.class);
protected BufferedImage image;
protected volatile boolean needsRedraw = true;
private WaypointModel model;
private double scale;
public StrongWaypointComponentVis(VisualizationTopologyView visualizationTopologyView, WaypointModel model) {
this.visualizationTopologyView = visualizationTopologyView;
public StrongWaypointComponentVis(WaypointModel model) {
this.model = model;
setBounds(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0, (int) (this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int) (this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(false);
setVisible(true);
COLOR_STRONG_WAYPOINT = new Color(30, 144, 255, 255);
COLOR_WEAK_WAYPOINT = new Color(30, 144, 255, 200);
COLOR_PATH = new Color(49, 79, 79, 130);
image = new BufferedImage((int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()), BufferedImage.TYPE_INT_ARGB);
image = new BufferedImage(VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY(), BufferedImage.TYPE_INT_ARGB);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (needsRedraw)
if (needsRedraw)
redraw();
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 0, 0, null);
}
protected void redraw() {
needsRedraw = false;
scale = this.visualizationTopologyView.getScale();
Graphics2D g2 = (Graphics2D) image.getGraphics();
Composite c = g2.getComposite();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX()/this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY()/this.visualizationTopologyView.getScale()));
Rectangle2D.Double rect = new Rectangle2D.Double(0, 0,
VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
g2.fill(rect);
g2.setComposite(c);
try {
drawWaypoints(g2);
} catch (RuntimeException e) {
......@@ -126,10 +125,13 @@ public class StrongWaypointComponentVis extends JComponent implements WaypointMo
if (wp instanceof StrongWaypoint) {
g2.setColor(COLOR_STRONG_WAYPOINT);
g2.fillOval((int)((pos.getX() - WAYPOINT_STRONG_RADIUS)/scale),
(int)((pos.getY() - WAYPOINT_STRONG_RADIUS)/scale),
(int)((WAYPOINT_STRONG_RADIUS * 2)/scale),
(int)((WAYPOINT_STRONG_RADIUS * 2)/scale));
g2.fillOval(
VisualizationInjector.scaleValue(pos.getX())
- WAYPOINT_STRONG_RADIUS,
VisualizationInjector.scaleValue(pos.getY())
- WAYPOINT_STRONG_RADIUS,
(WAYPOINT_STRONG_RADIUS * 2),
(WAYPOINT_STRONG_RADIUS * 2));
}
}
}
......
......@@ -72,7 +72,7 @@ public class TopologyComponentVis extends JComponent {
this.visualizationTopologyView = visualizationTopologyView;
tComp = comp;
posVec = comp.getRealPosition();
hostid = comp.getHost().getHostId();
hostid = comp.getHost().getId().value();
String peerColor = comp.getHost().getProperties().getProperty("peerColor");
if (peerColor != null) {
......@@ -81,10 +81,12 @@ public class TopologyComponentVis extends JComponent {
}
Point position = comp.getRealPosition().asPoint();
setBounds((int) (position.x / this.visualizationTopologyView.getScale() - COMPONENT_PADDING),
(int) (position.y / this.visualizationTopologyView.getScale() - COMPONENT_PADDING),
2 * COMPONENT_PADDING,
2 * COMPONENT_PADDING);
setBounds(
VisualizationInjector.scaleValue(position.getX())
- COMPONENT_PADDING,
VisualizationInjector.scaleValue(position.getY())
- COMPONENT_PADDING,
2 * COMPONENT_PADDING, 2 * COMPONENT_PADDING);
setOpaque(false);
this.addMouseListener(new MouseAdapter() {
......@@ -126,10 +128,11 @@ public class TopologyComponentVis extends JComponent {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setLocation((int) ((posVec.getX() / this.visualizationTopologyView.getScale() - COMPONENT_PADDING)),
(int) ((posVec.getY()
/ this.visualizationTopologyView.getScale()
- COMPONENT_PADDING)));
setLocation(
VisualizationInjector.scaleValue(posVec.getX())
- COMPONENT_PADDING,
VisualizationInjector.scaleValue(posVec.getY())
- COMPONENT_PADDING);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
......@@ -152,16 +155,15 @@ public class TopologyComponentVis extends JComponent {
g2.setColor(Color.BLACK);
g2.setFont(VisualizationTopologyView.FONT_TINY);
g2.drawString("ID: " + hostid, 0, COMPONENT_PADDING
- COMPONENT_RADIUS);
g2.drawString(String.valueOf(hostid), COMPONENT_PADDING,
COMPONENT_PADDING - COMPONENT_RADIUS);
g2.setColor(Color.BLACK);
}
protected void toggleActive() {
active = !active;
if (active) {
lcVis = new LinkComponentVis(this.visualizationTopologyView,
TopologyComponentVis.this);
lcVis = new LinkComponentVis(TopologyComponentVis.this);
VisualizationInjector.getWorldPanel().add(lcVis);
} else if (lcVis != null) {
VisualizationInjector.getWorldPanel().remove(lcVis);
......
......@@ -38,7 +38,7 @@ import javax.swing.JComponent;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModelListener;
import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.DefaultWeightedEdgeRetrievableGraph;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.Path;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.Waypoint;
......@@ -52,10 +52,6 @@ import de.tudarmstadt.maki.simonstrator.api.Randoms;
*/
public class WeakWaypointComponentVis extends JComponent implements WaypointModelListener {
/**
*
*/
private final VisualizationTopologyView visualizationTopologyView;
protected final int WAYPOINT_STRONG_RADIUS = 2;
protected final int WAYPOINT_WEAK_RADIUS = 1;
......@@ -72,21 +68,20 @@ public class WeakWaypointComponentVis extends JComponent implements WaypointMode
protected volatile boolean needsRedraw = true;
private WaypointModel model;
private double scale;
public WeakWaypointComponentVis(VisualizationTopologyView visualizationTopologyView, WaypointModel model) {
this.visualizationTopologyView = visualizationTopologyView;
public WeakWaypointComponentVis(WaypointModel model) {
this.model = model;
setBounds(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0, (int) (this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int) (this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0, VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
setOpaque(false);
setVisible(true);
COLOR_STRONG_WAYPOINT = new Color(30, 144, 255, 255);
COLOR_WEAK_WAYPOINT = new Color(30, 144, 255, 200);
COLOR_PATH = new Color(49, 79, 79, 130);
image = new BufferedImage((int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale()), BufferedImage.TYPE_INT_ARGB);
image = new BufferedImage(VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY(),
BufferedImage.TYPE_INT_ARGB);
}
@Override
......@@ -103,14 +98,14 @@ public class WeakWaypointComponentVis extends JComponent implements WaypointMode
protected void redraw() {
needsRedraw = false;
scale = this.visualizationTopologyView.getScale();
Graphics2D g2 = (Graphics2D) image.getGraphics();
Composite c = g2.getComposite();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX()/this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY()/this.visualizationTopologyView.getScale()));
Rectangle2D.Double rect = new Rectangle2D.Double(0, 0,
VisualizationInjector.getWorldX(),
VisualizationInjector.getWorldY());
g2.fill(rect);
g2.setComposite(c);
......@@ -167,11 +162,12 @@ public class WeakWaypointComponentVis extends JComponent implements WaypointMode
g2.setColor(pathColor);
g2.setStroke(new BasicStroke(0.8f));
g2.drawLine((int)(sourcePos.getX()/scale),
(int)(sourcePos.getY()/scale),
(int)(targetPos.getX()/scale),
(int)(targetPos.getY()/scale));
g2.drawLine(VisualizationInjector.scaleValue(sourcePos.getX()),
VisualizationInjector.scaleValue(sourcePos.getY()),
VisualizationInjector.scaleValue(targetPos.getX()),
VisualizationInjector.scaleValue(targetPos.getY()));
usedWaypoints.add(p);
}
}
......@@ -205,10 +201,10 @@ public class WeakWaypointComponentVis extends JComponent implements WaypointMode
g2.setColor(COLOR_PATH);
g2.setStroke(new BasicStroke(0.8f));
g2.drawLine((int)(sourcePos.getX()/scale),
(int)(sourcePos.getY()/scale),
(int)(targetPos.getX()/scale),
(int)(targetPos.getY()/scale));
g2.drawLine(VisualizationInjector.scaleValue(sourcePos.getX()),
VisualizationInjector.scaleValue(sourcePos.getY()),
VisualizationInjector.scaleValue(targetPos.getX()),
VisualizationInjector.scaleValue(targetPos.getY()));
}
}
......@@ -220,10 +216,12 @@ public class WeakWaypointComponentVis extends JComponent implements WaypointMode
if (wp instanceof WeakWaypoint) {
g2.setColor(COLOR_WEAK_WAYPOINT);
g2.fillOval((int)((pos.getX() - WAYPOINT_WEAK_RADIUS)/scale),
(int)((pos.getY() - WAYPOINT_WEAK_RADIUS)/scale),
(int)((WAYPOINT_WEAK_RADIUS * 2)/scale),
(int)((WAYPOINT_WEAK_RADIUS * 2)/scale));
g2.fillOval(
VisualizationInjector.scaleValue(pos.getX())
- WAYPOINT_WEAK_RADIUS,
VisualizationInjector.scaleValue(pos.getY())
- WAYPOINT_WEAK_RADIUS,
WAYPOINT_WEAK_RADIUS * 2, WAYPOINT_WEAK_RADIUS * 2);
}
}
}
......
......@@ -40,8 +40,8 @@ public class MapLoader implements Component {
public MapLoader(double worldX, double worldY) {
dimensions = new PositionVector(worldX, worldY);
VisualizationTopologyView.VisualizationInjector.WORLD_X = (int)worldX;
VisualizationTopologyView.VisualizationInjector.WORLD_Y = (int)worldY;
VisualizationTopologyView.VisualizationInjector
.setWorldCoordinates((int) worldX, (int) worldY);
}
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment