package metrobotics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
/**
* @author Pablo Munoz
* This class displays the images received from the Robots.
* It is also used to display the result from the Image Recognition using
* Neural Networks.
*/
public class VisionDisplay extends JPanel {
ArrayList<Robot> robots;
int i = 0;
BufferedImage img;
Robot bot;
String message = "";
public VisionDisplay(ArrayList<Robot> robots) {
super();
setBackground(Color.gray);
// Toolkit tk = Toolkit.getDefaultToolkit();
int Width = 450;//(int)(tk.getScreenSize().getWidth() * 0.15);//0.33);
int Height = 350;//(int)(tk.getScreenSize().getHeight() * 0.15); //0.33);
Dimension d = new Dimension(Width, Height);
setPreferredSize(d);
setBorder(BorderFactory.createRaisedBevelBorder());
this.robots = robots;
// This needs to be in a Thread
VisionDisplayThread thread = new VisionDisplayThread(this);
thread.start();
//CameraThread cameraThread = new CameraThread(this);
//cameraThread.start();
//System.out.println("Vision started");
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.yellow);
i++;
if(img == null){
g2.setFont(new Font("SansSerif", Font.BOLD, 36));
g2.drawString("NO IMAGE" + i, 50, 100);
}
else{
g2.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
if(message != ""){
g2.drawString(message, this.getWidth()/2 - 50, this.getHeight()/2);
}
}
}
// public void setImage(BufferedImage img) {
// this.img = img;
// repaint();
// }
}
class VisionDisplayThread extends Thread{
Robot bot;
VisionDisplay vi;
VisionDisplayThread(VisionDisplay vi){
this.vi = vi;
}
public void run(){
while(true){
if(Robot.getRobotInUse()!=-1){
bot = vi.robots.get(Robot.getRobotInUse());
vi.img = bot.cameraImage;
vi.repaint();
}
}
}
}