处理selectInput()P3D冲突

时间:2014-12-19 17:03:31

标签: opengl file-io processing

我一直在研究这个帖子

Processing 2.0 - Open file dialog    关于selectinput()的使用。 我希望导入点数据来构建一些3d图。 我可以导入数据并构建绘图确定但是在尝试使用时 selectinput()选择我遇到麻烦的文件。 我遇到的困难是selectinput()似乎与P3D不兼容 窗口。

使用OS X10.10

例如此代码可以使用

void setup() {

   size(400, 400,P3D);  //3Dgraphics specified
   background(0);
   stroke(255);
   frameRate(20);
}

void draw() {
   noFill();
   ellipse(mouseX, mouseY, 90, 90);

这是有效的

String [] myInputFileContents ;
String myFilePath;

void setup() {
   selectInput("Select a file : ", "fileSelected");
   while (myInputFileContents == null) {//wait   
      // println("wait");    //If there is nothing inside the curly brackets
      //delay(3000);         //this doesn't work
      size(400, 400 );///   If P3D is added it won't work
      background(0);
      //smooth();
      stroke(255);
      frameRate(25);
   }
}

void draw() {
   box(mouseX, mouseY, 150);
   println("Selected at this point " + myFilePath);
}

void mousePressed() {
   selectInput("Select a file : ", "fileSelected");
}

void fileSelected(File selection) {
   if (selection == null) {
      println("no selection so far...");
   } 
   else {
      myFilePath         = selection.getAbsolutePath();
      myInputFileContents = loadStrings(myFilePath) ;// this moves here...

      println("User selected " + myFilePath);
   }
}

但是如果

size(400, 400); 

更改为

size(400,400,P3D);

框架显示但不会画画。

有人能指出我的答案吗?

1 个答案:

答案 0 :(得分:0)

似乎这个问题是某种帧加载问题。在OS X 10.10 Yoesemite下,这个“hackish”接近我。它也应该在Windows下工作。哦,无论何时使用selectInput(),请使用mouseReleased,以便只调用一次函数:)

  1. Setup()因任何原因被调用两次,这就是为什么我们有didPreSelect布尔值。
  2. 您调用mousePressed而不是mouseReleased
  3. 循环已经选择了屏幕,这就是我改变循环的原因。
  4. 延迟也有问题,这就是我在while循环中添加延迟的原因。
  5. 男人这是一个非常挑战的人,但是要求+1。

    PS:如果您在第一次打开应用程序时按下取消,我添加了一个exit(),这应该更方便。

    String [] myInputFileContents ;
    String myFilePath;
    
    boolean didPreSelect = false;
    boolean secondPress = false;
    void setup() {
      if (didPreSelect == false)
      {
        didPreSelect = true;
        selectInput("Select a file : ", "fileSelected");
      }
      //frame = null;
      while (myInputFileContents == null || myInputFileContents.length < 2) {//wait   
        delay(1000);
      }
      //this doesn't work
      size(400, 400, P3D);
      background(0);
      //smooth();
      stroke(255);
      frameRate(25);
    }
    void draw() {
      box(mouseX, mouseY, 150);
      //println("Selected at this point " + myFilePath);
    }
    
    void mouseReleased() {
      if(secondPress == false) secondPress = true;
      selectInput("Select a file : ", "fileSelected");
    }
    
    void fileSelected(File selection) {
      if (frameCount < 50)
      {
        if (selection == null) {
          println("no selection so far...");
          if(secondPress == false) exit();
        } else {
    
          myFilePath         = selection.getAbsolutePath();
          myInputFileContents = loadStrings(myFilePath) ;// this moves here..
          println("User selected " + myFilePath);
        }
      }
    }