Merge branch 'master' of https://github.com/sugarcubes/SugarCubes into alexgreen
authorAlexander Green <alexandergreen22@gmail.com>
Fri, 15 Nov 2013 07:44:26 +0000 (23:44 -0800)
committerAlexander Green <alexandergreen22@gmail.com>
Fri, 15 Nov 2013 07:44:26 +0000 (23:44 -0800)
LX point stuff, etc don't know if it works yet
Conflicts:
AlexGreen.pde
SugarCubes.pde

1  2 
AlexGreen.pde
AlexGreen.pde.orig
MarkSlee.pde
SugarCubes.pde
SugarCubes.pde.orig
_Internals.pde
_Mappings.pde

diff --combined AlexGreen.pde
index e3897cfe8045ebfb8752cb0975995f62f362f02a,e8b55cec34a6794de908f1fbacae0a0f4b8d7a7d..e507d20b179171fcd899973b6bd0ce42496e17df
@@@ -1,20 -1,6 +1,12 @@@
  class SineSphere extends SCPattern {
 -  private SinLFO yrot = new SinLFO(0, TWO_PI, 2000);
 +  private SawLFO yrot = new SawLFO(0, TWO_PI, 3000);
 +  private SawLFO yrot2 = new SawLFO(0, -TWO_PI,  8000);
 +  public BasicParameter huespread = new BasicParameter("Hue", 0, 180);
 +  public BasicParameter widthparameter= new BasicParameter("Width", .2);
 +  private int pitch = 0; 
 +  private int channel = 0; 
 +  private int velocity = 0; 
-   public final Projection sinespin;
-   public final Projection sinespin2; 
-   
-   //to-do:  how to sync all hues across sphery's via one basicparameter 
-   //public BasicParameter huespread = new BasicParameter("HueSpread", 180, 360);
-   public BasicParameter rotationx = new BasicParameter("rotx", 0, 0, 1 );
-   public BasicParameter rotationy = new BasicParameter("roty", 1, 0, 1);
-   public BasicParameter rotationz = new BasicParameter("rotz", 0, 0, 1);
-   
+   public final LXProjection sinespin; 
   float modelrad = sqrt((model.xMax)*(model.xMax) + (model.yMax)*(model.yMax) + (model.zMax)*(model.zMax));
    Pick Sshape; 
    public final PVector P = new PVector();
    public SinLFO ybounce;
    private SinLFO zbounce;
    float vibration_min, vibration_max, vperiod;
 -  public BasicParameter widthparameter;
 -  public BasicParameter huespread;
 +  
 +  //public BasicParameter huespread;
    public BasicParameter bouncerate;
    public BasicParameter bounceamp;
 +  public BasicParameter vibrationrate;
 +  public final PVector circlecenter = new PVector(); 
   
    public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float vibration_min, float vibration_max, float vperiod) 
    {
     this.vibration_min = vibration_min;
     this.vibration_max = vibration_max;
     this.vperiod = vperiod;
 -   addParameter(bounceamp = new BasicParameter("Amp", .5));
 -   addParameter(bouncerate = new BasicParameter("Rate", .5));  //ybounce.modulateDurationBy(bouncerate);
 -   addParameter(widthparameter = new BasicParameter("Width", .1));
 -   addParameter(huespread = new BasicParameter("Hue", .2));
 +   //addParameter(bounceamp = new BasicParameter("Amp", .5));
 +   //addParameter(bouncerate = new BasicParameter("Rate", .5));  //ybounce.modulateDurationBy(bouncerate);
 +   //addParameter(vibrationrate = new BasicParameter("vibration", 1000, 10000));
 +    //addParameter(widthparameter = new BasicParameter("Width", .2));
 +    
     
 -   addModulator( vx = new SinLFO(-4000, 10000, 100000)).trigger() ;
 +   addModulator( vx = new SinLFO(500, 10000, 100000)).trigger() ;
     //addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger(); 
 -   addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //ybounce.modulateDurationBy
 +   addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //bounce.modulateDurationBy
      
     //addModulator(bounceamp); //ybounce.setMagnitude(bouncerate);
 -   addModulator( vibration = new SinLFO(vibration_min , vibration_max, 240000./lx.tempo.bpm())).trigger(); //vibration.modulateDurationBy(vx);
 +   addModulator( vibration = new SinLFO(vibration_min , vibration_max, 10000)).trigger(); //vibration.setPeriod(240000/lx.tempo.bpm());
        
    }
 - public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float f2xcenter, float f2ycenter, float f2zcenter, 
 -  float vibration_min, float vibration_max, float vperiod)  
 - {
 -    this.f1xcenter = f1xcenter;
 -   this.f1ycenter = f1ycenter;
 -   this.f1zcenter = f1zcenter;
 -   this.f2xcenter = f2xcenter;
 -   this.f2ycenter = f2ycenter;
 -   this.f2zcenter = f2zcenter;
 -   this.vibration_min = vibration_min;
 -   this.vibration_max = vibration_max;
 -   this.vperiod = vperiod;
 -   //addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger(); 
 -   addModulator(ybounce).trigger(); 
 -   addModulator( vibration = new SinLFO(vibration_min , vibration_max, lx.tempo.rampf())).trigger(); //vibration.modulateDurationBy(vx);
 -   addParameter(widthparameter = new BasicParameter("Width", .1));
 -   addParameter(huespread = new BasicParameter("Hue", .2));
 +
 +  //for an ellipse
 +//  public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float f2xcenter, float f2ycenter, float f2zcenter, 
 +//   float vibration_min, float vibration_max, float vperiod)  
 + 
 +//  {
 +//     this.f1xcenter = f1xcenter;
 +//    this.f1ycenter = f1ycenter;
 +//    this.f1zcenter = f1zcenter;
 +//    this.f2xcenter = f2xcenter;
 +//    this.f2ycenter = f2ycenter;
 +//    this.f2zcenter = f2zcenter;
 +//    this.vibration_min = vibration_min;
 +//    this.vibration_max = vibration_max;
 +//    this.vperiod = vperiod;
 +//    //addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger(); 
 +//    addModulator(ybounce).trigger(); 
 +//    addModulator( vibration = new SinLFO(vibration_min , vibration_max, lx.tempo.rampf())).trigger(); //vibration.modulateDurationBy(vx);
 +//    addParameter(widthparameter = new BasicParameter("Width", .1));
 +//    //addParameter(huespread = new BasicParameter("bonk", .2));
    
 -}
 +// }
 + 
 +
  
 +void setVibrationPeriod(double period){
 +// to-do:  make this conditional upon time signature
  
 +vibration.setPeriod(period);
  
 +}
  
  
  float distfromcirclecenter(float px, float py, float pz, float f1x, float f1y, float f1z) 
     return dist(px, py, pz, f1x, f1y, f1z);
      }
   //void updatespherey(deltaMs, )
 - color spheryvalue (float px, float py, float pz , float f1xc, float f1yc, float f1zc) 
 - {
 +
 + float quadrant(PVector q) {
 +   float qtheta = atan2(  (q.x-f1xcenter) , (q.z - f1zcenter) ); 
 +
 +
 +    return map(qtheta, -PI/2, PI/2, 160-huespread.getValuef(), 240 +huespread.getValuef());
 +  //if (q.x > f1xcenter ) {return 140 ;}
 +    //else  {return 250;}  
 + }
 + color spheryvalue (PVector p, float f1xcenter, float f1ycenter, float f1zcenter) {
 +   circlecenter.set(f1xcenter, f1ycenter, f1zcenter); 
 +
 +  
  //switch(sShpape.cur() ) {}  
 -   return lx.hsb(constrain(huespread.getValuef()*5*px, 0, 360) , dist(px, py, pz, f1xc, f1yc, f1zc) , 
 -    max(0, 100 - 100*widthparameter.getValuef()*abs(dist(px, py, pz, f1xcenter, ybounce.getValuef(), f1zcenter)
 -      - vibration.getValuef() ) ) ); 
 +
 +   float b = max(0, 100 - 100*widthparameter.getValuef()*abs(p.dist(circlecenter)
 +      - vibration.getValuef() ) );
 +
 +   if (b <= 0) {
 +     return 0;
 +   }
 +
 +   return lx.hsb(
 +     constrain(quadrant(p), 0, 360),
 +     80,
 +     b
 +   ); 
   }
   color ellipsevalue(float px, float py, float pz , float f1xc, float f1yc, float f1zc, float f2xc, float f2yc, float f2zc)
    {
@@@ -141,46 -94,20 +133,46 @@@ void run(double deltaMs) 
    
  }  
  
 +// public boolean gridPressed(int row, int co){
 +// midiengine.grid.setState();
 +
 +// return true;
 +
 +// }
 +
 +public boolean noteOn(Note note)  {
 +pitch= note.getPitch();  
 +velocity=note.getVelocity();
 +channel=note.getChannel();
 +return true;
 +}
  
  final Sphery[] spherys;
 + 
    SineSphere(GLucose glucose) 
    {
      super(glucose);
-     sinespin = new Projection(model);
+     sinespin = new LXProjection(model);
 +    sinespin2 = new Projection(model);
 +    addParameter(huespread);
 +    addParameter(rotationx);
 +    addParameter(rotationy);
 +    addParameter(rotationz);
      addModulator(yrot).trigger();
 +    addModulator(yrot2).trigger(); 
 +    
 +    //addParameter(huespread);
      //Sshape = addPick("Shape", , 1);
      spherys = new Sphery[] {
        new Sphery(model.xMax/4, model.yMax/2, model.zMax/2, modelrad/16, modelrad/8, 3000),
        new Sphery(.75*model.xMax, model.yMax/2, model.zMax/2, modelrad/20, modelrad/10, 2000),
        new Sphery(model.xMax/2, model.yMax/2, model.zMax/2,  modelrad/4, modelrad/8, 2300),
 -    };
 -  
 +
 +      new Sphery(.3*model.xMax, .4*model.yMax, .6*model.zMax, modelrad/16, modelrad/8, 4000),
 +      new Sphery(.75*model.xMax, model.yMax/2, model.zMax/2, modelrad/20, modelrad/10, 2000),
 +      new Sphery(model.xMax/2, model.yMax/2, model.zMax/2,  modelrad/4, modelrad/8, 2300),
 +      
 +    };  
    }
  
  // public void onParameterChanged(LXParameter parameter)
  //     }
  //   }
  
 -     void run( double deltaMs) {
 -     float t = lx.tempo.rampf();
 -     float bpm = lx.tempo.bpmf();
 +    public void run( double deltaMs) {
 +     double t = lx.tempo.ramp();
 +     double bpm = lx.tempo.bpm();
-      spherys[0].run(deltaMs);
-      spherys[1].run(deltaMs);
-      spherys[2].run(deltaMs);
-      spherys[3].run(deltaMs);
-      
++     //spherys[0].run(deltaMs);
+      //spherys[1].run(deltaMs);
+      //spherys[2].run(deltaMs);
+      //spherys[3].run(deltaMs);]
+      sinespin.reset()
++    .center
++     .rotate(yrot.getValuef(), 0, 1, 0);
  
 -     // Translate so the center of the car is the origin, offset by yPos
 -      .center()
 -
 -      // Rotate around the origin (now the center of the car) about an X-vector
 -      .rotate(yrot.getValuef(), 0, 1, 0);
 +     switch (pitch) 
 +    {
 +     case 53: t = .5*t;   bpm = .5*bpm;  break;
  
 +     case 54: t = t;   bpm = bpm;   break;
  
 +     case 55: t = 2*t;  bpm = 2*bpm; break;
  
 -     for (LXPoint p : model.points){
 -    color c = 0;
 -    c = blendColor(c, spherys[1].spheryvalue(p.x, p.y, p.z, .75*model.xMax, model.yMax/2, model.zMax/2), ADD);
 -    c = blendColor(c, spherys[0].spheryvalue(p.x, p.y, p.z, model.xMax/4, model.yMax/4, model.zMax/2), ADD);
 -    c = blendColor(c, spherys[2].spheryvalue(p.x, p.y, p.z, model.xMax/2, model.yMax/2, model.zMax/2),ADD);
 +     default: t= t;   bpm = bpm; 
++}
       
 -      colors[p.index] = lx.hsb(lx.h(c), lx.s(c), lx.b(c));
 +      }
 +      
 +      for ( Sphery s: spherys){
 +      s.setVibrationPeriod(480000/bpm);
 +      s.vibration.setBasis(t);
 +       }
 +     sinespin.reset(model)
 +     
 +    
 +     // Translate so the center of the car is the origin, offset 
 +      .translateCenter(model, 0, 0, 0)
 +     // .scale(1.3,1.3,1.3)
 +      // Rotate around the origin (now the center of the car) about an y-vector
 +      .rotate(yrot.getValuef(), rotationx.getValuef(), rotationy.getValuef() , rotationz.getValuef())
 +      .translate(model.cx, model.cy, model.cz);
 +      
  
 -               }
 +   
 +   
 +
 +     for (Coord p: sinespin)
 +   // for (Point p: model.points)
 +     {
 +       P.set(p.x, p.y, p.z);
 +      // PVector P = new PVector(p.x, p.y, p.z);
 +    color c = #000000;
 +    c = blendIfColor(c, spherys[1].spheryvalue(P, .75*model.xMax, model.yMax/2, model.zMax/2), ADD);
 +    c = blendIfColor(c, spherys[0].spheryvalue(P, model.xMax/4, model.yMax/4, model.zMax/2), ADD);
 +    c = blendIfColor(c, spherys[2].spheryvalue(P, model.xMax/2, model.yMax/2, model.zMax/2),ADD);
 +    
 +
 +    colors[p.index] = c;
 +    
        
 +               }
 +   sinespin2.reset(model).
 +   translateCenter(model,0,0,0).
 +   rotate(yrot2.getValuef(), 0, 1, 0).
 +   translate(model.cx,model.cy,model.cz);
 +
 +    for (Coord p: sinespin2)
 +    {   color c = 0;
 +      // PVector P = new PVector(p.x, p.y, p.z);
 +        P.set(p.x, p.y, p.z);
 +        c = blendIfColor(c, spherys[3].spheryvalue(P, .3*model.xMax, .7*model.yMax, .6*model.zMax),ADD);
 +         
 +        colors[p.index] = blendIfColor(colors[p.index], c , ADD);
  
 +    }  
  
    }
 -  int spheremode = 0;
    
 -   // void keyPressed() {
 -   //   spheremode++;
 -   //     }
 -
 -  // color CalcPoint(PVector Px) 
 -  // { 
 -  //      // if (spheremode == 0 )
 -              //{
 -            
 -             //}
 -      //   else if (spheremode == 1)
 -      // {
 +  color blendIfColor(color c1, color c2, int mode) {
 +    if (c2 != 0) {
 +      return blendColor(c1, c2, mode);
 +    }
 +    return c1;
 +  }
 +  
  
        //   color c = 0;
        //   c = blendColor(c, spherys[3].ellipsevalue(Px.x, Px.y, Px.z, model.xMax/4, model.yMax/4, model.zMax/4, 3*model.xMax/4, 3*model.yMax/4, 3*model.zMax/4),ADD);
