ofxPiMapper fixed for C++17 & oF 12.0
 
 

226 lines
6.4 KiB

#include "ProjectionMappingState.h"
namespace ofx {
namespace piMapper {
ProjectionMappingState * ProjectionMappingState::_instance = 0;
ProjectionMappingState * ProjectionMappingState::instance(){
if(_instance == 0){
_instance = new ofx::piMapper::ProjectionMappingState();
}
return _instance;
}
void ProjectionMappingState::draw(Application * app){
app->getGui()->draw();
}
void ProjectionMappingState::onKeyPressed(Application * app, ofKeyEventArgs & args){
switch(args.key){
case 't':
app->getCmdManager()->exec(
new AddSurfaceCmd(
app->getSurfaceManager(),
SurfaceType::TRIANGLE_SURFACE)
);
break;
case 'q':
app->getCmdManager()->exec(
new AddSurfaceCmd(
app->getSurfaceManager(),
SurfaceType::QUAD_SURFACE)
);
break;
case 'g':
app->getCmdManager()->exec(
new AddSurfaceCmd(
app->getSurfaceManager(),
SurfaceType::GRID_WARP_SURFACE)
);
break;
case OF_KEY_BACKSPACE:
if(app->getSurfaceManager()->getSelectedSurface() == 0){
break;
}
app->getCmdManager()->exec(
new RmSurfaceCmd(app->getSurfaceManager()));
break;
case 'p':
if(app->getSurfaceManager()->getSelectedSurface() == 0){
break;
}
if(app->getSurfaceManager()->getSelectedSurface()->getType() ==
SurfaceType::QUAD_SURFACE){
app->getCmdManager()->exec(
new TogglePerspectiveCmd(
(QuadSurface *)app->getSurfaceManager()->getSelectedSurface() ) );
}
break;
case '}':
if(app->getSurfaceManager()->getSelectedSurface() != 0){
if(app->getSurfaceManager()->getSelectedSurface()->getType() ==
SurfaceType::GRID_WARP_SURFACE){
// TODO: The command should not require projection editor pointer
app->getCmdManager()->exec(
new AddGridRowCmd(
(GridWarpSurface *)app->getSurfaceManager()->getSelectedSurface() ));
}
}
break;
case '{':
if(app->getSurfaceManager()->getSelectedSurface() != 0){
if(app->getSurfaceManager()->getSelectedSurface()->getType() ==
SurfaceType::GRID_WARP_SURFACE){
if(((GridWarpSurface *)app->getSurfaceManager()->getSelectedSurface())->getGridRows() > 1){
// TODO: The command should not require projection editor pointer
app->getCmdManager()->exec(
new RmGridRowCmd(
(GridWarpSurface *)app->getSurfaceManager()->getSelectedSurface() ));
}
}
}
break;
case ']':
if(app->getSurfaceManager()->getSelectedSurface() != 0){
if(app->getSurfaceManager()->getSelectedSurface()->getType() ==
SurfaceType::GRID_WARP_SURFACE){
// TODO: The command should not require projection editor pointer
app->getCmdManager()->exec(
new AddGridColCmd(
(GridWarpSurface *)app->getSurfaceManager()->getSelectedSurface() ));
}
}
break;
case '[':
if(app->getSurfaceManager()->getSelectedSurface() != 0){
if(app->getSurfaceManager()->getSelectedSurface()->getType() ==
SurfaceType::GRID_WARP_SURFACE){
if(((GridWarpSurface *)app->getSurfaceManager()->getSelectedSurface())->getGridCols() > 1){
// TODO: The command should not require projection editor pointer
app->getCmdManager()->exec(
new RmGridColCmd(
(GridWarpSurface *)app->getSurfaceManager()->getSelectedSurface() ));
}
}
}
break;
case '.':
app->getCmdManager()->exec(new SelNextSurfaceCmd(app->getSurfaceManager()));
break;
case ',':
app->getCmdManager()->exec(new SelPrevSurfaceCmd(app->getSurfaceManager()));
break;
case '>':
app->getCmdManager()->exec(new SelNextVertexCmd(app->getSurfaceManager()));
break;
case '<':
app->getCmdManager()->exec(new SelPrevVertexCmd(app->getSurfaceManager()));
break;
case OF_KEY_UP:
if(app->isShiftKeyDown()){
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(0.0f, -10.0f)));
}else{
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(0.0f, -1.0f)));
}
break;
case OF_KEY_DOWN:
if(app->isShiftKeyDown()){
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(0.0f, 10.0f)));
}else{
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(0.0f, 1.0f)));
}
break;
case OF_KEY_LEFT:
if(app->isShiftKeyDown()){
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(-10.0f, 0.0f)));
}else{
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(-1.0f, 0.0f)));
}
break;
case OF_KEY_RIGHT:
if(app->isShiftKeyDown()){
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(10.0f, 0.0f)));
}else{
app->getCmdManager()->exec(new MvSelectionCmd(app->getSurfaceManager(), ofVec2f(1.0f, 0.0f)));
}
break;
case ' ':
if(app->getSurfaceManager()->getSelectedSurface()->getSource()->getType() ==
SourceType::SOURCE_TYPE_VIDEO){
app->getCmdManager()->exec(
new ToggleAnimatedSourceCmd(
app->getSurfaceManager()->getSelectedSurface()));
}
break;
case OF_KEY_TAB:
if(app->getSurfaceManager()->getSelectedSurface() != 0){
app->getCmdManager()->exec(
new SetNextSourceCmd(
app->getSurfaceManager()->getSelectedSurface(),
app->getGui()->getSourcesEditor()));
}else{
app->getCmdManager()->exec(new SelNextSurfaceCmd(app->getSurfaceManager()));
}
break;
case 'd':
if(app->getSurfaceManager()->getSelectedSurface() != 0){
app->getCmdManager()->exec(
new DuplicateSurfaceCmd(
app->getSurfaceManager()->getSelectedSurface(),
app->getSurfaceManager()));
}
break;
default:
break;
}
}
void ProjectionMappingState::onJointPressed(Application * app, GuiJointEvent & e){
app->getCmdManager()->exec(new SelVertexCmd(app->getSurfaceManager(), e.jointIndex));
app->getCmdManager()->exec(new MvSurfaceVertCmd(
e.jointIndex,
app->getSurfaceManager()->getSelectedSurface()));
}
void ProjectionMappingState::onSurfacePressed(Application * app, GuiSurfaceEvent & e){
if(app->getSurfaceManager()->getSelectedSurface() != e.surface){
app->getCmdManager()->exec(new SelSurfaceCmd(app->getSurfaceManager(), e.surface ));
}
app->getCmdManager()->exec(new StartDragSurfaceCmd(e.surface));
}
void ProjectionMappingState::onBackgroundPressed(Application * app, GuiBackgroundEvent & e){
app->getCmdManager()->exec(new DeselectSurfaceCmd(app->getSurfaceManager()));
}
} // namespace piMapper
} // namespace ofx