ModularMovementModelViz.java 4.78 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
 * Copyright (c) 2005-2015 KOM – Multimedia Communications Lab
 *
 * This file is part of PeerfactSim.KOM.
 * 
 * PeerfactSim.KOM is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 * 
 * PeerfactSim.KOM is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with PeerfactSim.KOM.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package de.tud.kom.p2psim.impl.topology.movement.modularosm;

23
import java.awt.AlphaComposite;
24
25
26
27
28
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
29
import java.awt.geom.Point2D;
30

31
import javax.swing.JCheckBoxMenuItem;
32
import javax.swing.JComponent;
33
import javax.swing.JMenu;
34
35
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
36

37
import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
38
import de.tud.kom.p2psim.impl.topology.PositionVector;
39
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
40
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
41
42
import de.tud.kom.p2psim.impl.topology.views.visualization.ui.VisualizationComponent;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.AttractionPoint;
43
44

/**
45
46
 * Visualization Component of the Attraction Points in the Modular Movement
 * Model.
47
48
 * 
 * 
49
 * @author Martin Hellwig, Bjoern Richerzhagen
50
51
 * @version 1.0, 02.07.2015
 */
52
53
public class ModularMovementModelViz extends JComponent
		implements VisualizationComponent {
54
55
56

	private ModularMovementModel movementModel;

57
58
59
60
61
62
63
64
65
66
67
	protected boolean showAttractionPoints = true;

	protected boolean showNodePositions = true;

	private JMenu menu;

	private final static int NODE_PAD = 2;

	private final static int ATTR_PAD = 10;

	private static Color COLOR_ATTR_POINT = Color.decode("#4A7B9D");
68

69
	public ModularMovementModelViz(ModularMovementModel model) {
70
71
		setBounds(0, 0, VisualizationInjector.getWorldX(),
				VisualizationInjector.getWorldY());
72
73
74
		setOpaque(true);
		setVisible(true);
		this.movementModel = model;
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

		menu = new JMenu("Mobility Model");
		menu.add(createCheckboxAp());
		menu.add(createCheckboxNodePositions());
	}

	private JCheckBoxMenuItem createCheckboxAp() {
		final JCheckBoxMenuItem checkBox = new JCheckBoxMenuItem(
				"show attraction points", showAttractionPoints);
		checkBox.addChangeListener(new ChangeListener() {
			@Override
			public void stateChanged(ChangeEvent e) {
				showAttractionPoints = checkBox.isSelected();
				VisualizationInjector.invalidate();
			}
		});
		return checkBox;
	}

	private JCheckBoxMenuItem createCheckboxNodePositions() {
		final JCheckBoxMenuItem checkBox = new JCheckBoxMenuItem(
				"show node positions", showNodePositions);
		checkBox.addChangeListener(new ChangeListener() {
			@Override
			public void stateChanged(ChangeEvent e) {
				showNodePositions = checkBox.isSelected();
				VisualizationInjector.invalidate();
			}
		});
		return checkBox;
105
106
107
108
109
110
111
112
113
	}

	@Override
	public void paint(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);

114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
		if (showAttractionPoints) {
			for (AttractionPoint aPoint : movementModel.getAttractionPoints()) {
				Point point = ((PositionVector) aPoint).asPoint();
				// draw border
				g2.setColor(Color.BLACK);
				g2.setFont(VisualizationTopologyView.FONT_MEDIUM);
				g2.drawString(aPoint.getName(),
						VisualizationInjector.scaleValue(point.x) - ATTR_PAD,
						VisualizationInjector.scaleValue(point.y) - ATTR_PAD);
				g2.setColor(COLOR_ATTR_POINT);
				g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
				g2.fillOval(
						VisualizationInjector.scaleValue(point.x) - ATTR_PAD,
						VisualizationInjector.scaleValue(point.y) - ATTR_PAD,
						ATTR_PAD * 2 + 1, ATTR_PAD * 2 + 1);

			}
		}
132

133
134
135
136
137
138
139
140
141
		if (showNodePositions) {
			for (SimLocationActuator comp : movementModel
					.getAllLocationActuators()) {
				Point2D pt = comp.getRealPosition().asPoint();
				g2.setColor(Color.GRAY);
				g2.fillOval((int) pt.getX() - NODE_PAD,
						(int) pt.getY() - NODE_PAD, NODE_PAD * 2 + 1,
						NODE_PAD * 2 + 1);
			}
142
143
		}
	}
144
145
146
147
148
149
150
151
152
153
154
155
156

	@Override
	public String getDisplayName() {
		return "Mobility Model";
	}

	@Override
	public JComponent getComponent() {
		return this;
	}

	@Override
	public JMenu getCustomMenu() {
157
		return menu;
158
159
160
161
162
163
	}

	@Override
	public boolean isHidden() {
		return false;
	}
164
}