Merge branch 'master' of mpxd.net:jan/euglena
commit
0c25bd0949
@ -1,3 +1,43 @@
|
||||
public interface ClickGetter {
|
||||
boolean click(int mouseX, int mouseY);
|
||||
}
|
||||
|
||||
|
||||
//public interface Shape {
|
||||
// public int numVertices();
|
||||
//}
|
||||
//
|
||||
//
|
||||
//class Circle2 implements Shape {
|
||||
// Circle2() {
|
||||
// blah;
|
||||
// }
|
||||
//
|
||||
// int numVertices() {
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
// void expand() {
|
||||
// blah2;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//class Square implements Shape {
|
||||
// int numVertices() {
|
||||
// return 4;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//
|
||||
//Shape g = new Circle2();
|
||||
////g.expand(); // bad
|
||||
//println(g.numVertices()); //good
|
||||
//g = new Square();
|
||||
//println(g.numVertices());
|
||||
//
|
||||
//void printNumberOfVertices(Shape s) {
|
||||
// println(s.numVertices());
|
||||
//}
|
||||
//
|
||||
//printNumberOfVertices(new Circle2());
|
||||
//printNumberOfVertices(new Square());
|
||||
|
@ -0,0 +1,99 @@
|
||||
import processing.core.*;
|
||||
import static processing.core.PApplet.*;
|
||||
|
||||
|
||||
public class Expand {
|
||||
float corner1x, corner1y, corner2x, corner2y, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage expandRegion = null;
|
||||
|
||||
private boolean corner1complete;
|
||||
|
||||
Expand(float speed) {
|
||||
this.speed = speed;
|
||||
this.corner1complete = false;
|
||||
}
|
||||
|
||||
|
||||
Expand(float corner1x, float corner1y, float corner2x, float corner2y, float speed) {
|
||||
this.corner1x = corner1x;
|
||||
this.corner1y = corner1y;
|
||||
this.corner2x = corner2x;
|
||||
this.corner2y = corner2y;
|
||||
this.speed = speed;
|
||||
|
||||
this.corner1complete = true;
|
||||
}
|
||||
|
||||
float aspectRatio() {
|
||||
return abs((corner2x - corner1x) / (corner2y - corner1y));
|
||||
}
|
||||
|
||||
float centerx() {
|
||||
return (corner1x + corner2x) / 2;
|
||||
}
|
||||
|
||||
float centery() {
|
||||
return (corner1y + corner2y) / 2;
|
||||
}
|
||||
|
||||
void saveExpandRegion(ProjectorApplet p) {
|
||||
this.expandRegion = p.get(
|
||||
(int) p.convertXCoord(corner1x),
|
||||
(int) p.convertYCoord(corner1y),
|
||||
(int) abs(p.convertXDistance(corner2x - corner1x)),
|
||||
(int) abs(p.convertYDistance(corner2y - corner1y)));
|
||||
}
|
||||
|
||||
|
||||
ProjectorCommand makeProjectorCommand() {
|
||||
return (ProjectorApplet p) -> {
|
||||
if (expandRegion == null) {
|
||||
millisInit = p.millis();
|
||||
saveExpandRegion(p);
|
||||
}
|
||||
|
||||
timeElapsed = p.millis() - millisInit;
|
||||
|
||||
float spaceElapsed = speed * (timeElapsed / 1000f);
|
||||
|
||||
if (p.convertYDistance(corner2y - corner1y) + spaceElapsed >= p.convertYDistance(p.height)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
p.noFill();
|
||||
p.noStroke();
|
||||
p.rectMode(CORNER);
|
||||
p.rect(p.convertXCoord(corner1x), p.convertYCoord(corner1y),
|
||||
p.convertXDistance(corner2x - corner1x), p.convertYDistance(corner2y - corner1y));
|
||||
|
||||
p.imageMode(CENTER);
|
||||
p.image(expandRegion,
|
||||
p.convertXCoord(this.centerx()),
|
||||
p.convertYCoord(this.centery()),
|
||||
p.convertXDistance(corner2x - corner1x) + spaceElapsed * aspectRatio(),
|
||||
p.convertYDistance(corner2y - corner1y) + spaceElapsed);
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
ClickGetter makeClickGetter(ProjectorApplet p) {
|
||||
return (int x, int y) -> {
|
||||
if (!corner1complete) {
|
||||
corner1x = x;
|
||||
corner1y = y;
|
||||
corner1complete = true;
|
||||
return false;
|
||||
|
||||
} else {
|
||||
corner2x = x;
|
||||
corner2y = y;
|
||||
|
||||
p.commandQueue.add(makeProjectorCommand());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,84 +0,0 @@
|
||||
class Expand {
|
||||
ExpandWindow expandinprogress;
|
||||
|
||||
boolean corner1complete;
|
||||
|
||||
void reset() {
|
||||
expandinprogress = new ExpandWindow(-1,-1,0,0,0);
|
||||
corner1complete = false;
|
||||
}
|
||||
|
||||
Expand(){
|
||||
corner1complete = false;
|
||||
}
|
||||
|
||||
void mouseClicked(float x, float y){
|
||||
if (!corner1complete){
|
||||
expandinprogress.corner1x = x;
|
||||
expandinprogress.corner1y = y;
|
||||
corner1complete = true;
|
||||
} else {
|
||||
expandinprogress.corner2x = x;
|
||||
expandinprogress.corner2y = y;
|
||||
expandinprogress.speed = speed;
|
||||
expandinprogress.millisInit = millis();
|
||||
expandinprogress.saveExpandRegion();
|
||||
expandwindows.add(expandinprogress);
|
||||
this.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ExpandWindow {
|
||||
float corner1x, corner1y, corner2x, corner2y, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage expandRegion;
|
||||
|
||||
ExpandWindow(float corner1x, float corner1y, float corner2x, float corner2y, float speed) {
|
||||
this.corner1x = corner1x;
|
||||
this.corner1y = corner1y;
|
||||
this.corner2x = corner2x;
|
||||
this.corner2y = corner2y;
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
float aspectRatio() {
|
||||
return abs((corner2x - corner1x) / (corner2y - corner1y));
|
||||
}
|
||||
|
||||
float centerx() {
|
||||
return (corner1x + corner2x) / 2;
|
||||
}
|
||||
|
||||
float centery() {
|
||||
return (corner1y + corner2y) / 2;
|
||||
}
|
||||
|
||||
void saveExpandRegion() {
|
||||
this.expandRegion = get(int(convertXCoord(corner1x)), int(convertYCoord(corner1y)),
|
||||
int(convertXDistance(corner2x - corner1x)),int(convertYDistance(corner2y - corner1y)));
|
||||
}
|
||||
|
||||
void draw() {
|
||||
|
||||
timeElapsed = millis() - millisInit;
|
||||
|
||||
if (convertYDistance(corner2y - corner1y) + speed * (timeElapsed / 1000) < convertYDistance(screenHeight)) {
|
||||
|
||||
noFill();
|
||||
noStroke();
|
||||
rectMode(CORNER);
|
||||
rect(convertXCoord(corner1x), convertYCoord(corner1y),
|
||||
convertXDistance(corner2x - corner1x), convertYDistance(corner2y - corner1y));
|
||||
|
||||
|
||||
imageMode(CENTER);
|
||||
image(expandRegion, convertXCoord(this.centerx()), convertYCoord(this.centery()),
|
||||
convertXDistance(corner2x - corner1x) + speed * this.aspectRatio() * (timeElapsed / 1000),
|
||||
convertYDistance(corner2y - corner1y) + speed * (timeElapsed / 1000));
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
public interface ProjectorCommand {
|
||||
boolean run(ProjectorApplet p);
|
||||
boolean run(ProjectorApplet p) throws ProjectorCommandException;
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
class ProjectorCommandException extends Exception {
|
||||
ProjectorCommandException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
import processing.core.*;
|
||||
import static processing.core.PApplet.*;
|
||||
|
||||
|
||||
public class Rotate {
|
||||
float centerx, centery, radius, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage rotateRegion = null;
|
||||
|
||||
private boolean centercomplete;
|
||||
|
||||
Rotate(float speed) {
|
||||
this.speed = speed;
|
||||
this.centercomplete = false;
|
||||
}
|
||||
|
||||
Rotate(float centerx, float centery, float radius, float speed) {
|
||||
this.centerx = centerx;
|
||||
this.centery = centery;
|
||||
this.radius = radius;
|
||||
this.speed = speed;
|
||||
|
||||
this.centercomplete = true;
|
||||
}
|
||||
|
||||
void saveRotateRegion(ProjectorApplet p) {
|
||||
this.rotateRegion = p.get(
|
||||
(int) p.convertXCoord(centerx - radius),
|
||||
(int) p.convertYCoord(centery - radius),
|
||||
(int) p.convertXDistance(2*radius),
|
||||
(int) p.convertYDistance(2*radius));
|
||||
}
|
||||
|
||||
ProjectorCommand makeProjectorCommand() {
|
||||
return (ProjectorApplet p) -> {
|
||||
if (rotateRegion == null) {
|
||||
millisInit = p.millis();
|
||||
saveRotateRegion(p);
|
||||
}
|
||||
|
||||
timeElapsed = p.millis() - millisInit;
|
||||
|
||||
p.noFill();
|
||||
p.noStroke();
|
||||
p.rectMode(CENTER);
|
||||
p.rect(p.convertXCoord(centerx), p.convertYCoord(centery),
|
||||
p.convertXDistance(radius), p.convertYDistance(radius));
|
||||
|
||||
p.pushMatrix();
|
||||
p.translate(p.convertXCoord(centerx), p.convertYCoord(centery));
|
||||
|
||||
p.rotate(radians(speed * timeElapsed/1000f));
|
||||
|
||||
p.imageMode(CENTER);
|
||||
p.image(rotateRegion, 0, 0, p.convertXDistance(2*radius), p.convertYDistance(2*radius));
|
||||
|
||||
p.popMatrix();
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
ClickGetter makeClickGetter(ProjectorApplet p){
|
||||
return (int x, int y) -> {
|
||||
if (!centercomplete){
|
||||
centerx = x;
|
||||
centery = y;
|
||||
centercomplete = true;
|
||||
return false;
|
||||
|
||||
} else {
|
||||
radius = sqrt(pow(x - centerx, 2) + pow(y - centery, 2));
|
||||
|
||||
p.commandQueue.add(makeProjectorCommand());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
class Rotate {
|
||||
RotateWindow rotateinprogress;
|
||||
|
||||
boolean centercomplete;
|
||||
|
||||
void reset() {
|
||||
rotateinprogress = new RotateWindow(-1,-1,0,0);
|
||||
centercomplete = false;
|
||||
}
|
||||
|
||||
Rotate(){
|
||||
centercomplete = false;
|
||||
}
|
||||
|
||||
void mouseClicked(float x, float y){
|
||||
if (!centercomplete){
|
||||
rotateinprogress.centerx = x;
|
||||
rotateinprogress.centery = y;
|
||||
centercomplete = true;
|
||||
} else {
|
||||
rotateinprogress.radius = sqrt(pow(x - rotateinprogress.centerx, 2) + pow(y - rotateinprogress.centery, 2));
|
||||
rotateinprogress.speed = speed;
|
||||
rotateinprogress.millisInit = millis();
|
||||
rotateinprogress.saveRotateRegion();
|
||||
rotatewindows.add(rotateinprogress);
|
||||
this.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RotateWindow {
|
||||
float centerx, centery, radius, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage rotateRegion;
|
||||
|
||||
RotateWindow(float centerx, float centery, float radius, float speed) {
|
||||
this.centerx = centerx;
|
||||
this.centery = centery;
|
||||
this.radius = radius;
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
void saveRotateRegion() {
|
||||
this.rotateRegion = get(int(convertXCoord(centerx - radius)), int(convertYCoord(centery - radius)),
|
||||
int(convertXDistance(2*radius)),int(convertYDistance(2*radius)));
|
||||
}
|
||||
|
||||
void draw() {
|
||||
|
||||
timeElapsed = millis() - millisInit;
|
||||
|
||||
noFill();
|
||||
noStroke();
|
||||
rectMode(CENTER);
|
||||
rect(convertXCoord(centerx), convertYCoord(centery),
|
||||
convertXDistance(radius), convertYDistance(radius));
|
||||
|
||||
pushMatrix();
|
||||
translate(convertXCoord(centerx), convertYCoord(centery));
|
||||
|
||||
rotate(radians(speed*timeElapsed/1000));
|
||||
|
||||
imageMode(CENTER);
|
||||
image(rotateRegion, 0, 0, convertXDistance(2*radius), convertYDistance(2*radius));
|
||||
|
||||
popMatrix();
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
import processing.core.*;
|
||||
import static processing.core.PApplet.*;
|
||||
|
||||
|
||||
class Shrink {
|
||||
float corner1x, corner1y, corner2x, corner2y, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage shrinkRegion = null;
|
||||
|
||||
private boolean corner1complete;
|
||||
|
||||
Shrink(float speed) {
|
||||
this.speed = speed;
|
||||
this.corner1complete = false;
|
||||
}
|
||||
|
||||
Shrink(float corner1x, float corner1y, float corner2x, float corner2y, float speed) {
|
||||
this.corner1x = corner1x;
|
||||
this.corner1y = corner1y;
|
||||
this.corner2x = corner2x;
|
||||
this.corner2y = corner2y;
|
||||
this.speed = speed;
|
||||
|
||||
this.corner1complete = true;
|
||||
}
|
||||
|
||||
float aspectRatio() {
|
||||
return abs((corner2x-corner1x)/(corner2y-corner1y));
|
||||
}
|
||||
|
||||
float centerx() {
|
||||
return (corner1x + corner2x) / 2;
|
||||
}
|
||||
|
||||
float centery() {
|
||||
return (corner1y + corner2y) / 2;
|
||||
}
|
||||
|
||||
void saveShrinkRegion(ProjectorApplet p) {
|
||||
this.shrinkRegion = p.get(
|
||||
(int) p.convertXCoord(corner1x),
|
||||
(int) p.convertYCoord(corner1y),
|
||||
(int) abs(p.convertXDistance(corner2x-corner1x)),
|
||||
(int) abs(p.convertYDistance(corner2y-corner1y)));
|
||||
}
|
||||
|
||||
ProjectorCommand makeProjectorCommand() {
|
||||
return (ProjectorApplet p) -> {
|
||||
if (shrinkRegion == null) {
|
||||
millisInit = p.millis();
|
||||
saveShrinkRegion(p);
|
||||
}
|
||||
|
||||
timeElapsed = p.millis() - millisInit;
|
||||
|
||||
if (p.convertXDistance(corner2x-corner1x) - speed * aspectRatio() * (timeElapsed/1000f) < 25) {
|
||||
return true;
|
||||
}
|
||||
|
||||
p.noFill();
|
||||
p.noStroke();
|
||||
p.rectMode(CORNER);
|
||||
p.rect(p.convertXCoord(corner1x), p.convertYCoord(corner1y),
|
||||
p.convertXDistance(corner2x - corner1x), p.convertYDistance(corner2y - corner1y));
|
||||
|
||||
p.imageMode(CENTER);
|
||||
p.image(shrinkRegion, p.convertXCoord(this.centerx()), p.convertYCoord(this.centery()),
|
||||
p.convertXDistance(corner2x - corner1x) - speed * aspectRatio() * (timeElapsed / 1000f),
|
||||
p.convertYDistance(corner2y - corner1y) - speed * (timeElapsed / 1000f));
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
ClickGetter makeClickGetter(ProjectorApplet p){
|
||||
return (int x, int y) -> {
|
||||
if (!corner1complete){
|
||||
corner1x = x;
|
||||
corner1y = y;
|
||||
corner1complete = true;
|
||||
return false;
|
||||
|
||||
} else {
|
||||
corner2x = x;
|
||||
corner2y = y;
|
||||
|
||||
p.commandQueue.add(makeProjectorCommand());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
class Shrink {
|
||||
ShrinkWindow shrinkinprogress;
|
||||
|
||||
boolean corner1complete;
|
||||
|
||||
void reset() {
|
||||
shrinkinprogress = new ShrinkWindow(-1,-1,0,0,0);
|
||||
corner1complete = false;
|
||||
}
|
||||
|
||||
Shrink(){
|
||||
corner1complete = false;
|
||||
}
|
||||
|
||||
void mouseClicked(float x, float y){
|
||||
if (!corner1complete){
|
||||
shrinkinprogress.corner1x = x;
|
||||
shrinkinprogress.corner1y = y;
|
||||
corner1complete = true;
|
||||
} else {
|
||||
shrinkinprogress.corner2x = x;
|
||||
shrinkinprogress.corner2y = y;
|
||||
shrinkinprogress.speed = speed;
|
||||
shrinkinprogress.millisInit = millis();
|
||||
shrinkinprogress.saveShrinkRegion();
|
||||
shrinkwindows.add(shrinkinprogress);
|
||||
this.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ShrinkWindow {
|
||||
float corner1x, corner1y, corner2x, corner2y, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage shrinkRegion;
|
||||
|
||||
ShrinkWindow(float corner1x, float corner1y, float corner2x, float corner2y, float speed) {
|
||||
this.corner1x = corner1x;
|
||||
this.corner1y = corner1y;
|
||||
this.corner2x = corner2x;
|
||||
this.corner2y = corner2y;
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
float aspectRatio() {
|
||||
return abs((corner2x-corner1x)/(corner2y-corner1y));
|
||||
}
|
||||
|
||||
float centerx() {
|
||||
return (corner1x + corner2x) / 2;
|
||||
}
|
||||
|
||||
float centery() {
|
||||
return (corner1y + corner2y) / 2;
|
||||
}
|
||||
|
||||
void saveShrinkRegion() {
|
||||
this.shrinkRegion = get(int(convertXCoord(corner1x)), int(convertYCoord(corner1y)),
|
||||
abs(int(convertXDistance(corner2x-corner1x))), abs(int(convertYDistance(corner2y-corner1y))));
|
||||
}
|
||||
|
||||
void draw(){
|
||||
|
||||
timeElapsed = millis()-millisInit;
|
||||
if(convertXDistance(corner2x-corner1x) - speed * aspectRatio() * (timeElapsed/1000) > 25) {
|
||||
|
||||
noFill();
|
||||
noStroke();
|
||||
rectMode(CORNER);
|
||||
rect(convertXCoord(corner1x), convertYCoord(corner1y),
|
||||
convertXDistance(corner2x - corner1x), convertYDistance(corner2y - corner1y));
|
||||
|
||||
|
||||
imageMode(CENTER);
|
||||
image(shrinkRegion, convertXCoord(this.centerx()), convertYCoord(this.centery()),
|
||||
convertXDistance(corner2x - corner1x) - speed * aspectRatio() * (timeElapsed / 1000),
|
||||
convertYDistance(corner2y - corner1y) - speed * (timeElapsed / 1000));
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// print(convertXDistance(corner2x-corner1x) - speed * aspectRatio() * (timeElapsed/1000));
|
||||
// print("\n");
|
||||
// print(timeElapsed);
|
||||
// print("\n");
|
||||
// print(aspectRatio);
|
||||
// print("\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
import processing.core.*;
|
||||
import static processing.core.PApplet.*;
|
||||
|
||||
|
||||
public class Translate {
|
||||
float corner1x, corner1y, corner2x, corner2y, endpointx, endpointy, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage translateRegion = null;
|
||||
|
||||
private boolean corner1complete, corner2complete;
|
||||
|
||||
Translate(float speed) {
|
||||
this.speed = speed;
|
||||
|
||||
this.corner1complete = false;
|
||||
this.corner2complete = false;
|
||||
}
|
||||
|
||||
Translate(float corner1x, float corner1y, float corner2x, float corner2y,
|
||||
float endpointx, float endpointy, float speed) {
|
||||
this.corner1x = corner1x;
|
||||
this.corner1y = corner1y;
|
||||
this.corner2x = corner2x;
|
||||
this.corner2y = corner2y;
|
||||
this.endpointx = endpointx;
|
||||
this.endpointy = endpointy;
|
||||
this.speed = speed;
|
||||
|
||||
this.corner1complete = true;
|
||||
this.corner2complete = true;
|
||||
}
|
||||
|
||||
|
||||
float centerx() {
|
||||
return (corner1x + corner2x) / 2;
|
||||
}
|
||||
|
||||
float centery() {
|
||||
return (corner1y + corner2y) / 2;
|
||||
}
|
||||
|
||||
float theta() {
|
||||
return (atan((endpointy-centery())/(endpointx-centerx())));
|
||||
}
|
||||
|
||||
void saveTranslateRegion(ProjectorApplet p) {
|
||||
this.translateRegion = p.get(
|
||||
(int) p.convertXCoord(corner1x),
|
||||
(int) p.convertYCoord(corner1y),
|
||||
(int) abs(p.convertXDistance(corner2x-corner1x)),
|
||||
(int) abs(p.convertYDistance(corner2y-corner1y)));
|
||||
}
|
||||
|
||||
|
||||
ProjectorCommand makeProjectorCommand() {
|
||||
return (ProjectorApplet p) -> {
|
||||
if (translateRegion == null) {
|
||||
millisInit = p.millis();
|
||||
saveTranslateRegion(p);
|
||||
}
|
||||
|
||||
timeElapsed = p.millis() - millisInit;
|
||||
|
||||
float spaceElapsed = timeElapsed * speed / 1000f;
|
||||
|
||||
if (spaceElapsed * cos(theta()) * p.calibrator.magx > endpointx - centerx()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
p.noFill();
|
||||
p.noStroke();
|
||||
p.rectMode(CORNERS);
|
||||
p.rect(p.convertXCoord(corner1x) + spaceElapsed * cos(theta()),
|
||||
p.convertYCoord(corner1y) + spaceElapsed * sin(theta()),
|
||||
p.convertXCoord(corner2x) + spaceElapsed * cos(theta()),
|
||||
p.convertYCoord(corner2y) + spaceElapsed * sin(theta()));
|
||||
|
||||
|
||||
p.imageMode(CENTER);
|
||||
p.image(translateRegion,
|
||||
p.convertXCoord(this.centerx()) + spaceElapsed * cos(theta()),
|
||||
p.convertYCoord(this.centery()) + spaceElapsed * sin(theta()),
|
||||
p.convertXDistance(corner2x - corner1x),
|
||||
p.convertYDistance(corner2y - corner1y));
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
ClickGetter makeClickGetter(ProjectorApplet p){
|
||||
return (int x, int y) -> {
|
||||
if (!corner1complete){
|
||||
corner1x = x;
|
||||
corner1y = y;
|
||||
corner1complete = true;
|
||||
return false;
|
||||
|
||||
} else if (!corner2complete) {
|
||||
corner2x = x;
|
||||
corner2y = y;
|
||||
corner2complete = true;
|
||||
return false;
|
||||
|
||||
} else{
|
||||
endpointx = x;
|
||||
endpointy = y;
|
||||
|
||||
p.commandQueue.add(makeProjectorCommand());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
class Translate {
|
||||
TranslateWindow translateWindowinprogress;
|
||||
|
||||
boolean corner1complete, corner2complete;
|
||||
|
||||
void reset() {
|
||||
translateWindowinprogress = new TranslateWindow(-1,-1,0,0,0,0,0);
|
||||
corner1complete = false;
|
||||
corner2complete = false;
|
||||
}
|
||||
|
||||
Translate(){
|
||||
corner1complete = false;
|
||||
corner2complete = false;
|
||||
}
|
||||
|
||||
void mouseClicked(float x, float y){
|
||||
if (!corner1complete){
|
||||
translateWindowinprogress.corner1x = x;
|
||||
translateWindowinprogress.corner1y = y;
|
||||
corner1complete = true;
|
||||
} else if (!corner2complete) {
|
||||
translateWindowinprogress.corner2x = x;
|
||||
translateWindowinprogress.corner2y = y;
|
||||
corner2complete = true;
|
||||
} else{
|
||||
translateWindowinprogress.endpointx = x;
|
||||
translateWindowinprogress.endpointy = y;
|
||||
translateWindowinprogress.speed = speed;
|
||||
translateWindowinprogress.millisInit = millis();
|
||||
translateWindowinprogress.saveTranslateRegion();
|
||||
translatewindows.add(translateWindowinprogress);
|
||||
this.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TranslateWindow {
|
||||
float corner1x, corner1y, corner2x, corner2y, endpointx, endpointy, speed;
|
||||
int timeElapsed, millisInit;
|
||||
PImage translateRegion;
|
||||
|
||||
TranslateWindow(float corner1x, float corner1y, float corner2x, float corner2y,
|
||||
float endpointx, float endpointy, float speed) {
|
||||
this.corner1x = corner1x;
|
||||
this.corner1y = corner1y;
|
||||
this.corner2x = corner2x;
|
||||
this.corner2y = corner2y;
|
||||
this.endpointx = endpointx;
|
||||
this.endpointy = endpointy;
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
|
||||
// float aspectRatio() {
|
||||
// return abs((corner2x - corner1x) / (corner2y - corner1y));
|
||||
// }
|
||||
|
||||
float centerx() {
|
||||
return (corner1x + corner2x) / 2;
|
||||
}
|
||||
|
||||
float centery() {
|
||||
return (corner1y + corner2y) / 2;
|
||||
}
|
||||
|
||||
float theta() {
|
||||
return (atan((endpointy-centery())/(endpointx-centerx())));
|
||||
}
|
||||
|
||||
void saveTranslateRegion() {
|
||||
this.translateRegion = get(int(convertXCoord(corner1x)), int(convertYCoord(corner1y)),
|
||||
int(abs(convertXDistance(corner2x - corner1x))),int(abs(convertYDistance(corner2y - corner1y))));
|
||||
}
|
||||
|
||||
void draw() {
|
||||
|
||||
timeElapsed = millis() - millisInit;
|
||||
|
||||
if (timeElapsed*speed/1000*cos(theta())*calibrator.magx <= endpointx - centerx()) {
|
||||
|
||||
noFill();
|
||||
noStroke();
|
||||
rectMode(CORNERS);
|
||||
rect(convertXCoord(corner1x) + timeElapsed*speed/1000*cos(theta()),
|
||||
convertYCoord(corner1y) + timeElapsed*speed/1000*sin(theta()),
|
||||
convertXCoord(corner2x) + timeElapsed*speed/1000*cos(theta()),
|
||||
convertYCoord(corner2y) + timeElapsed*speed/1000*sin(theta()));
|
||||
|
||||
|
||||
imageMode(CENTER);
|
||||
image(translateRegion, convertXCoord(this.centerx()) + timeElapsed*speed/1000*cos(theta()),
|
||||
convertYCoord(this.centery()) + timeElapsed*speed/1000*sin(theta()),
|
||||
convertXDistance(corner2x - corner1x), convertYDistance(corner2y - corner1y));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
package oldfiles;
|
||||
|
||||
class EuglenaCounter {
|
||||
|
||||
int roiX, roiY, roiWidth, roiHeight, lastMillis, avgTime;
|
@ -1,4 +1,4 @@
|
||||
/*
|
||||
package oldfiles;/*
|
||||
Previously implemented programs which we need to redo using classes
|
||||
case 2 : // Starts clear program
|
||||
clearScreen();
|
Loading…
Reference in New Issue