@@@ -322,7 -211,7 +314,7 @@@ ArrayList<PVector> centerlistrelative 
  for (int i = 0; i < model.cubes.size(); i++){
    Cube a = model.cubes.get(i);
    cubeorigin.add(new PVector(a.x, a.y, a.z));
 -  centerlist.add(centerofcube(i));
 +  centerlist.add(new PVector(a.cx, a.cy, a.cz) );
    
  } 
  
@@@ -332,13 -221,13 +324,13 @@@ PVector centerofcube(int i) 
  Cube c = model.cubes.get(i);
  
  println(" cube #:  " + i + " c.x  "  +  c.x  + "  c.y   "  + c.y   + "  c.z  "  +   c.z  );
 -PVector cubeangle = new PVector(c.rx, c.ry, c.rz);
 -//println("raw x" + cubeangle.x + "raw y" + cubeangle.y + "raw z" + cubeangle.z);
 +// PVector cubeangle = new PVector(c.rx, c.ry, c.rz);
 +println("raw x angle:  " + c.rx + "raw y angle:  " + c.ry + "raw z angle:  " + c.rz);
  PVector cubecenter = new PVector(c.x + CW/2, c.y + CH/2, c.z + CW/2);
  println("cubecenter unrotated:  "  + cubecenter.x + "  "  +cubecenter.y + "  " +cubecenter.z );
 -PVector centerrot = new PVector(cos(c.rx)*CW/2 - sin(c.rx)*CW/2, 0, cos(c.rz)*CW/2 + sin(c.rz)*CW/2);
 +PVector centerrot = new PVector(cos(c.rx)*CW/2 - sin(c.rx)*CW/2, cubecenter.y, cos(c.rz)*CW/2 + sin(c.rz)*CW/2);
   // nCos*(y-o.y) - nSin*(z-o.z) + o.y
 -cubecenter = PVector.add(cubecenter, centerrot);
 +cubecenter = PVector.add(new PVector(c.x, c.y, c.z), centerrot);
  println( "  cubecenter.x  " + cubecenter.x  + " cubecenter.y  " +  cubecenter.y + " cubecenter.z  "   +  cubecenter.z  + "   ");
  
  
@@@ -353,7 -242,7 +345,7 @@@ float cfloor = c.y
  
  // if (i%3 == 0){
  
- // for (Point p : c.points ){
+ // for (LXPoint p : c.points ){
  //  // colors[p.index]=color(0,0,0);
  //   //float dif = (p.y - c.y);
  //   //colors[p.index] = color( bg.getValuef() , 80 , dif < curl.getValuef() ? 80 : 0, ADD);
  
  // else if (i%3 == 1) {
    
- //  for (Point p: c.points){
+ //  for (LXPoint p: c.points){
  //   colors[p.index]=color(0,0,0);
  //   float dif = (p.y - c.y);
  //   // colors[p.index] = 
  //     }
  // else if (i%3 == 2){
   // centerlist[i].sub(cubeorigin(i);
