void stroke(float gray, float alpha)
 {
     m_strokeColor.set(gray, gray, gray, alpha);
     m_hasStroke = true;
     
     if( m_inSetup )
         m_defaultStrokeColor = m_strokeColor;
 }
 void fill(float gray, float alpha)
 {
     m_hasFill = true;
     m_fillColor.set(gray,alpha);
     
     if( m_inSetup )
         m_defaultFillColor = m_fillColor;
 }
 void fill(int rgb, float alpha)
 {
     m_hasFill = true;
     if( rgb > 255 )
         m_fillColor.setHex(rgb, alpha);
     else
         m_fillColor.set(rgb, alpha);
     
     if( m_inSetup )
         m_defaultFillColor = m_fillColor;
 }
 void parseXml() {
     m_settings.pushTag("AppConfig");
     
     // parse output values
     m_settings.pushTag("output");
     m_output_projector_width = m_settings.getValue("projector_width", 0);
     m_output_projector_height = m_settings.getValue("projector_height", 0);
     m_output_buffer_width = m_settings.getValue("buffer_width", 0);
     m_output_buffer_height = m_settings.getValue("buffer_height", 0);
     m_settings.popTag();
     
     // parse Kinect values
     m_settings.pushTag("kinect");
     m_kinect_crop_buffer_width = m_settings.getValue("crop_buffer_width", 0);
     m_kinect_crop_buffer_height = m_settings.getValue("crop_buffer_height", 0);
     m_settings.popTag();
     
     // parse vector field values
     m_settings.pushTag("vector_field");
     m_vector_field_subdivision_x = m_settings.getValue("subdivision_x", 0);
     m_vector_field_subdivision_y = m_settings.getValue("subdivision_y", 0);
     m_settings.popTag();
     
     // parse particle system values
     m_settings.pushTag("particle_system");
     m_particle_system_count = m_settings.getValue("count", 0);
     m_particle_system_min_radius = m_settings.getValue("min_radius", 0);
     m_particle_system_max_radius = m_settings.getValue("max_radius", 0.0);
     m_settings.popTag();
     
     // parse marching squares values
     m_settings.pushTag("marching_squares");
     m_marching_squares_columns = m_settings.getValue("columns", 0);
     m_marching_squares_rows = m_settings.getValue("rows", 0);
     m_settings.popTag();
     
     m_settings.pushTag("colors");
     parseHsb(m_background_color, "background");
     parseHsb(m_metaballs_color, "metaballs");
     m_background_clear_color.set(m_background_color);
     m_background_clear_color.a = 0.f;
     m_settings.popTag();
     
     m_settings.popTag();
 }
