MousePressed在tuio中绘制椭圆

时间:2014-05-29 12:05:57

标签: processing

如果有人能帮助我,我将非常感激,我有一个草图,使用户能够在屏幕上用无线喷雾罐绘制涂鸦。此时,安装了tuio代码,当用户按下鼠标按钮时,会发出喷雾声。但是当按下鼠标按钮时,我在草图中创建椭圆时遇到困难。

This is my code;

    import ddf.minim.spi.*;
    import ddf.minim.signals.*;
    import ddf.minim.*;
    import ddf.minim.analysis.*;
    import ddf.minim.ugens.*;
    import ddf.minim.effects.*;

    Minim minim;
    AudioPlayer player;
    AudioInput input;


        /*TUIO processing demo - part of the reacTIVision project
     http://reactivision.sourceforge.net/

     Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>

     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.

     You shgould have greceived a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     */

    // we need to import the TUIO library
    // and declare a TuioProcessing client variable
    import TUIO.*;
    TuioProcessing tuioClient;
    import java.util.*; //ADD THIS LINE TO BE ABLE TO USE TUIOCLIENT WITH PROCESSING 2+


    // these are some helper variables which are used
    // to create scalable graphical feedback
    float cursor_size = 15;
    float object_size = 60;
    float table_size = 760;
    float scale_factor = 1;
    PFont font;

    //declare a boolean to check mouse click
    boolean drag = false;
    int n=0;
    int size[]= {20,40};
    int sizeChosen;
    boolean inside = false;
    PImage bg;
    PImage img;

    PGraphics pg;

    import controlP5.*;
    ControlP5 cp5;

    boolean mp = true;

    void setup () 
    {



    size(1000,1000);//size(screen.width, screen.height).
    smooth();
    noStroke();
    fill(0);
    loop();
    frameRate(30);

    hint(ENABLE_NATIVE_FONTS);
    font = createFont("Arial",18);
    scale_factor = height/table_size;

     // we create an instance of the TuioProcessing client
      // since we add "this" class as an argument the TuioProcessing class expects
      // an implementation of the TUIO callback methods (see below)
      tuioClient  = new TuioProcessing(this);

      ellipseMode( CENTER);
      //smooth();
      noCursor();
      background(170);

    bg = loadImage("brickwall.jpg");
    background(bg);

    img = loadImage("instructions.jpg");
    image (img,30,40,THUMB_SIZE, THUMB_SIZE);

     cp5 = new ControlP5(this);//screenshot button
     cp5.addButton("Save Graffiti Artwork").setPosition(0,650).setSize(200,100);//screenshot details

    minim = new Minim(this);
    player = minim.loadFile("spray_close.wav");
    input = minim.getLineIn();  

    }

    void draw() {

      if (mp = true);
      ellipse(255,0,255,0);


      background(bg);
      textFont(font,18*scale_factor);
      float obj_size = object_size*scale_factor;
      float cur_size = cursor_size*scale_factor;

      Vector tuioObjectList = tuioClient.getTuioObjects();
      for (int i=0;i<tuioObjectList.size();i++) {
        TuioObject tobj = (TuioObject)tuioObjectList.elementAt(i);
        noStroke();
        fill(0);
        pushMatrix();
        translate(tobj.getScreenX(width), tobj.getScreenY(height));
        rotate(tobj.getAngle());
       // ellipse(-obj_size/2, -obj_size/2, obj_size, obj_size);
        popMatrix();
        //fill(255);
        text(""+tobj.getSymbolID(), tobj.getScreenX(width), tobj.getScreenY(height));

      if (mousePressed) {
        ellipse(255,0,255,0);
       // printIn("Pink");


        //mouse press 1
        if (tobj.getSymbolID()==12) {

          ellipse(255,0,255,0);
        }
      }
      }


      Vector tuioCursorList = tuioClient.getTuioCursors();
      for (int i=0;i<tuioCursorList.size();i++) {
        TuioCursor tcur = (TuioCursor)tuioCursorList.elementAt(i);
        Vector pointList = tcur.getPath();

        if (pointList.size()>0) {
          stroke(0, 0, 255);
          TuioPoint start_point = (TuioPoint)pointList.firstElement();
          ;
          for (int j=0;j<pointList.size();j++) {
            TuioPoint end_point = (TuioPoint)pointList.elementAt(j);
            line(start_point.getScreenX(width), start_point.getScreenY(height), end_point.getScreenX(width), end_point.getScreenY(height));
            start_point = end_point;
          }

          stroke(192, 192, 192);
          fill(192, 192, 192);
          ellipse( tcur.getScreenX(width), tcur.getScreenY(height), cur_size, cur_size);
          fill(0);
          text(""+tcur.getCursorID(), tcur.getScreenX(width)-5, tcur.getScreenY(height)+5);

        }
      }


      if (drag) //if drag = true, i-e if mouse click is holding, ellipse are drawing according the mouse's position 
      {
        fill(#FF00FF); //black color
        ellipse(mouseX, mouseY, 50,50); //draw ellipse with x and y mouse's position + size 10*10
        //or line strokeWeight(3);stroke(0);line(mouseX,mouseY,25,25);

      }

       //draw palette size
      for(n=0;n<2;n++)
      {
        fill(0);
        ellipse(360,10+n*40,20*(n+1),20*(n+1));
      }
    }








    //size selector
    void mousePressed() {
      //bDrawFullSize = true;

     if (inside==true){
     sizeChosen=size[n];
     }

     player.play();

    mp = true;

    }

    void mouseReleased() {
      //bDrawFullSize = true;

      drag = false;

      player.close();

      //since close closes the file, we need to load the sound effect again.
      player = minim.loadFile("spray_close.wav");

    }

    //function "drag and drop" 
    void mouseDragged() {
      drag = true;
    }
     // these callback methods are called whenever a TUIO event occurs

    // called when an object is added to the scene
    void addTuioObject(TuioObject tobj) {
      println("add object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());
    }

    // called when an object is removed from the scene
    void removeTuioObject(TuioObject tobj) {
      println("remove object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");
    }

    // called when an object is moved
    void updateTuioObject (TuioObject tobj) {
      println("update object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()
        +" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel());
    }

    // called when a cursor is added to the scene
    void addTuioCursor(TuioCursor tcur) {
      println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
    }

    // called when a cursor is moved
    void updateTuioCursor (TuioCursor tcur) {
      println("update cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY()
        +" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel());
    }

    // called when a cursor is removed from the scene
    void removeTuioCursor(TuioCursor tcur) {
      println("remove cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+")");
    }

    // called after each message bundle
    // representing the end of an image frame
    void refresh(TuioTime bundleTime) { 
      redraw();
    }


    void keyPressed() {
        endRecord();
        background(bg);
       // exit();
    }

public void saveScreen() {
  saveFrame();
  player.pause();
}

// returns true if mouse is inside this rectangle
boolean inside(int left, int top, int right, int bottom ) {

  if (mouseX>left && mouseX<right && mouseY>top && mouseY<bottom ) {

    return true;
  }

  else {
    return false;
  }
}

2 个答案:

答案 0 :(得分:0)

功能下的任何内容:

void mousePressed() {
  //bDrawFullSize = true;

 if (inside==true){
 sizeChosen=size[n];
 }

 player.play();

mp = true;

}
按下鼠标时,每帧运行

。所以你可以在这里创建一个椭圆(或任何你想要的)。

答案 1 :(得分:0)

您可以将椭圆生成函数放在检查鼠标按下状态的分支条件中:

if (mousePressed) {
    ellipse(random(0,width),random(0,height),random(0,100),random(0,100));
  }

将条件放在Draw函数的末尾,以便覆盖任何背景元素