-    for (Point p: c.points) {
+    for (LXPoint p: c.points) {
      PVector pv = new PVector(p.x, p.y, p.z);
       colors[p.index] =color( constrain(4* pv.dist(centerlist.get(i)), 0, 360)  , 50, 100 );
     // colors[p.index] =color(constrain(centerlist[i].x, 0, 360), constrain(centerlist[i].y, 0, 100),  );
@@@ -401,7 -290,7 +393,7 @@@ HueTestHSB(GLucose glucose) 
  }
    void run(double deltaMs){
  
-   for (Point p : model.points) {
+   for (LXPoint p : model.points) {
      color c = 0;
      c = blendColor(c, lx.hsb(360*HueT.getValuef(), 100*SatT.getValuef(), 100*BriT.getValuef()), ADD);
      colors[p.index]= c;
diff --combined AlexGreen.pde.orig
index 13abdfe4b80e017d9c2cf7cca9ac715c632249e5,0000000000000000000000000000000000000000..9d657e9fb5ef48b57c90fa59300c7f191b3e99f9
mode 100644,000000..100644
--- /dev/null
@@@ -1,362 -1,0 +1,446 @@@
-   private BasicParameter rotation = new BasicParameter("rotation", 0);
 +class SineSphere extends SCPattern {
++<<<<<<< HEAD
 +  private SawLFO yrot = new SawLFO(0, TWO_PI, 3000);
 +  private SawLFO yrot2 = new SawLFO(0, -TWO_PI,  8000);
++  public BasicParameter huespread = new BasicParameter("Hue", 0, 180);
++  public BasicParameter widthparameter= new BasicParameter("Width", .2);
++  private int pitch = 0; 
++  private int channel = 0; 
++  private int velocity = 0; 
 +  public final Projection sinespin;
 +  public final Projection sinespin2; 
-   public BasicParameter widthparameter;
-   public BasicParameter huespread;
++  
++  //to-do:  how to sync all hues across sphery's via one basicparameter 
++  //public BasicParameter huespread = new BasicParameter("HueSpread", 180, 360);
++  public BasicParameter rotationx = new BasicParameter("rotx", 0, 0, 1 );
++  public BasicParameter rotationy = new BasicParameter("roty", 1, 0, 1);
++  public BasicParameter rotationz = new BasicParameter("rotz", 0, 0, 1);
++  
++=======
++  private SinLFO yrot = new SinLFO(0, TWO_PI, 2000);
++  public final LXProjection sinespin; 
++>>>>>>> b8bb27489db7dc687bf150576e9d9439f1fa17a6
 + float modelrad = sqrt((model.xMax)*(model.xMax) + (model.yMax)*(model.yMax) + (model.zMax)*(model.zMax));
 +  Pick Sshape; 
 +  public final PVector P = new PVector();
 +
 +  class Sphery {
 +  float f1xcenter, f1ycenter, f1zcenter, f2xcenter , f2ycenter, f2zcenter; //second three are for an ellipse with two foci
 +  private  SinLFO vibration; 
 +  private  SinLFO surface;
 +  private  SinLFO vx;
 +  private SinLFO xbounce;
 +  public SinLFO ybounce;
 +  private SinLFO zbounce;
 +  float vibration_min, vibration_max, vperiod;
- <<<<<<< HEAD
- =======
++  
++  //public BasicParameter huespread;
 +  public BasicParameter bouncerate;
 +  public BasicParameter bounceamp;
- >>>>>>> 4ad9f85959980d306800ad50636f4fd7c2a5d36b
++  public BasicParameter vibrationrate;
 +  public final PVector circlecenter = new PVector(); 
-    addParameter(widthparameter = new BasicParameter("Width", .1));
-    addParameter(huespread = new BasicParameter("Hue", .5, 10));
 + 
 +  public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float vibration_min, float vibration_max, float vperiod) 
 +  {
 +   this.f1xcenter = f1xcenter;
 +   this.f1ycenter = f1ycenter;
 +   this.f1zcenter = f1zcenter;
 +   this.vibration_min = vibration_min;
 +   this.vibration_max = vibration_max;
 +   this.vperiod = vperiod;
 +   //addParameter(bounceamp = new BasicParameter("Amp", .5));
 +   //addParameter(bouncerate = new BasicParameter("Rate", .5));  //ybounce.modulateDurationBy(bouncerate);
-    addModulator( vx = new SinLFO(-4000, 10000, 100000)).trigger() ;
++   //addParameter(vibrationrate = new BasicParameter("vibration", 1000, 10000));
++    //addParameter(widthparameter = new BasicParameter("Width", .2));
++    
 +   
-    addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //ybounce.modulateDurationBy
++   addModulator( vx = new SinLFO(500, 10000, 100000)).trigger() ;
 +   //addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger(); 
-    addModulator( vibration = new SinLFO(vibration_min , vibration_max, 240000./lx.tempo.bpm())).trigger(); //vibration.modulateDurationBy(vx);
++   addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //bounce.modulateDurationBy
 +    
 +   //addModulator(bounceamp); //ybounce.setMagnitude(bouncerate);
-  public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float f2xcenter, float f2ycenter, float f2zcenter, 
-   float vibration_min, float vibration_max, float vperiod)  
++   addModulator( vibration = new SinLFO(vibration_min , vibration_max, 10000)).trigger(); //vibration.setPeriod(240000/lx.tempo.bpm());
 +      
 +  }
-  {
-     this.f1xcenter = f1xcenter;
-    this.f1ycenter = f1ycenter;
-    this.f1zcenter = f1zcenter;
-    this.f2xcenter = f2xcenter;
-    this.f2ycenter = f2ycenter;
-    this.f2zcenter = f2zcenter;
-    this.vibration_min = vibration_min;
-    this.vibration_max = vibration_max;
-    this.vperiod = vperiod;
-    //addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger(); 
-    addModulator(ybounce).trigger(); 
-    addModulator( vibration = new SinLFO(vibration_min , vibration_max, lx.tempo.rampf())).trigger(); //vibration.modulateDurationBy(vx);
-    addParameter(widthparameter = new BasicParameter("Width", .1));
-    addParameter(huespread = new BasicParameter("Hue", .2));
++
++  //for an ellipse
++//  public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float f2xcenter, float f2ycenter, float f2zcenter, 
++//   float vibration_min, float vibration_max, float vperiod)  
 + 
- }
++//  {
++//     this.f1xcenter = f1xcenter;
++//    this.f1ycenter = f1ycenter;
++//    this.f1zcenter = f1zcenter;
++//    this.f2xcenter = f2xcenter;
++//    this.f2ycenter = f2ycenter;
++//    this.f2zcenter = f2zcenter;
++//    this.vibration_min = vibration_min;
++//    this.vibration_max = vibration_max;
++//    this.vperiod = vperiod;
++//    //addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger(); 
++//    addModulator(ybounce).trigger(); 
++//    addModulator( vibration = new SinLFO(vibration_min , vibration_max, lx.tempo.rampf())).trigger(); //vibration.modulateDurationBy(vx);
++//    addParameter(widthparameter = new BasicParameter("Width", .1));
++//    //addParameter(huespread = new BasicParameter("bonk", .2));
 +  
-    //println( "qtheta  " + qtheta);
++// }
++ 
 +
 +
++void setVibrationPeriod(double period){
++// to-do:  make this conditional upon time signature
 +
++vibration.setPeriod(period);
++
++}
 +
 +
 +float distfromcirclecenter(float px, float py, float pz, float f1x, float f1y, float f1z) 
 +{
 +   return dist(px, py, pz, f1x, f1y, f1z);
 +    }
 + //void updatespherey(deltaMs, )
 +
 + float quadrant(PVector q) {
 +   float qtheta = atan2(  (q.x-f1xcenter) , (q.z - f1zcenter) ); 
-     return map(qtheta, -PI/2, PI/2, 140, 240);
 +
-   // circlecenter = new PVector(f1xcenter, f1ycenter, f1zcenter);
++
++    return map(qtheta, -PI/2, PI/2, 160-huespread.getValuef(), 240 +huespread.getValuef());
 +  //if (q.x > f1xcenter ) {return 140 ;}
 +    //else  {return 250;}  
 + }
 + color spheryvalue (PVector p, float f1xcenter, float f1ycenter, float f1zcenter) {
 +   circlecenter.set(f1xcenter, f1ycenter, f1zcenter); 
 +
-      constrain(huespread.getValuef()*5*quadrant(p), 0, 360),
++  
 +//switch(sShpape.cur() ) {}  
 +
 +   float b = max(0, 100 - 100*widthparameter.getValuef()*abs(p.dist(circlecenter)
 +      - vibration.getValuef() ) );
 +
 +   if (b <= 0) {
 +     return 0;
 +   }
 +
 +   return lx.hsb(
-     addParameter(rotation);
++     constrain(quadrant(p), 0, 360),
 +     80,
 +     b
 +   ); 
 + }
 + color ellipsevalue(float px, float py, float pz , float f1xc, float f1yc, float f1zc, float f2xc, float f2yc, float f2zc)
 +  {
 +//switch(sShpape.cur() ) {}  
 +   return lx.hsb(huespread.getValuef()*5*px, dist(model.xMax-px, model.yMax-py, model.zMax-pz, f1xc, f1yc, f1zc) , 
 +    max(0, 100 - 100*widthparameter.getValuef() *
 +      abs( (dist(px, py, pz, f1xc, ybounce.getValuef(), f1zc) + 
 +        (dist(px, py , pz, f2xc, ybounce.getValuef(), f2zc) ) )/2  
 +      - 1.2*vibration.getValuef() ) ) ) ; 
 +  }
 +
 +void run(double deltaMs) {
 +      float vv = vibration.getValuef();
 +      float ybv = ybounce.getValuef();
 +      
 +    }
 +  
 +}  
 +
++// public boolean gridPressed(int row, int co){
++// midiengine.grid.setState();
++
++// return true;
++
++// }
++
++public boolean noteOn(Note note)  {
++pitch= note.getPitch();  
++velocity=note.getVelocity();
++channel=note.getChannel();
++return true;
++}
 +
 +final Sphery[] spherys;
 + 
 +  SineSphere(GLucose glucose) 
 +  {
 +    super(glucose);
++<<<<<<< HEAD
 +    sinespin = new Projection(model);
 +    sinespin2 = new Projection(model);
++    addParameter(huespread);
++    addParameter(rotationx);
++    addParameter(rotationy);
++    addParameter(rotationz);
++=======
++    sinespin = new LXProjection(model);
++>>>>>>> b8bb27489db7dc687bf150576e9d9439f1fa17a6
 +    addModulator(yrot).trigger();
 +    addModulator(yrot2).trigger(); 
-      float t = lx.tempo.rampf();
-      float bpm = lx.tempo.bpmf();
++    
++    //addParameter(huespread);
 +    //Sshape = addPick("Shape", , 1);
 +    spherys = new Sphery[] {
 +      new Sphery(model.xMax/4, model.yMax/2, model.zMax/2, modelrad/16, modelrad/8, 3000),
 +      new Sphery(.75*model.xMax, model.yMax/2, model.zMax/2, modelrad/20, modelrad/10, 2000),
 +      new Sphery(model.xMax/2, model.yMax/2, model.zMax/2,  modelrad/4, modelrad/8, 2300),
 +
 +      new Sphery(.3*model.xMax, .4*model.yMax, .6*model.zMax, modelrad/16, modelrad/8, 4000),
 +      new Sphery(.75*model.xMax, model.yMax/2, model.zMax/2, modelrad/20, modelrad/10, 2000),
 +      new Sphery(model.xMax/2, model.yMax/2, model.zMax/2,  modelrad/4, modelrad/8, 2300),
 +      
 +    };  
 +  }
 +
 +// public void onParameterChanged(LXParameter parameter)
 +// {
 +
 +
 +//     for (Sphery s : spherys) {
 +//       if (s == null) continue;
 +//       double bampv = s.bounceamp.getValue();
 +//       double brv = s.bouncerate.getValue();
 +//       double tempobounce = lx.tempo.bpm();
 +//       if (parameter == s.bounceamp) 
 +//       {
 +//         s.ybounce.setRange(bampv*model.yMax/3 , bampv*2*model.yMax/3, brv);
 +//       }
 +//       else if ( parameter == s.bouncerate )   
 +//       {
 +//         s.ybounce.setDuration(120000./tempobounce);
 +//       }
 +//     }
 +//   }
 +
++<<<<<<< HEAD
 +    public void run( double deltaMs) {
-       .rotate(yrot.getValuef(), 0, 1 , 0)
++     double t = lx.tempo.ramp();
++     double bpm = lx.tempo.bpm();
 +     spherys[0].run(deltaMs);
 +     spherys[1].run(deltaMs);
 +     spherys[2].run(deltaMs);
 +     spherys[3].run(deltaMs);
 +     
++
++     switch (pitch) 
++    {
++     case 53: t = .5*t;   bpm = .5*bpm;  break;
++=======
++     void run( double deltaMs) {
++     float t = lx.tempo.rampf();
++     float bpm = lx.tempo.bpmf();
++     //spherys[1].run(deltaMs);
++     //spherys[2].run(deltaMs);
++     //spherys[3].run(deltaMs);]
++     sinespin.reset()
++
++     // Translate so the center of the car is the origin, offset by yPos
++      .center()
++>>>>>>> b8bb27489db7dc687bf150576e9d9439f1fa17a6
++
++     case 54: t = t;   bpm = bpm;   break;
++
++     case 55: t = 2*t;  bpm = 2*bpm; break;
++
++     default: t= t;   bpm = bpm; 
++
++<<<<<<< HEAD
++=======
++     for (LXPoint p : model.points){
++    color c = 0;
++    c = blendColor(c, spherys[1].spheryvalue(p.x, p.y, p.z, .75*model.xMax, model.yMax/2, model.zMax/2), ADD);
++    c = blendColor(c, spherys[0].spheryvalue(p.x, p.y, p.z, model.xMax/4, model.yMax/4, model.zMax/2), ADD);
++    c = blendColor(c, spherys[2].spheryvalue(p.x, p.y, p.z, model.xMax/2, model.yMax/2, model.zMax/2),ADD);
++>>>>>>> b8bb27489db7dc687bf150576e9d9439f1fa17a6
++     
++      }
++      
++      for ( Sphery s: spherys){
++      s.setVibrationPeriod(480000/bpm);
++      s.vibration.setBasis(t);
++       }
 +     sinespin.reset(model)
 +     
 +    
 +     // Translate so the center of the car is the origin, offset 
 +      .translateCenter(model, 0, 0, 0)
 +     // .scale(1.3,1.3,1.3)
 +      // Rotate around the origin (now the center of the car) about an y-vector
- // for (Point p : c.points ){
++      .rotate(yrot.getValuef(), rotationx.getValuef(), rotationy.getValuef() , rotationz.getValuef())
 +      .translate(model.cx, model.cy, model.cz);
 +      
 +
 +   
 +   
 +
 +     for (Coord p: sinespin)
 +   // for (Point p: model.points)
 +     {
 +       P.set(p.x, p.y, p.z);
 +      // PVector P = new PVector(p.x, p.y, p.z);
 +    color c = #000000;
 +    c = blendIfColor(c, spherys[1].spheryvalue(P, .75*model.xMax, model.yMax/2, model.zMax/2), ADD);
 +    c = blendIfColor(c, spherys[0].spheryvalue(P, model.xMax/4, model.yMax/4, model.zMax/2), ADD);
 +    c = blendIfColor(c, spherys[2].spheryvalue(P, model.xMax/2, model.yMax/2, model.zMax/2),ADD);
 +    
 +
 +    colors[p.index] = c;
 +    
 +      
 +               }
 +   sinespin2.reset(model).
 +   translateCenter(model,0,0,0).
 +   rotate(yrot2.getValuef(), 0, 1, 0).
 +   translate(model.cx,model.cy,model.cz);
 +
 +    for (Coord p: sinespin2)
 +    {   color c = 0;
 +      // PVector P = new PVector(p.x, p.y, p.z);
 +        P.set(p.x, p.y, p.z);
 +        c = blendIfColor(c, spherys[3].spheryvalue(P, .3*model.xMax, .7*model.yMax, .6*model.zMax),ADD);
 +         
 +        colors[p.index] = blendIfColor(colors[p.index], c , ADD);
 +
 +    }  
 +
 +
 +
 +  }
 +  
 +  color blendIfColor(color c1, color c2, int mode) {
 +    if (c2 != 0) {
 +      return blendColor(c1, c2, mode);
 +    }
 +    return c1;
 +  }
 +  
 +
 +      //   color c = 0;
 +      //   c = blendColor(c, spherys[3].ellipsevalue(Px.x, Px.y, Px.z, model.xMax/4, model.yMax/4, model.zMax/4, 3*model.xMax/4, 3*model.yMax/4, 3*model.zMax/4),ADD);
 +      //   return c; 
 +      // }
 +      // return lx.hsb(0,0,0);
 +      //  // else if(spheremode ==2)
 +       // { color c = 0;
 +       //   return lx.hsb(CalcCone( (xyz by = new xyz(0,spherys[2].ybounce.getValuef(),0) ), Px, mid) );
 +
 +       // }
 +
 +  
 +       //   } 
 +        
 +  }
 +
 +class CubeCurl extends SCPattern{
 +float CH, CW, diag;
 +ArrayList<PVector> cubeorigin = new ArrayList<PVector>();
 +ArrayList<PVector> centerlist = new ArrayList<PVector>();
 +private SinLFO curl = new SinLFO(0, Cube.EDGE_HEIGHT, 5000 ); 
 +
 +private SinLFO bg = new SinLFO(180, 220, 3000);
 +
 +CubeCurl(GLucose glucose){
 +super(glucose);
 +addModulator(curl).trigger();
 +addModulator(bg).trigger();
 + this.CH = Cube.EDGE_HEIGHT;
 + this.CW = Cube.EDGE_WIDTH;
 + this.diag = sqrt(CW*CW + CW*CW);
 +
 +
 +ArrayList<PVector> centerlistrelative = new ArrayList<PVector>();
 +for (int i = 0; i < model.cubes.size(); i++){
 +  Cube a = model.cubes.get(i);
 +  cubeorigin.add(new PVector(a.x, a.y, a.z));
 +  centerlist.add(new PVector(a.cx, a.cy, a.cz) );
 +  
 +} 
 +
 +}
 +//there is definitely a better way of doing this!
 +PVector centerofcube(int i) { 
 +Cube c = model.cubes.get(i);
 +
 +println(" cube #:  " + i + " c.x  "  +  c.x  + "  c.y   "  + c.y   + "  c.z  "  +   c.z  );
 +// PVector cubeangle = new PVector(c.rx, c.ry, c.rz);
 +println("raw x angle:  " + c.rx + "raw y angle:  " + c.ry + "raw z angle:  " + c.rz);
 +PVector cubecenter = new PVector(c.x + CW/2, c.y + CH/2, c.z + CW/2);
 +println("cubecenter unrotated:  "  + cubecenter.x + "  "  +cubecenter.y + "  " +cubecenter.z );
 +PVector centerrot = new PVector(cos(c.rx)*CW/2 - sin(c.rx)*CW/2, cubecenter.y, cos(c.rz)*CW/2 + sin(c.rz)*CW/2);
 + // nCos*(y-o.y) - nSin*(z-o.z) + o.y
 +cubecenter = PVector.add(new PVector(c.x, c.y, c.z), centerrot);
 +println( "  cubecenter.x  " + cubecenter.x  + " cubecenter.y  " +  cubecenter.y + " cubecenter.z  "   +  cubecenter.z  + "   ");
 +
 +
 +return cubecenter;
 +}
 +
 +
 +void run(double deltaMs){
 +for (int i =0; i < model.cubes.size(); i++)  {
 +Cube c = model.cubes.get(i);
 +float cfloor = c.y;
 +
 +// if (i%3 == 0){
 +
- //  for (Point p: c.points){
++// for (LXPoint p : c.points ){
 +//  // colors[p.index]=color(0,0,0);
 +//   //float dif = (p.y - c.y);
 +//   //colors[p.index] = color( bg.getValuef() , 80 , dif < curl.getValuef() ? 80 : 0, ADD);
 +//    }
 +//  }
 +
 +// else if (i%3 == 1) {
 +  
-    for (Point p: c.points) {
++//  for (LXPoint p: c.points){
 +//   colors[p.index]=color(0,0,0);
 +//   float dif = (p.y - c.y);
 +//   // colors[p.index] = 
 +//   // color(bg.getValuef(),
 +//   //   map(curl.getValuef(), 0, Cube.EDGE_HEIGHT, 20, 100), 
 +//   //   100 - 10*abs(dif - curl.getValuef()), ADD );
 +//      }
 +//     }
 +// else if (i%3 == 2){
 + // centerlist[i].sub(cubeorigin(i);
-   for (Point p : model.points) {
++   for (LXPoint p: c.points) {
 +    PVector pv = new PVector(p.x, p.y, p.z);
 +     colors[p.index] =color( constrain(4* pv.dist(centerlist.get(i)), 0, 360)  , 50, 100 );
 +   // colors[p.index] =color(constrain(centerlist[i].x, 0, 360), constrain(centerlist[i].y, 0, 100),  );
 +
 +
 +    }
 +
 +
 +  //}
 +
 +   }
 +  }
 + }
 +
 + class HueTestHSB extends SCPattern{
 +  BasicParameter HueT = new BasicParameter("Hue", .5);
 +  BasicParameter SatT = new BasicParameter("Sat", .5);
 +  BasicParameter BriT = new BasicParameter("Bright", .5);
 +
 +HueTestHSB(GLucose glucose) {
 +  super(glucose);
 +  addParameter(HueT);
 +  addParameter(SatT);
 +  addParameter(BriT);
 +}
 +  void run(double deltaMs){
 +
++  for (LXPoint p : model.points) {
 +    color c = 0;
 +    c = blendColor(c, lx.hsb(360*HueT.getValuef(), 100*SatT.getValuef(), 100*BriT.getValuef()), ADD);
 +    colors[p.index]= c;
 +  }
 +   int now= millis();
 +   if (now % 1000 <= 20)
 +   {
 +   println("Hue: " + 360*HueT.getValuef() + "Sat: " + 100*SatT.getValuef() + "Bright:  " + 100*BriT.getValuef());
 +   }
 +  }
 +
 + }
diff --combined MarkSlee.pde
index d3237e1e64fb2204e0ee6a41950ad80855e3d9cd,dcf35a551e3c9fe8066066897cce8eccacefdf19..62a474d84ec0d0ef261a43b9e5b8bfa203479eb6
@@@ -45,7 -45,7 +45,7 @@@ class Cathedrals extends SCPattern 
      
      float sf = 100. / (70 - 69.9*sat.getValuef());
  
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        float d = MAX_FLOAT;
        if (p.y > model.cy) {
          arm = tarm;
@@@ -109,7 -109,7 +109,7 @@@ class MidiMusic extends SCPattern 
          return;
        }
        float posf = position.getValuef();
-       for (Point p : model.points) {
+       for (LXPoint p : model.points) {
          colors[p.index] = blendColor(colors[p.index], lx.hsb(
            (lx.getBaseHuef() + .2*abs(p.x - model.cx) + .2*abs(p.y - model.cy)) % 360,
            100,
          return;
        }
        float yVal = yPos.getValuef();
-       for (Point p : model.points) {
+       for (LXPoint p : model.points) {
          float falloff = 6 - 5*lightSize.getValuef();
          float b = max(0, bVal - falloff*dist(p.x, p.y, xPos, yVal));
          if (b > 0) {
      float maxBright = sparkleBright * (1 - sparkle.getValuef());
      for (Strip s : model.strips) {
        int i = 0;
-       for (Point p : s.points) {
+       for (LXPoint p : s.points) {
          int wavi = (int) constrain(p.x / model.xMax * wval.length, 0, wval.length-1);
          float wavb = max(0, wave.getValuef()*100. - 8.*abs(p.y - wval[wavi]));
          colors[p.index] = lx.hsb(
@@@ -366,7 -366,7 +366,7 @@@ class Pulley extends SCPattern 
        fPos = .2 + 4 * (.2 - fPos);
      }
      float falloff = 100. / (3 + sz.getValuef() * 36 + fPos * beatAmount.getValuef()*48);
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        int gi = (int) constrain((p.x - model.xMin) * NUM_DIVISIONS / (model.xMax - model.xMin), 0, NUM_DIVISIONS-1);
        colors[p.index] = lx.hsb(
          (lx.getBaseHuef() + abs(p.x - model.cx)*.8 + p.y*.4) % 360,
@@@ -438,7 -438,7 +438,7 @@@ class ViolinWave extends SCPattern 
        }
        
        float pFalloff = (30 - 27*pSize.getValuef());
-       for (Point p : model.points) {
+       for (LXPoint p : model.points) {
          float b = 100 - pFalloff * (abs(p.x - x.getValuef()) + abs(p.y - y.getValuef()));
          if (b > 0) {
            colors[p.index] = blendColor(colors[p.index], lx.hsb(
      float rng = (78 - 64 * range.getValuef()) / (model.yMax - model.cy);
      float val = max(2, dbValue.getValuef());
      
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        int ci = (int) lerp(0, centers.length-1, (p.x - model.xMin) / (model.xMax - model.xMin));
        float rFactor = 1.0 -  0.9 * abs(p.x - model.cx) / (model.xMax - model.cx);
        colors[p.index] = lx.hsb(
@@@ -545,7 -545,7 +545,7 @@@ class BouncyBalls extends SCPattern 
        float xv = xPos.getValuef();
        float yv = yPos.getValuef();
        
-       for (Point p : model.points) {
+       for (LXPoint p : model.points) {
          float d = sqrt((p.x-xv)*(p.x-xv) + (p.y-yv)*(p.y-yv) + .1*(p.z-zPos)*(p.z-zPos));
          float b = constrain(130 - falloff*d, 0, 100);
          if (b > 0) {
@@@ -630,7 -630,7 +630,7 @@@ class SpaceTime extends SCPattern 
      int s = 0;
      for (Strip strip : model.strips) {
        int i = 0;
-       for (Point p : strip.points) {
+       for (LXPoint p : strip.points) {
          colors[p.index] = lx.hsb(
            (lx.getBaseHuef() + 360 - p.x*.2 + p.y * .3) % 360, 
            constrain(.4 * min(abs(s - sVal1), abs(s - sVal2)), 20, 100),
@@@ -648,9 -648,9 +648,9 @@@ class Swarm extends SCPattern 
    SawLFO offset = new SawLFO(0, 1, 1000);
    SinLFO rate = new SinLFO(350, 1200, 63000);
    SinLFO falloff = new SinLFO(15, 50, 17000);
-   SinLFO fX = new SinLFO(0, model.xMax, 19000);
-   SinLFO fY = new SinLFO(0, model.yMax, 11000);
-   SinLFO hOffX = new SinLFO(0, model.xMax, 13000);
+   SinLFO fX = new SinLFO(model.xMin, model.xMax, 19000);
+   SinLFO fY = new SinLFO(model.yMin, model.yMax, 11000);
+   SinLFO hOffX = new SinLFO(model.xMin, model.xMax, 13000);
  
    public Swarm(GLucose glucose) {
      super(glucose);
  
    void run(double deltaMs) {
      float s = 0;
-     for (Strip strip : model.strips  ) {
+     for (Strip strip : model.strips) {
        int i = 0;
-       for (Point p : strip.points) {
+       for (LXPoint p : strip.points) {
          float fV = max(-1, 1 - dist(p.x/2., p.y, fX.getValuef()/2., fY.getValuef()) / 64.);
          colors[p.index] = lx.hsb(
          (lx.getBaseHuef() + 0.3 * abs(p.x - hOffX.getValuef())) % 360, 
          constrain(80 + 40 * fV, 0, 100), 
 -        constrain(100 - (30 - fV * falloff.getValuef()) * modDist(i + (s*63)%61, offset.getValuef() * strip.metrics.numPoints, strip.metrics.numPoints), 0, 100)
 +        constrain(100 - 
 +          (30 - fV * falloff.getValuef()) * modDist(i + (s*63)%61, offset.getValuef() * strip.metrics.numPoints, strip.metrics.numPoints), 0, 100)
            );
          ++i;
 -      }
 +      } 
        ++s;
      }
    }
@@@ -707,7 -706,7 +707,7 @@@ class SwipeTransition extends SCTransit
    void computeBlend(int[] c1, int[] c2, double progress) {
      float bleedf = 10 + bleed.getValuef() * 200.;
      float xPos = (float) (-bleedf + progress * (model.xMax + bleedf));
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        float d = (p.x - xPos) / bleedf;
        if (d < 0) {
          colors[p.index] = c2[p.index];
@@@ -830,7 -829,7 +830,7 @@@ class BassPod extends SCPattern 
      
      float satBase = bassLevel*480*clr.getValuef();
      
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        int avgIndex = (int) constrain(1 + abs(p.x-model.cx)/(model.cx)*(eq.numBands-5), 0, eq.numBands-5);
        float value = 0;
        for (int i = avgIndex; i < avgIndex + 5; ++i) {
@@@ -881,7 -880,7 +881,7 @@@ class CubeEQ extends SCPattern 
      float edgeConst = 2 + 30*edge.getValuef();
      float clrConst = 1.1 + clr.getValuef();
  
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        float avgIndex = constrain(2 + p.x / model.xMax * (eq.numBands-4), 0, eq.numBands-4);
        int avgFloor = (int) avgIndex;
  
@@@ -936,7 -935,7 +936,7 @@@ class BoomEffect extends SCEffect 
        float falloffv = falloffv();
        float satv = sat.getValuef() * 100;
        float huev = lx.getBaseHuef();
-       for (Point p : model.points) {
+       for (LXPoint p : model.points) {
          colors[p.index] = blendColor(
          colors[p.index], 
          lx.hsb(huev, satv, constrain(brightv - falloffv*abs(boom.getValuef() - dist(p.x, 2*p.y, 3*p.z, model.xMax/2, model.yMax, model.zMax*1.5)), 0, 100)), 
@@@ -1112,7 -1111,7 +1112,7 @@@ class CrossSections extends SCPattern 
      float ywv = 100. / (10 + 40*yw.getValuef());
      float zwv = 100. / (10 + 40*zw.getValuef());
      
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        color c = 0;
        c = blendColor(c, lx.hsb(
        (lx.getBaseHuef() + p.x/10 + p.y/3) % 360, 
@@@ -1159,7 -1158,7 +1159,7 @@@ class Blinders extends SCPattern 
      for (Strip strip : model.strips) {
        int i = 0;
        float mv = m[si % m.length].getValuef();
-       for (Point p : strip.points) {
+       for (LXPoint p : strip.points) {
          colors[p.index] = lx.hsb(
            (hv + p.z + p.y*hs.getValuef()) % 360, 
            min(100, abs(p.x - s.getValuef())/2.), 
@@@ -1195,7 -1194,7 +1195,7 @@@ class Psychedelia extends SCPattern 
      float mv = m.getValuef();
      int i = 0;
      for (Strip strip : model.strips) {
-       for (Point p : strip.points) {
+       for (LXPoint p : strip.points) {
          colors[p.index] = lx.hsb(
            (huev + i*constrain(cv, 0, 2) + p.z/2. + p.x/4.) % 360, 
            min(100, abs(p.y-sv)), 
@@@ -1257,7 -1256,7 +1257,7 @@@ class AskewPlanes extends SCPattern 
      planes[1].run(deltaMs);
      planes[2].run(deltaMs);    
      
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        float d = MAX_FLOAT;
        for (Plane plane : planes) {
          if (plane.denom != 0) {
@@@ -1295,7 -1294,7 +1295,7 @@@ class ShiftingPlane extends SCPattern 
      float cv = c.getValuef();
      float dv = d.getValuef();    
      float denom = sqrt(av*av + bv*bv + cv*cv);
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        float d = abs(av*(p.x-model.cx) + bv*(p.y-model.cy) + cv*(p.z-model.cz) + dv) / denom;
        colors[p.index] = lx.hsb(
          (hv + abs(p.x-model.cx)*.6 + abs(p.y-model.cy)*.9 + abs(p.z - model.cz)) % 360,
@@@ -1362,7 -1361,7 +1362,7 @@@ class Traktor extends SCPattern 
      bass[index] = rawBass * rawBass * rawBass * rawBass;
      treble[index] = rawTreble * rawTreble;
  
-     for (Point p : model.points) {
+     for (LXPoint p : model.points) {
        int i = (int) constrain((model.xMax - p.x) / model.xMax * FRAME_WIDTH, 0, FRAME_WIDTH-1);
        int pos = (index + FRAME_WIDTH - i) % FRAME_WIDTH;
        
@@@ -1521,3 -1520,4 +1521,4 @@@ class BlurEffect extends SCEffect 
        
    }  
  }
diff --combined SugarCubes.pde
index 6318339df09a42b134ff47510950155233699551,a599b4389e9ed475667f10ab8d6d03f832c9927e..d1052bd5fddddf6c7722ae893e52ad1d9f0fafb2
@@@ -26,8 -26,6 +26,6 @@@
  LXPattern[] patterns(GLucose glucose) {
    return new LXPattern[] {
  
-     new SineSphere(glucose),
-     new CubeCurl(glucose),
      // Slee
      new Cathedrals(glucose),
      new MidiMusic(glucose),
@@@ -54,7 -52,8 +52,7 @@@
      new Worms(glucose),
  
      // Alex G
 -     new SineSphere(glucose),
 -//     new CubeCurl(glucose),
 +     
  
      // Shaheen
      new HelixPattern(glucose).setEligible(false),
      new TestBassMapping(glucose),
      new TestFloorMapping(glucose),
      new TestSpeakerMapping(glucose),    
-     new TestPerformancePattern(glucose),
      // new TestHuePattern(glucose),
      // new TestXPattern(glucose),
      // new TestYPattern(glucose),
diff --combined SugarCubes.pde.orig
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e98998022b5a75b5017e5463ef32d6cf907ae0ab
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,148 @@@
++/**
++ *           +-+-+-+-+-+               +-+-+-+-+-+
++ *          /         /|               |\         \
++ *         /         / +               + \         \
++ *        +-+-+-+-+-+  |   +-+-+-+-+   |  +-+-+-+-+-+
++ *        |         |  +  /         \  +  |         |
++ *        +   THE   + /  /           \  \ +  CUBES  +
++ *        |         |/  +-+-+-+-+-+-+-+  \|         |
++ *        +-+-+-+-+-+   |             |   +-+-+-+-+-+
++ *                      +             +
++ *                      |    SUGAR    |
++ *                      +             +
++ *                      |             |
++ *                      +-+-+-+-+-+-+-+
++ *
++ * Welcome to the Sugar Cubes! This Processing sketch is a fun place to build
++ * animations, effects, and interactions for the platform. Most of the icky
++ * code guts are embedded in the GLucose library extension. If you're an
++ * artist, you shouldn't need to worry about any of that.
++ *
++ * Below, you will find definitions of the Patterns, Effects, and Interactions.
++ * If you're an artist, create a new tab in the Processing environment with
++ * your name. Implement your classes there, and add them to the list below.
++ */ 
++
++LXPattern[] patterns(GLucose glucose) {
++  return new LXPattern[] {
++
++<<<<<<< HEAD
++    new SineSphere(glucose),
++    new CubeCurl(glucose),
++=======
++>>>>>>> b8bb27489db7dc687bf150576e9d9439f1fa17a6
++    // Slee
++    new Cathedrals(glucose),
++    new MidiMusic(glucose),
++    new Pulley(glucose),
++    new Swarm(glucose),
++    new ViolinWave(glucose),
++    new BouncyBalls(glucose),
++    new SpaceTime(glucose),
++    new ShiftingPlane(glucose),
++    new AskewPlanes(glucose),
++    new Blinders(glucose),
++    new CrossSections(glucose),
++    new Psychedelia(glucose),
++    
++    new Traktor(glucose).setEligible(false),
++    new BassPod(glucose).setEligible(false),
++    new CubeEQ(glucose).setEligible(false),
++    new PianoKeyPattern(glucose).setEligible(false),
++
++    // DanH
++    new Noise(glucose),
++    new Play (glucose),
++    new Pong (glucose),
++    new Worms(glucose),
++
++    // Alex G
++     
++
++    // Shaheen
++    new HelixPattern(glucose).setEligible(false),
++    
++    // Toby
++    new GlitchPlasma(glucose),
++    new FireEffect(glucose).setEligible(false),
++    new StripBounce(glucose),
++    new SoundRain(glucose).setEligible(false),
++    new SoundSpikes(glucose).setEligible(false),
++    new FaceSync(glucose),
++
++    // Jack
++    new Swim(glucose),
++    new Balance(glucose),
++
++    // Tim
++    new TimPlanes(glucose),
++    new TimPinwheels(glucose),
++    new TimRaindrops(glucose),
++    new TimCubes(glucose),
++    // new TimTrace(glucose),
++    new TimSpheres(glucose),
++
++    // Ben
++    // new Sandbox(glucose),
++    new TowerParams(glucose),
++    new DriveableCrossSections(glucose),
++    new GranimTestPattern2(glucose),
++    
++    //JR
++    new Gimbal(glucose),
++    
++    // Sam
++    new JazzRainbow(glucose),
++    
++    // Arjun
++    new TelevisionStatic(glucose),
++    new AbstractPainting(glucose),
++    new Spirality(glucose),
++
++    // Basic test patterns for reference, not art    
++    new TestCubePattern(glucose),
++    new TestTowerPattern(glucose),
++    new TestProjectionPattern(glucose),
++    new TestStripPattern(glucose),
++    new TestBassMapping(glucose),
++    new TestFloorMapping(glucose),
++    new TestSpeakerMapping(glucose),    
++    // new TestHuePattern(glucose),
++    // new TestXPattern(glucose),
++    // new TestYPattern(glucose),
++    // new TestZPattern(glucose),
++
++  };
++}
++
++LXTransition[] transitions(GLucose glucose) {
++  return new LXTransition[] {
++    new DissolveTransition(lx),
++    new AddTransition(glucose),
++    new MultiplyTransition(glucose),
++    new OverlayTransition(glucose),
++    new DodgeTransition(glucose),
++    new SwipeTransition(glucose),
++    new FadeTransition(lx),
++//  new SubtractTransition(glucose),  // similar to multiply - dh
++//  new BurnTransition(glucose),              // similar to multiply - dh
++//  new ScreenTransition(glucose),            // same as add -dh
++//  new SoftLightTransition(glucose), // same as overlay -dh
++  };
++}
++
++// Handles to globally triggerable effects 
++class Effects {
++  FlashEffect flash = new FlashEffect(lx);
++  BoomEffect boom = new BoomEffect(glucose);
++  BlurEffect blur = new BlurEffect(glucose);
++  QuantizeEffect quantize = new QuantizeEffect(glucose);
++  ColorFuckerEffect colorFucker = new ColorFuckerEffect(glucose);
++  
++  Effects() {
++    blur.enable();
++    quantize.enable();
++    colorFucker.enable();
++  }
++}
++
diff --combined _Internals.pde
index fb2a9c7a7167867f7b6d9927320e97b67b839701,6a076da811d8be1eba0f2430fb67b13d39177c6a..61c453e34d88eaa31273e754b30f5224431ccd94
   */
  
  import glucose.*;
- import glucose.control.*;
- import glucose.effect.*;
  import glucose.model.*;
- import glucose.pattern.*;
- import glucose.transform.*;
- import glucose.transition.*;
  import heronarts.lx.*;
- import heronarts.lx.control.*;
  import heronarts.lx.effect.*;
  import heronarts.lx.modulator.*;
+ import heronarts.lx.parameter.*;
  import heronarts.lx.pattern.*;
+ import heronarts.lx.transform.*;
  import heronarts.lx.transition.*;
  import ddf.minim.*;
  import ddf.minim.analysis.*;
@@@ -40,8 -36,8 +36,8 @@@ final float TRAILER_WIDTH = 240
  final float TRAILER_DEPTH = 97;
  final float TRAILER_HEIGHT = 33;
  
 -final int MaxCubeHeight = 5;
 -final int NumBackTowers = 11;
 +final int MaxCubeHeight = 7;
 +final int NumBackTowers = 18;
  
  int targetFramerate = 60;
  int startMillis, lastMillis;
@@@ -140,7 -136,7 +136,7 @@@ void setup() 
    lx = glucose.lx;
    lx.enableKeyboardTempo();
    logTime("Built GLucose engine");
-   
+     
    // Set the patterns
    LXEngine engine = lx.engine;
    engine.setPatterns(patterns = _leftPatterns(glucose));
@@@ -328,7 -324,7 +324,7 @@@ void drawDiagnostics(long drawNanos, lo
  }
  
  void drawSimulation(color[] simulationColors) {
-     camera(
+   camera(
      eyeX, eyeY, eyeZ,
      midX, midY, midZ,
      0, -1, 0
    noFill();
    strokeWeight(2);
    beginShape(POINTS);
-   for (Point p : glucose.model.points) {
+   for (LXPoint p : glucose.model.points) {
      stroke(simulationColors[p.index]);
      vertex(p.x, p.y, p.z);
    }
diff --combined _Mappings.pde
index 6b9b98c76ecc29670df3537bb2b32fff54dcf3c7,314a88d19786f6425694037adde50f44cd26be36..12449cd66e325628cce1f65abcc048a55d961053
@@@ -75,24 -75,12 +75,24 @@@ public Model buildModel() 
    ////////////////////////////////////////////////////////////////////////
    // dan's proposed lattice
          ArrayList<StaggeredTower> scubes = new ArrayList<StaggeredTower>();
 -        if (NumBackTowers != 11) exit();
 -        // for (int i=0; i<NumBackTowers; i++) scubes.add(new StaggeredTower(
 -        //           (i+1)*CW,                                                                 // x
 -        //           (i % 2 == 0) ? 0 : CH * 2./3.                ,   // y
 -        //          - ((i % 2 == 0) ? 0 : 11) + 97          ,   // z
 -        //          225, (i % 2 == 0) ? MaxCubeHeight : MaxCubeHeight-1) );         // num cubes
 +        //if (NumBackTowers != 25) exit();
 +        for (int i=0; i<NumBackTowers/2; i++) scubes.add(new StaggeredTower(
 +                  (i+1)*CW,                                                                 // x
 +                  (i % 2 == 0) ? 0 : CH * 2./3.                ,   // y
 +                 - ((i % 2 == 0) ? 0 : 11) + 80          ,   // z
 +                 225, (i % 2 == 0) ? MaxCubeHeight : MaxCubeHeight-1) );         // num cubes
 +        
 +        for (int i=0; i<NumBackTowers/2; i++) scubes.add(new StaggeredTower(
 +                  (i+1)*CW,                                                                 // x
 +                  (i % 2 == 0) ? 0 : CH * 2./3.                ,   // y
 +                 - ((i % 2 == 0) ? 0 : 11) + 80 - pow(CH*CH + CW*CW, .5),   // z
 +                 225, (i % 2 == 0) ? MaxCubeHeight : MaxCubeHeight-1) ); 
 +
 +      // for (int i=0; i<2 ; i++) scubes.add(new StaggeredTower(
 +      //             (i+1)*CW,                                                                 // x
 +      //                0             ,   // y
 +      //            - 0 + 97 - 2*pow(CH*CH + CW*CW, .5),   // z
 +      //            225,  MaxCubeHeight  ) ); 
          
          ArrayList<Cube> dcubes = new ArrayList<Cube>();
          // for (int i=1; i<6; i++) {
          // }
  
  float current_x_position = 0;
 -scubes.add(new StaggeredTower(//tower 1
 -      current_x_position,               // x
 -       15   ,   // y
 -       0  ,   // z
 -     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 -current_x_position += 25.25;
 -scubes.add(new StaggeredTower(// tower 2
 -      current_x_position,               // x
 -       0  ,   // y
 -       -10.5   ,   // z
 -     45, 6, new Cube.Wiring[] { WFR, WFL, WRR, WRR, WFL, WRR}) );
 -current_x_position += 25.25;
 -scubes.add(new StaggeredTower(//tower 3
 -      current_x_position,               // x
 -       15   ,   // y
 -       0,   // z
 -     45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WRR, WFL, WRR}) );
 -current_x_position += 25.25;
 -scubes.add(new StaggeredTower(//tower 4
 -    current_x_position,               // x
 -       0,   // y
 -       -10.5  ,   // z
 -     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 -current_x_position += 28;
 -scubes.add(new StaggeredTower(//tower 5
 -      current_x_position,               // x
 -       15   ,   // y
 -       -4.5 ,   // z
 -     45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WFL, WRR, WFL}) );
 -current_x_position += 28;
 -scubes.add(new StaggeredTower(//tower 6
 -      current_x_position,               // x
 -       0 ,   // y
 -       -10.5,   // z
 -     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 -current_x_position += 25.25;
 -scubes.add(new StaggeredTower(// tower 7
 -      current_x_position,               // x
 -       15   ,   // y
 -      0,   // z
 -     45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WFL, WRR, WFL}) );
 -current_x_position += 25.25;     
 -scubes.add(new StaggeredTower(//tower 8
 -      current_x_position,               // x
 -       0  ,   // y
 -       -10.5 ,   // z
 -     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 -current_x_position += 25.25;
 -scubes.add(new StaggeredTower(//tower 9
 -      current_x_position,               // x
 -       15   ,   // y
 -       0,   // z
 -     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 -current_x_position += 25.25;
 +// scubes.add(new StaggeredTower(//tower 1
 +//       current_x_position,               // x
 +//        15   ,   // y
 +//        0  ,   // z
 +//      45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 +// current_x_position += 25.25;
 +// scubes.add(new StaggeredTower(// tower 2
 +//       current_x_position,               // x
 +//        0  ,   // y
 +//        -10.5   ,   // z
 +//      45, 6, new Cube.Wiring[] { WFR, WFL, WRR, WRR, WFL, WRR}) );
 +// current_x_position += 25.25;
 +// scubes.add(new StaggeredTower(//tower 3
 +//       current_x_position,               // x
 +//        15   ,   // y
 +//        0,   // z
 +//      45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WRR, WFL, WRR}) );
 +// current_x_position += 25.25;
 +// scubes.add(new StaggeredTower(//tower 4
 +//     current_x_position,               // x
 +//        0,   // y
 +//        -10.5  ,   // z
 +//      45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 +// current_x_position += 28;
 +// scubes.add(new StaggeredTower(//tower 5
 +//       current_x_position,               // x
 +//        15   ,   // y
 +//        -4.5 ,   // z
 +//      45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WFL, WRR, WFL}) );
 +// current_x_position += 28;
 +// scubes.add(new StaggeredTower(//tower 6
 +//       current_x_position,               // x
 +//        0 ,   // y
 +//        -10.5,   // z
 +//      45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 +// current_x_position += 25.25;
 +// scubes.add(new StaggeredTower(// tower 7
 +//       current_x_position,               // x
 +//        15   ,   // y
 +//       0,   // z
 +//      45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WFL, WRR, WFL}) );
 +// current_x_position += 25.25;     
 +// scubes.add(new StaggeredTower(//tower 8
 +//       current_x_position,               // x
 +//        0  ,   // y
 +//        -10.5 ,   // z
 +//      45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 +// current_x_position += 25.25;
 +// scubes.add(new StaggeredTower(//tower 9
 +//       current_x_position,               // x
 +//        15   ,   // y
 +//        0,   // z
 +//      45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
 +// current_x_position += 25.25;
  
 -//TOWERS ON DANCE FLOOR
 -scubes.add(new StaggeredTower(//tower 10
 -      83.75+39+43-124.5,   // x
 -      0,   // y
 -       -47.5-43,   // z
 -     0,  4, new Cube.Wiring[]{ WRR, WFL, WFL, WRR})  ); 
 -scubes.add(new StaggeredTower(//tower 11
 -      83.75,   // x
 -       0,   // y
 -       -47.5,   // z
 -     0,  4, new Cube.Wiring[]{ WFL, WRR, WRR, WFL})  );  
 -scubes.add(new StaggeredTower(//tower 12
 -      83.75+39,   // x
 -       0,   // y
 -       -47.5,   // z
 -     0,  4, new Cube.Wiring[]{ WRR, WFL, WFL, WRR})  ); 
 -scubes.add(new StaggeredTower(//tower 13
 -       83.75+39+43,   // x
 -       0,   // y
 -       -47.5-43,   // z
 -     0,  4, new Cube.Wiring[]{ WFL, WRR, WFL, WRR})  ); 
 +// //TOWERS ON DANCE FLOOR
 +// scubes.add(new StaggeredTower(//tower 10
 +//       83.75+39+43-124.5,   // x
 +//       0,   // y
 +//        -47.5-43,   // z
 +//      45,  4, new Cube.Wiring[]{ WRR, WFL, WFL, WRR})  ); 
 +// scubes.add(new StaggeredTower(//tower 11
 +//       83.75,   // x
 +//        0,   // y
 +//        -47.5,   // z
 +//      45,  4, new Cube.Wiring[]{ WFL, WRR, WRR, WFL})  );  
 +// scubes.add(new StaggeredTower(//tower 12
 +//       83.75+39,   // x
 +//        0,   // y
 +//        -47.5,   // z
 +//      45,  4, new Cube.Wiring[]{ WRR, WFL, WFL, WRR})  ); 
 +// scubes.add(new StaggeredTower(//tower 13
 +//        83.75+39+43,   // x
 +//        0,   // y
 +//        -47.5-43,   // z
 +//      45,  4, new Cube.Wiring[]{ WFL, WRR, WFL, WRR})  ); 
  
  // scubes.add(new StaggeredTower(// Single cube on top of tower 4
  //       42,               // x
    // These guts just convert the shorthand mappings into usable objects
    ArrayList<Tower> towerList = new ArrayList<Tower>();
    ArrayList<Cube> tower;
 -  Cube[] cubes = new Cube[100];
 +  Cube[] cubes = new Cube[200];
    int cubeIndex = 1;  
    float px, pz, ny;
    for (TowerMapping tm : towerCubes) {
@@@ -222,7 -210,7 +222,7 @@@ for (StaggeredTower st : scubes) 
        tower.add(cubes[cubeIndex++] = new Cube(st.x, st.y + CH* 4/3.*i, st.z, 0, st.r, 0, w));
      }
      towerList.add(new Tower(tower));
-   }
+   }   
  
    return new Model(towerList, cubes, bassBox, speakers);
  }
@@@ -248,50 -236,50 +248,50 @@@ public PandaMapping[] buildPandaList() 
          new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 13, 14, 15}),
          new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
      }),
 -    new PandaMapping(
 -      "10.200.1.29", new ChannelMapping[] {
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 34, 35, 36}),
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 19, 20, 21}),
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 22, 23, 24}), 
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 25, 26, 27}),
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 28, 29, 30}),
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 31, 32, 33}),
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
 -    }),    
 -    new PandaMapping(
 -      "10.200.1.30", new ChannelMapping[] {
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J3 *
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),  // 30 J4 //ORIG *
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 37, 38, 39}),                // 30 J7 *
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 40, 41, 42}),  // 30 J8 *
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 43, 44, 45}),                // 30 J13 (not working)
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 46, 47, 48}),                // 30 J14 (unplugged)
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 49, 50, 51}),                // 30 J15 (unplugged)
 -        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 52, 53, 54}), // 30 J16
 -   }),    
 -     new PandaMapping(
 -       "10.200.1.31", new ChannelMapping[] {
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 65, 66}),       // J3 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J4
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 55, 56}), // 30 J7 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 57, 58}), //  J8 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 59, 60}),           // J13 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 61, 62}),                // 30 J14 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 63, 64}),                //  J15
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),              //  J16
 -     }),
 -     new PandaMapping(
 -       "10.200.1.32", new ChannelMapping[] {
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J3 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J4
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 67, 68}), // 30 J7 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 69, 70}), //  J8 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),           // J13 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                // 30 J14 
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                //  J15
 -         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),              //  J16
 -     }),
 +   //  new PandaMapping(
 +   //    "10.200.1.29", new ChannelMapping[] {
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 34, 35, 36}),
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 19, 20, 21}),
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 22, 23, 24}), 
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 25, 26, 27}),
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 28, 29, 30}),
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 31, 32, 33}),
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
 +   //  }),    
 +   //  new PandaMapping(
 +   //    "10.200.1.30", new ChannelMapping[] {
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J3 *
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),  // 30 J4 //ORIG *
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 37, 38, 39}),                // 30 J7 *
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 40, 41, 42}),  // 30 J8 *
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 43, 44, 45}),                // 30 J13 (not working)
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 46, 47, 48}),                // 30 J14 (unplugged)
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 49, 50, 51}),                // 30 J15 (unplugged)
 +   //      new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 52, 53, 54}), // 30 J16
 +   // }),    
 +   //   new PandaMapping(
 +   //     "10.200.1.31", new ChannelMapping[] {
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 65, 66}),       // J3 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J4
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 55, 56}), // 30 J7 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 57, 58}), //  J8 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 59, 60}),           // J13 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 61, 62}),                // 30 J14 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 63, 64}),                //  J15
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),              //  J16
 +   //   }),
 +   //   new PandaMapping(
 +   //     "10.200.1.32", new ChannelMapping[] {
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J3 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J4
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 67, 68}), // 30 J7 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 69, 70}), //  J8 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),           // J13 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                // 30 J14 
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                //  J15
 +   //       new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),              //  J16
 +   //   }),
    };
  }
  
@@@ -434,4 -422,4 +434,4 @@@ class ChannelMapping 
        objectIndices[i] = (i < rawObjectIndices.length) ? rawObjectIndices[i] : NO_OBJECT;
      }
    }
- }
+ }