You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
3.6 KiB
Java

import controlP5.ControlEvent;
import processing.core.*;
public class EuglenaApplet extends PApplet {
/*
This is the main Processing applet.
*/
final int cameraMode = 9;
final int whichArduino = 0;
// Hardware
ProjectorApplet projectorApplet;
Camera camera;
LEDControl ledControl;
// Software components
Menu menu;
Calibrator calibrator;
ClickGetter clickGetter;
//Pen
int penColor = color(200);
int penWidth = 15;
int operationSpeed = 10; //speed for Shrink, Expand, etc.
public static void main(String args[]) {
PApplet.main("EuglenaApplet");
}
@Override
public void settings() {
size(1920, 1200, P2D);
}
@Override
public void setup() {
/*
Applet initialization
*/
clear();
smooth();
// Initialize hardware
camera = new Camera(this, cameraMode);
ledControl = new LEDControl(this, whichArduino);
// Initialize software components
menu = new Menu(this);
// Start up projectorApplet window
// Do this last, in case ProjectorApplet wants to use the camera, arduino, etc.
projectorApplet = new ProjectorApplet(this);
String[] args = {"Euglena projector"};
PApplet.runSketch(args, projectorApplet);
}
@Override
public void draw() {
/*
Draw loop
*/
//Draw the menu
menu.draw(this, ledControl);
//Update webcam and draw the updated image to the screen
camera.updateImage();
imageMode(PApplet.CORNER);
image(camera.getImage(), 0, 0, width - menu.width, height);
}
@Override
public void mouseClicked(){
// Ignore mouse clicks in menu area
if (mouseX > width - menu.width) {
return;
}
// If we have a clickGetter, use that to handle the mouse click
if (clickGetter != null) {
boolean done = clickGetter.click(mouseX, mouseY);
if (done) {
clickGetter = null;
}
}
}
@Override
public void keyPressed() {
/*
Key-down handler
*/
ledControl.keyPressed(key);
if (key == CODED) {
projectorApplet.calibrator.buttonPressed(keyCode);
} else {
switch(key) {
case ENTER:
//TODO: snapshot
//snapshot();
break;
case 'r':
//TODO: record
break;
}
}
}
@Override
public void keyReleased() {
/*
Key-up handler
*/
ledControl.keyReleased(key);
}
public void controlEvent(ControlEvent theEvent) {
/*
Pass menu events to the menu component
*/
menu.controlEvent(theEvent);
}
void drawArrow(int cx, int cy, int len, float angle){
/*
Utility function for drawing an arrow
*/
pushMatrix();
translate(cx, cy);
rotate(radians(angle));
line(0,0,len, 0);
line(len, 0, len - 8, -8);
line(len, 0, len - 8, 8);
popMatrix();
}
void reset() {
/*
Reset the applet to a known state
*/
if (projectorApplet.calibrator.active) {
projectorApplet.calibrator.deactivate();
} else {
projectorApplet.calibrator.deactivate();
ledControl.allOff();
projectorApplet.reset();
}
}
}