void ofApp::setup() {
    
    ofEnableSmoothing();
    ofEnableAlphaBlending();
    ofSetFrameRate(60);
    ofSetVerticalSync(true);
    ofEnableDepthTest();
    ofEnableAntiAliasing();

    memset( dmxData_, 0, DMX_DATA_LENGTH );
    
    //open the device
    dmxInterface_ = ofxGenericDmx::createDevice(DmxDevice::DMX_DEVICE_RAW);
    bool opened = dmxInterface_->open();
    if ( dmxInterface_ == 0 || !opened ) {
        printf( "No FTDI Device Found\n" );
    } else {
        printf( "isOpen: %i\n", dmxInterface_->isOpen() );
    }
    
    printf("ofxGenericDmx addon version: %s.%s\n", ofxGenericDmx::VERSION_MAJOR, ofxGenericDmx::VERSION_MINOR);
    
    std::string file = "Lightweave_loops2.json";
    std::string columnsFile = "Lightweave_columns2.json";
    std::string facesFile = "Lightweave_faces2.json";
    
    bool parsingSuccessful = result.open(file);
    
    bool parsingSuccessfulColumn = columnGeometry.open(columnsFile);

    bool parsingSuccessfulFaces = faceGeometry.open(facesFile);

    
    for (int region = 0; region < 6; region++) {
        string blah = "region" + ofToString(region);
        for (int rings = 0; rings < result[blah].size(); rings++) {
            string ring = "ring" + ofToString(rings);
            for (int pointPos = 0; pointPos < 3; pointPos++) {
                string point = "point" + ofToString(pointPos);
            }
        }
    }
        
    //setupUDP();
    
    camWidth = 320;
    camHeight = 240;

    vector<ofVideoDevice> devices = vidGrabber.listDevices();
    for (int i = 0; i < devices.size(); i++) {
        if (devices[i].bAvailable) {
            ofLogNotice() << devices[i].id << ": " << devices[i].deviceName;
        } else {
            ofLogNotice() << devices[i].id << ": " << devices[i].deviceName << " - unavailable ";
        }
    }
    
    for (int i = 0; i < devices.size(); i++) {
        if (!devices[i].deviceName.find("USB")) {
            cout << devices[i].id << endl;
            pcCams.push_back(devices[i].id);
        }
    }
    

    vidGrabber.setDeviceID(pcCams[0]);
//    vidGrabber.setDeviceID(0);

    vidGrabber.initGrabber(320,240);
    
    vidGrabber1.setDeviceID(pcCams[1]);
//    vidGrabber1.setDeviceID(0);

    vidGrabber1.initGrabber(320,240);
    
    colorImg1.allocate(320,240);
    grayImage1.allocate(320,240);
    grayBg1.allocate(320,240);
    grayDiff1.allocate(320,240);
    
    colorImg.allocate(320,240);
    grayImage.allocate(320,240);
    grayBg.allocate(320,240);
    grayDiff.allocate(320,240);
    
    bLearnBackground = true;
    bLearnBackground1 = true;
    threshold = 80;
    drawOne = false;
    
    bottomSwarm.a = 1.1f;
    bottomSwarm.b = (curWidth/4.0);
    bottomSwarm.c = 100.0;
    bottomSwarm.bVel = 1.0;
    
    xPos = 0;
    yPos = 0;
    zPos = 0;
    
    cam.setPosition(result["region0"]["ring0"]["point0"][0].asFloat(),result["region0"]["ring0"]["point0"][1].asFloat(),result["region0"]["ring0"]["point0"][2].asFloat());
    cam.lookAt(ofVec3f(result["region0"]["ring1"]["point0"][0].asFloat(),result["region0"]["ring1"]["point0"][1].asFloat(),result["region0"]["ring1"]["point0"][2].asFloat()));
    cam.rotate(ofRadToDeg(PI/2), 1.0, 0.0, 0.0);
    cam.setFov(32.0);
    
    sphereZPos = 25.9297;
    sphereXPos = 364.928;
    
    for (int i = 0; i < 20; i++) {
        spheresXPos[i] = ofRandom(result["region0"]["ring0"]["point0"][0].asFloat()-500, result["region0"]["ring0"]["point0"][0].asFloat()+500.0);
        spheresZPos[i] = ofRandom(result["region0"]["ring0"]["point0"][2].asFloat()-100.0, result["region0"]["ring0"]["point0"][2].asFloat()+100.0);
    }
    
    /* LIGHTING */
    ofSetSmoothLighting(true);

    pointLight.setDiffuseColor( ofColor(0.f, 255.f, 0.f));
    
    pointLight.setSpecularColor( ofColor(255.f, 255.f, 255.f));
    pointLight.setPosition(result["region0"]["ring0"]["point0"][0].asFloat(),result["region0"]["ring0"]["point0"][1].asFloat(),result["region0"]["ring0"]["point0"][2].asFloat());
    
    material.setShininess( 64 );
    
    colorHue = ofRandom(0, 250);
    colorHue2 = ofRandom(0, 250);
    
    lightColor.setBrightness( 180.f );
    lightColor.set(250,250,210);
    
    materialColor.setBrightness(250.f);
    materialColor.set(100,100,100);
    
    lightColor.setHue(colorHue);
    pointLight.setDiffuseColor(lightColor);
    
    materialColor.setHue(colorHue);
    material.setSpecularColor(materialColor);
    
    
    materialColor.set(255.0,0.0,0.0);
    columnMaterial.setSpecularColor(materialColor);
    
    materialColor.set(55.0,55.0,55.0);
    peopleMaterial.setSpecularColor(materialColor);
    
    cameraColor1.set(0.0, 0.0, 255.0);
    cameraColor2.set(0.0, 0.0, 255.0);
    columnColor.set(255, 0, 0);
    activeColor.set(0.0,0.0,255.0);

}
//--------------------------------------------------------------
void testApp::keyPressed(int key){

	float smooth;

	switch (key) {
#ifdef TARGET_OSX // only working on Mac at the moment
		case 357: // up key
			//hardware.setTiltAngle(hardware.tilt_angle++);
            artk.setThreshold(++threshold);
			break;
		case 359: // down key
			//hardware.setTiltAngle(hardware.tilt_angle--);
            artk.setThreshold(--threshold);
			break;
			
#endif
		
		case 'm':
		case 'M':
			isMasking = !isMasking;
			recordUser.setUseMaskPixels(isMasking);
			playUser.setUseMaskPixels(isMasking);
			break;
		case 'd':
		case 'D':
			isDebug = !isDebug;
			break;
		case 'b':
		case 'B':
			isCPBkgnd = !isCPBkgnd;
			break;
        case 'c':
        case 'C':
            isCalibrating = !isCalibrating;
            break;
		case '9':
		case '>':
		case '.':
			farThreshold += 50;
			if (farThreshold > recordDepth.getMaxDepth()) farThreshold = recordDepth.getMaxDepth();
			break;
		case '<':
		case ',':
			farThreshold -= 50;
			if (farThreshold < 0) farThreshold = 0;
			break;

		case '+':
		case '=':
			nearThreshold += 50;
			if (nearThreshold > recordDepth.getMaxDepth()) nearThreshold = recordDepth.getMaxDepth();
			break;

		case '-':
		case '_':
			nearThreshold -= 50;
			if (nearThreshold < 0) nearThreshold = 0;
			break;
        case '1':
            intensPas += 1; // Distance between segments
            dMin2 = intensPas * intensPas;
            break;
        case 'q':
        case 'Q':
            if (intensPas>1)
            intensPas -= 1;
            dMin2 = intensPas * intensPas;
            break;
        case '2':
            dMin2 +=1;// Last Mile Drawing close to Charges
            break;
        case 'w':
        case 'W':
            if(dMin2>1)
                dMin2-=1;
            break;
        case '3':
            numFieldIterations += 200;
            break;
        case 'e':
            case 'E':
            numFieldIterations -= 200;
            break;
        case '4':
            lineWeight += .1;
            break;
        case 'r':
        case 'R':    
            if(lineWeight>.1)
                lineWeight-=.1;
            break;
        case '5':
            lineColor.set(lineColor.r+1,lineColor.g,lineColor.b);
            break;
        case 't':
        case 'T':
            lineColor.set(lineColor.r-1,lineColor.g,lineColor.b);
            break;
        case '6':
            lineColor.set(lineColor.r,lineColor.g+1,lineColor.b);
            break;
        case 'y':
        case 'Y':
            lineColor.set(lineColor.r,lineColor.g-1,lineColor.b);
            break;
        case '7':
            lineColor.set(lineColor.r,lineColor.g,lineColor.b+1);
            break;
        case 'u':
        case 'U':
            lineColor.set(lineColor.r,lineColor.g,lineColor.b-1);
            break;
        case '8':
            lineAlpha++;
            break;
        case 'i':
        case 'I':
            lineAlpha--;
            break;
		default:
			break;
	}
}