MT4j/examples/drawing/StartExample.java

package drawing;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
 
import javax.media.opengl.GL;
 
import org.mt4j.MTApplication;
import org.mt4j.components.TransformSpace;
import org.mt4j.components.visibleComponents.shapes.MTRoundRectangle;
import org.mt4j.components.visibleComponents.widgets.MTSceneWindow;
import org.mt4j.components.visibleComponents.widgets.buttons.MTImageButton;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapEvent;
import org.mt4j.sceneManagement.AbstractScene;
import org.mt4j.sceneManagement.IPreDrawAction;
import org.mt4j.util.ConstantsAndSettings;
import org.mt4j.util.math.Vector3D;
import org.mt4j.util.opengl.GLFBO;
 
import processing.core.PImage;
import processing.opengl.PGraphicsOpenGL;
 
public class StartExample extends MTApplication{
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
 
 
        public static void main(String args[]){
                initialize();
        }
 
        
        public void startUp(){
                this.addScene(new MainDrawingScene(this, "Main drawing scene"));
        }
 
 
        private class MainDrawingScene extends AbstractScene {
                private MTApplication pa;
 
                public MainDrawingScene(MTApplication mtApplication, String name) {
                        super(mtApplication, name);
                        this.pa = mtApplication;
 
                        //Create window frame
                MTRoundRectangle windowRect4 = new MTRoundRectangle(-50,-50, 0, pa.width+100, pa.height+100, 25,25, pa);
                this.getCanvas().addChild(windowRect4);
                DrawingScene drawingScene = new DrawingScene(pa, "drawingScene Scene");
                drawingScene.setClear(false);
                //Create the drawing scene as a window
                final MTSceneWindow lws4 = new MTSceneWindow(0,0, pa, drawingScene);
                lws4.setStrokeColor(new MTColor(155,155,155));
                windowRect4.scale(0.5f, 0.5f, 1, new Vector3D(pa.width/2f, pa.height/2f, 0), TransformSpace.RELATIVE_TO_PARENT);
                windowRect4.addChild(lws4);
 
                //Create eraser button
                PImage eraser = pa.loadImage(System.getProperty("user.dir")+File.separator + "examples"+ File.separator +"drawing"+ File.separator + File.separator +"data"+ File.separator + "Kde_crystalsvg_eraser.png");
                MTImageButton b = new MTImageButton(eraser, pa);
                b.setNoStroke(true);
                b.translate(new Vector3D(-50,0,0));
                b.addActionListener(new ActionListener(){
                                
                                public void actionPerformed(ActionEvent ae) {
                                        switch (ae.getID()) {
                                        case TapEvent.BUTTON_CLICKED:{
                                                //As we are messing with opengl here, we make sure it happens in the rendering thread
                                                pa.invokeLater(new Runnable() {
                                                        
                                                        public void run() {
                                                           //Clear the framebuffer (FBO)
                                                           lws4.getFbo().clear(true, 0, 0, 0, 0, true);                                            
                                                        }
                                                });
                                        }break;
                                        default:
                                                break;
                                        }
                                }
                });
                windowRect4.addChild(b);
                }
 
                
                public void init() {  }
 
                
                public void shutDown() {      }
        }
 
}

MT4j/examples/drawing/DrawingScene.java

package drawing;
 
import org.mt4j.MTApplication;
import org.mt4j.components.MTComponent;
import org.mt4j.components.visibleComponents.shapes.MTEllipse;
import org.mt4j.input.ComponentInputProcessorHandler;
import org.mt4j.input.IMTInputEventListener;
import org.mt4j.input.inputData.InputMotion;
import org.mt4j.input.inputData.MTInputEvent;
import org.mt4j.input.inputData.MTCursorInputEvt;
import org.mt4j.sceneManagement.AbstractScene;
import org.mt4j.util.math.Vector3D;
 
import processing.core.PGraphics;
 
 
public class DrawingScene extends AbstractScene {
 
        private MTApplication mtApp;
 
        public DrawingScene(MTApplication mtApplication, String name) {
                super(mtApplication, name);
                this.mtApp = mtApplication;
 
                this.getCanvas().addInputListener(new IMTInputEventListener() {
                        
                public boolean processInputEvent(MTInputEvent inEvt){
                        if(inEvt instanceof MTCursorInputEvt){
                                MTCursorInputEvt posEvt = (MTCursorInputEvt)inEvt;
                                InputMotion m = posEvt.getMotion();
                                MTCursorInputEvt prev = m.getPreviousEventOf(posEvt);
 
                                Vector3D pos = new Vector3D(posEvt.getPosX(), posEvt.getPosY(), 0);
 
                                if (prev == null){
                                        prev = posEvt;
                                }else{
                                        Vector3D prevPos = new Vector3D(prev.getPosX(), prev.getPosY(), 0);
                                        Vector3D moveVect = prevPos.getSubtracted(pos);
 
                                        Vector3D betweenA = moveVect.getScaled(0.25f);
                                        Vector3D betweenB = moveVect.getScaled(0.5f);
                                        Vector3D betweenC = moveVect.getScaled(0.75f);
 
                                        Vector3D betweenVectA = pos.getAdded(betweenA);
                                        Vector3D betweenVectB = pos.getAdded(betweenB);
                                        Vector3D betweenVectC = pos.getAdded(betweenC);
 
                                        addNewPoint(betweenVectA);
                                        addNewPoint(betweenVectB);
                                        addNewPoint(betweenVectC);
                                }
 
                                addNewPoint(pos);
                        }
                        return true;
                }
                });
 
 
        }
 
        private void addNewPoint(Vector3D where){
                MTEllipse fingerCircle = new MTEllipse(mtApp, where, 12, 12, 10);
                fingerCircle.setPickable(false);
                fingerCircle.setNoFill(false);
                fingerCircle.setNoStroke(true);
                fingerCircle.setDrawSmooth(true);
                fingerCircle.setFillColor(new MTColor(40, 130, 250, 255));
                fingerCircle.setDepthBufferDisabled(true);
                getCanvas().addChild(fingerCircle);
        }
 
        
        public void init() {
 
        }
 
        
        public void drawAndUpdate(PGraphics graphics, long timeDelta) {
                super.drawAndUpdate(graphics, timeDelta);
 
                //As we dont clear the background each frame its enough to draw each shape once
                //and then remove it afterwards
                MTComponent[] children = this.getCanvas().getChildren();
                for (int i = 0; i < children.length; i++) {
                        children[i].destroy();
                }
        }
 
 
        
        public void shutDown() {
 
        }
}
Powered by MediaWiki contact