Quantcast
Channel: Library Questions - Processing 2.x and 3.x Forum
Viewing all articles
Browse latest Browse all 2896

trouble draging items

$
0
0

Hi All I am trying to write a sketch to draw the track plan of my model railroad on my screen using Process I have the data in a table which i load and run, ok but to edit the location of a {turnout/point/switch) depending on which country you come from I have to edit the table in notepad each time. what i would like to do is be able to drag the {turnout/point/switch) to a new location and have the table up dated automatically. by dragging it with the mouse. i have tried doing something like what is in the mouse function demo sketch, but with no luck

can any one help me.

//import controlP5.*;
import processing.serial.*;
int tableRows=20;
Serial myPort;
Table myTrack;  //used to draw track point/turnouts on screen
String FileName2="track.csv";
int id, ls, le ;
String na, lrs, rt, vis;
PFont f1;
PFont f2;
PFont f3;
Turnout turnout;  // class
float bx;
float by;
int boxSize = 10;
boolean overBox = false;
boolean locked = false;
float xOffset = 0.0;
float yOffset = 0.0;

void setup() {
  size(1400, 900);
  bx = width/2.0;
  by = height/2.0;
  turnout = new Turnout() ; //new class
  printArray(Serial.list());
  // myPort = new Serial(this, Serial.list()[0], 9600);
  f1 = createFont("Arial", 16, true);
  f2 = createFont("Arial Black", 18, true);
  f3 = createFont("Arial", 14, true);
  strokeWeight(1);
  stroke(0);
  textFont(f1);
  // uncomment the next  line to creat new tables
  //track();
 // then  edit table in notpad
  //---- load tables ---------------
  myTrack = loadTable(FileName2, "header");
  println(myTrack.getRowCount() + " total rows in myTrack");
}

void draw() {
  background(0, 250, 250);
  strokeWeight(0);
  stroke(200);
  fill(0);
  text((Serial.list()[0]), 10, 100);
  for (int i = 0; i <= tableRows-1; i++)
  {
    list_turnouts(i);  // get info from table
    String letter= vis.toUpperCase();
    switch(letter) {
    case "Y"  :   // is it visable ?
      turnout.setit( id, na, ls, le, lrs, rt, vis);
      turnout.display();
      break;
    }
  }
  stroke(0);
  fill(255);
  saveTable(myTrack, FileName2);
}

// now read table and set all lower case to uper case
void list_turnouts(int temp_i) {
  int i=temp_i;
  id=  myTrack.getInt(i, "T_Id");
  na=  myTrack.getString(i, "Name");
  String na1= na.toUpperCase();
  myTrack.setString(i,"Name", na1);
   ls = myTrack.getInt(i, "Loc_S");
  le = myTrack.getInt(i, "Loc_E");
    lrs =myTrack.getString(i, "L_R_S");
  String lrs1= lrs.toUpperCase();
  myTrack.setString(i,"L_R_S", lrs1);
   rt = myTrack.getString(i, "Rotate");
   String rt1= rt.toUpperCase();
  myTrack.setString(i,"Rotate", rt1);
    vis = myTrack.getString(i, "Visable");
   String vis1= vis.toUpperCase();
  myTrack.setString(i,"Visable", vis1);

}

void mousePressed() {
  if (overBox) {
    locked = true;
    fill(0);
  } else {
    locked = false;
  }
  xOffset = mouseX-bx;
  yOffset = mouseY-by;
}

void mouseDragged() {
  if (locked) {
    bx = mouseX-xOffset;
    by = mouseY-yOffset;
  }
}

void mouseReleased() {
  locked = false;
}

class Turnout {
  // verible used inside class Point
  int px;
  int py;
  int pid;
  String pl;
  String pa;
  String pv;
  String pn;
  String temps;

  Turnout() {
  };

  void setit(int id, String na, int x1, int y1, String sl, String sa, String vis) {
    pid=id;
    pn=na;
    px = x1+300;// screen off set
    py = y1+50;  // screen off set
    pl = sl;
    pa = sa;
    pv=vis;
  }

  void display() {
    int ex=0;
    int ey=0;
    textFont(f3);
    strokeWeight(4);
    stroke(0);
    ex=0;
    ey=0;
    String letter1= pl.toUpperCase();
    switch(letter1) {
    case "R":
      ex=px+25;
      text(pn, py-10, px-10);//print name above line
      break;
    case "L":
      ex=px-25;
      text(pn, py-10, px+20);//print name below line
      break;
    case "":
      ex=px;
      break;
    }
    String letter2= pa.toUpperCase();
    switch(letter2) {
    case "W":
      ey=py-25;
      break;
    case "E":
      ey=py+25;
      break;
    case "":
      ey=py   ;
      break;
    }
    //draw switch
    ellipse(py, px, 15, 15);
    line( py, px, ey, ex);
    line( py-25, px, py+25, px);
     strokeWeight(1);
// hylight turnout with red dot
    if (mousePressed == true) {
      if (dist(mouseX, mouseY, py, px) < 15) { //hylight
        fill(255, 0, 0);
        ellipse(py, px, 15, 15);
        textFont(f1);
        //next 3 line for debug
        text(pid, 10, 20);
        text(py-50, 10, 40);
        text(px-300, 10, 60);
      }
       fill(0);
    }
    // now if draged
    // move it ??
  }
}//

content of table looks like this

T_Id,Name,Loc_S,Loc_E,L_R_S,Rotate,Visable
1,00,10,100,R,E,Y
1,N1,40,80,L,W,Y
2,N2,70,60,R,E,Y
3,N3,100,40,L,W,Y
4,N1,0,0,,,
5,N1,0,0,,,
6,N1,0,0,,,
7,N1,0,0,,,
8,N1,0,0,,,
9,N1,0,0,,,
10,N1,0,0,,,
11,N1,0,0,,,
12,N1,0,0,,,
13,N1,0,0,,,
14,N1,0,0,,,
15,N1,0,0,,,
16,N1,0,0,,,
17,N1,0,0,,,
18,N1,0,0,,,
19,N1,0,0,,,
20,N1,0,0,,,

Viewing all articles
Browse latest Browse all 2896

Trending Articles