// initialize the shape display and set up shape display helper objects void AppManager::setupShapeDisplayManagement() { // initialize communication with the shape display switch (SHAPE_DISPLAY_IN_USE) { case INFORM_DISPLAY: shapeIOManager = new InformIOManager(); break; case TRANSFORM_DISPLAY: shapeIOManager = new TransformIOManager(); break; case COOPERFORM_DISPLAY: shapeIOManager = new CooperformIOManager(); break; default: throw "unknown setting for `SHAPE_DISPLAY_IN_USE`"; } // initialize shape display pin configs PinConfigs pinConfigs; pinConfigs.timeOfUpdate = elapsedTimeInSeconds(); pinConfigs.gainP = DEFAULT_GAIN_P; pinConfigs.gainI = DEFAULT_GAIN_I; pinConfigs.maxI = DEFAULT_MAX_I; pinConfigs.deadZone = DEFAULT_DEAD_ZONE; pinConfigs.maxSpeed = DEFAULT_MAX_SPEED; shapeIOManager->setGlobalPinConfigs(pinConfigs); timeOfLastPinConfigsUpdate = elapsedTimeInSeconds(); // clear height and pin config buffers for (int x = 0; x < SHAPE_DISPLAY_SIZE_X; x++) { for (int y = 0; y < SHAPE_DISPLAY_SIZE_Y; y++) { heightsForShapeDisplay[x][y] = 0; heightsFromShapeDisplay[x][y] = 0; pinConfigsForShapeDisplay[x][y] = pinConfigs; } } // allocate height pixels objects and clear contents heightPixelsForShapeDisplay.allocate(SHAPE_DISPLAY_SIZE_X, SHAPE_DISPLAY_SIZE_Y, 1); heightPixelsForShapeDisplay.set(0); heightPixelsFromShapeDisplay.allocate(SHAPE_DISPLAY_SIZE_X, SHAPE_DISPLAY_SIZE_Y, 1); heightPixelsFromShapeDisplay.set(0); // allocate shape display graphics container and clear contents graphicsForShapeDisplay.allocate(SHAPE_DISPLAY_PROJECTOR_SIZE_X, SHAPE_DISPLAY_PROJECTOR_SIZE_X, GL_RGBA); graphicsForShapeDisplay.begin(); ofClear(0); graphicsForShapeDisplay.end(); }
void recordElapsedCmdTime(AsdkCommandRecord*& commandRecord, double startTime) { commandRecord->elapsedTime += elapsedTimeInSeconds(getCurTime(), startTime); }
void AppManager::update(){ kinectManager->update(); if (kinectManager->isFrameNew()) { kinectManager->getColorPixels(colorPixels); kinectManager->getDepthPixels(depthPixels); } // time elapsed since last update float currentTime = elapsedTimeInSeconds(); double dt = currentTime - timeOfLastUpdate; timeOfLastUpdate = currentTime; // copy heights from shape display to pixels object if (shapeIOManager->heightsFromShapeDisplayAvailable) { shapeIOManager->getHeightsFromShapeDisplay(heightsFromShapeDisplay); // note: manually looping over all pixels is important! the underlying // ofPixels char array is stored as unsigned char[y][x], while the // shape display heights are stored as unsigned char[x][y] for (int x = 0; x < SHAPE_DISPLAY_SIZE_X; x++) { for (int y = 0; y < SHAPE_DISPLAY_SIZE_Y; y++) { int xy = heightPixelsFromShapeDisplay.getPixelIndex(x, y); heightPixelsFromShapeDisplay[xy] = heightsFromShapeDisplay[x][y]; } } } // copy heights and pin configs from application bool pinConfigsAreStale; if (!paused) { currentApplication->update(dt); currentApplication->getHeightsForShapeDisplay(heightPixelsForShapeDisplay); // note: manually looping over all pixels is important! the underlying // ofPixels char array is stored as unsigned char[y][x], while the // shape display heights are stored as unsigned char[x][y] for (int x = 0; x < SHAPE_DISPLAY_SIZE_X; x++) { for (int y = 0; y < SHAPE_DISPLAY_SIZE_Y; y++) { int xy = heightPixelsForShapeDisplay.getPixelIndex(x, y); heightsForShapeDisplay[x][y] = heightPixelsForShapeDisplay[xy]; } } pinConfigsAreStale = timeOfLastPinConfigsUpdate < currentApplication->timeOfLastPinConfigsUpdate; if (pinConfigsAreStale) { currentApplication->getPinConfigsForShapeDisplay(pinConfigsForShapeDisplay); } } // render graphics graphicsForShapeDisplay.begin(); ofBackground(0); ofSetColor(255); currentApplication->drawGraphicsForShapeDisplay(0, 0, SHAPE_DISPLAY_PROJECTOR_SIZE_X, SHAPE_DISPLAY_PROJECTOR_SIZE_X); graphicsForShapeDisplay.end(); shapeIOManager->sendHeightsToShapeDisplay(heightsForShapeDisplay); if (pinConfigsAreStale) { shapeIOManager->setPinConfigs(pinConfigsForShapeDisplay); timeOfLastPinConfigsUpdate = elapsedTimeInSeconds(); } }
void AppManager::setup(){ ofSetFrameRate(30); // inFORM screen setup #if SHAPE_DISPLAY_IN_USE==INFORM_DISPLAY ofSetWindowShape(MONITOR_SCREEN_RESOLUTION_X + SHAPE_DISPLAY_PROJECTOR_RAW_RESOLUTION_X, SHAPE_DISPLAY_PROJECTOR_RAW_RESOLUTION_Y); projectorOffsetX = MONITOR_SCREEN_RESOLUTION_X + SHAPE_DISPLAY_PROJECTOR_OFFSET_X; ofSetWindowPosition(0, 0); #endif // initialize shape display and set up helper objects setupShapeDisplayManagement(); // initialize kinect kinectManager = new KinectManager(); // allocate kinect images colorPixels.allocate(kinectManager->getImageWidth(), kinectManager->getImageHeight(), OF_IMAGE_COLOR); colorPixels.set(0); depthPixels.allocate(kinectManager->getImageWidth(), kinectManager->getImageHeight(), OF_IMAGE_GRAYSCALE); depthPixels.set(0); // zero timeOfLastUpdate tracker timeOfLastUpdate = elapsedTimeInSeconds(); // set up applications simpleWaveApp = new SimpleWaveApp(); applications["simpleWave"] = simpleWaveApp; tunableWaveApp = new TunableWaveApp(); applications["tunableWave"] = tunableWaveApp; leverApp = new LeverApp(); applications["lever"] = leverApp; metaMaterialsApp = new MetaMaterialsApp(); applications["metaMaterials"] = metaMaterialsApp; bosApp = new BOSApp(); applications["BOS"] = bosApp; teleoperationApp = new TeleoperationApp(); applications["teleoperation"] = teleoperationApp; touchMaterialApp = new TouchMaterialApp(); applications["touchMaterial"] = touchMaterialApp; waterApp = new WaterApp(); applications["water"] = waterApp; stretchyApp = new StretchyApp(); applications["stretchy"] = stretchyApp; // and the debugging apps, too axisCheckerApp = new AxisCheckerApp(); applications["axisChecker"] = axisCheckerApp; // give applications read access to input data for (map<string, Application *>::iterator iter = applications.begin(); iter != applications.end(); iter++) { Application *app = iter->second; // kinect color and depth data app->setPixelsFromKinectRefs(&colorPixels, &depthPixels); // shape display heights, if they are accessible if (shapeIOManager->heightsFromShapeDisplayAvailable) { app->setHeightsFromShapeDisplayRef(&heightPixelsFromShapeDisplay); } } // set default application setCurrentApplication("simpleWave"); }