/* Session when program is initially started, screen changes when doodle button is pressed */ import processing.core.*; class Calibrator { boolean active; PImage drawnScreen; ProjectorApplet projector; /////////////////////// proj img screen alignment float offsetx, offsety, magx, magy, rot; void reset() { magx = 7.4f; // reduction factor in X magy = 6.0f ; // reduction factor in Y offsetx = 0.423f; // starts projectorApplet screen at distance from right most edge offsety = 0.44f; // distance from topmost edge rot = 0; // rotation of projection starts at 0 degrees } Calibrator(ProjectorApplet projector){ this.projector = projector; this.reset(); this.active = false; } void toggle() { if (this.active) { this.deactivate(); } else { this.activate(); } } void activate() { this.active = true; this.drawnScreen = projector.get(0, 0, projector.width, projector.height); } void deactivate() { projector.clear(); projector.set(projector.width, 0, this.drawnScreen); this.active = false; } void buttonPressed(int keyCode){ if (!this.active) { return; } // Calibration of projectorApplet field of view switch(keyCode) { case PApplet.UP: offsety = offsety - .001f; //Moves projections up in app view break; case PApplet.DOWN: offsety = offsety + .001f; //Moves projections down break; case PApplet.LEFT: offsetx = offsetx - .001f; // Moves projections left break; case PApplet.RIGHT: offsetx = offsetx + .001f; // Moves projections right break; case 36: magx = magx + .05f; // HOME button reduces width of projections break; case 35: magx = magx - .05f; // END button increases width of projections break; case 33: magy = magy + .05f; // PAGE UP button reduces height of projections break; case 34: magy = magy - .05f; // PAGE DOWN button increases height of projections break; case PApplet.SHIFT: PApplet.println("x-offset: " + offsetx + " | y-offset: " + offsety); PApplet.println("x-magnification: " + magx + " | y-magnification: " + magy); default: break; } } void draw(EuglenaApplet a) { if (!this.active) { return; } projector.clear(); float x0 = a.width * offsetx; float y0 = a.height * offsety; float dx = (a.width - a.menu.width)/magx; float dy = a.height/magy; // Hello World on 2nd Monitor projector.noStroke(); projector.textSize(50); projector.fill(projector.color(0, 90, 0)); projector.text("hello,", x0+20, y0+60); projector.fill(projector.color(0, 0, 90)); projector.text("world!", x0+20, y0+110); // Four dots used for calibration (may need to change code so that it better matches the math used to convert other points) projector.fill(projector.color(0, 0, 190)); projector.ellipse(x0, y0, 5, 5); projector.fill(projector.color(190,0,0)); projector.ellipse(x0, y0+dy-10, 5, 5); projector.fill(255); projector.ellipse(x0+dx-5, y0+dy-10, 5, 5); projector.fill(projector.color(0, 190, 0)); projector.ellipse(x0+dx-5, y0, 5, 5); } }