예제 #1
0
/**
 * Callback used for menu events.
 */
void menuEvent(int id) {
   switch (id) {
    case MENU_NORMAL_MODE:
      printf("Entering normal mode...\n");
//      robot->clearSelect();
      break;

    case MENU_ZOOM_MODE:
      printf("Entering zoom mode...\n");
//      robot->clearSelect();
      break;

    case MENU_PAN_MODE:
      printf("Entering pan mode...\n");
//      robot->clearSelect();
      break;

    case MENU_LOAD_POSE: {
      printf("Loading pose from pose.dat...\n");
      Keyframe k;
      SerialFile f("pose.dat", "rb");
      k.readFromFile(f.getPointer());
      f.close();
      aClip.setFrameAt(aClip.getCurrentFrameIndex(), k);
      robot->getRobotFromKeyframe(&k);
      id = MENU_NORMAL_MODE;
      break;
    }

    case MENU_SAVE_POSE: {
      printf("Saving pose from pose.dat...\n");
      Keyframe k;
      k.getKeyframeFromRobot(robot);
      SerialFile f("pose.dat", "wb");
      k.writeToFile(f.getPointer());
      f.close();
      id = MENU_NORMAL_MODE;
      break;
    }

    case MENU_SAVE_ANIM: {
      SerialFile f("anim.dat", "wb");
      aClip.writeToFile(f.getPointer());
      f.close();
      id = MENU_NORMAL_MODE;
      break;
    }

    case MENU_LOAD_ANIM: {
      SerialFile f("anim.dat", "rb");
      aClip.readFromFile(f.getPointer());
      f.close();
      id = MENU_NORMAL_MODE;
      break;
    }

    case MENU_HEAD:
      printf("Entering head editing...\n");
//      robot->setSelected("HEAD");
      break;

    case MENU_NECK:
      printf("Entering neck editing...\n");
//      robot->setSelected("NECK");
      break;

    case MENU_UPPER_TORSO:
      printf("Entering upper torso editing...\n");
//      robot->setSelected("UPPER_TORSO");
      break;

    case MENU_LOWER_TORSO:
      printf("Entering lower torso editing...\n");
//      robot->setSelected("LOWER_TORSO");
      break;

    case MENU_PELVIS:
      printf("Entering pelvis editing...\n");
//      robot->setSelected("PELVIS");
      break;

    case MENU_LEFT_SHOULDER:
      printf("Entering left shoulder editing...\n");
//      robot->setSelected("LEFT_SHOULDER");
      break;

    case MENU_LEFT_UPPER_ARM:
      printf("Entering left upper arm editing...\n");
//      robot->setSelected("LEFT_UPPER_ARM");
      break;

    case MENU_LEFT_LOWER_ARM:
      printf("Entering left lower arm editing...\n");
//      robot->setSelected("LEFT_LOWER_ARM");
      break;

    case MENU_LEFT_HAND:
      printf("Entering left hand editing...\n");
//      robot->setSelected("LEFT_HAND");
      break;

    case MENU_RIGHT_SHOULDER:
      printf("Entering right shoulder editing...\n");
//      robot->setSelected("RIGHT_SHOULDER");
      break;

    case MENU_RIGHT_UPPER_ARM:
      printf("Entering right upper arm editing...\n");
//      robot->setSelected("RIGHT_UPPER_ARM");
      break;

    case MENU_RIGHT_LOWER_ARM:
      printf("Entering right lower arm editing...\n");
//      robot->setSelected("RIGHT_LOWER_ARM");
      break;

    case MENU_RIGHT_HAND:
      printf("Entering right hand editing...\n");
//      robot->setSelected("RIGHT_HAND");
      break;

    case MENU_LEFT_UPPER_LEG:
      printf("Entering left upper leg editing...\n");
//      robot->setSelected("LEFT_UPPER_LEG");
      break;

    case MENU_LEFT_LOWER_LEG:
      printf("Entering left lower leg editing...\n");
//      robot->setSelected("LEFT_LOWER_LEG");
      break;

    case MENU_LEFT_FOOT:
      printf("Entering left foot editing...\n");
//      robot->setSelected("LEFT_FOOT");
      break;

    case MENU_RIGHT_UPPER_LEG:
      printf("Entering right upper leg editing...\n");
//      robot->setSelected("RIGHT_UPPER_LEG");
      break;

    case MENU_RIGHT_LOWER_LEG:
      printf("Entering right lower leg editing...\n");
//      robot->setSelected("RIGHT_LOWER_LEG");
      break;

    case MENU_RIGHT_FOOT:
      printf("Entering right foot editing...\n");
//      robot->setSelected("RIGHT_FOOT");
      break;

    default: // Exit on unknown state
      printf("ERROR: Unknown menu state <%i>\n", id);
      return;
  }

 // Update the mode to reflect the changes
  currentMode = id;
}
예제 #2
0
/**
 * Callback for mouse movement events.
 */
void mouseMoveEvent(int x, int y) {
  if (isPressed) {
    int changeInX = x - oldX;
    int changeInY = y - oldY;

    // If shift is being held, do something special
    if (glutGetModifiers() == GLUT_ACTIVE_SHIFT) {
        if (changeInX > 0) {
            aClip.incrementFrame(false);
        } else if (changeInX < 0) {
            aClip.decrementFrame(true);
        }

        oldX = x;
        oldY = y;

        glutPostRedisplay();
        return;
    }

    // Check to see what kind of event should take place
    switch (currentMode) {
      case MENU_NORMAL_MODE:
        camera.rotateRight(changeInX);
        camera.rotateUp(changeInY);
        break;

      case MENU_ZOOM_MODE:
        if (changeInY > 0)
          camera.zoomIn(0.01f);
        if (changeInY < 0)
          camera.zoomOut(0.01f);
        break;

      case MENU_PAN_MODE:
        camera.panRight(changeInX);
        break;

      case MENU_HEAD:
        robot->setAngle("HEAD", 
                        robot->getAngleH("HEAD") + changeInY, 
                        robot->getAngleV("HEAD") + changeInX);
        break;

      case MENU_NECK:
        robot->setAngle("NECK", 
                        robot->getAngleH("NECK") + changeInY, 
                        robot->getAngleV("NECK") + changeInX);
        break;

      case MENU_UPPER_TORSO:
        robot->setAngle("UPPER_TORSO", 
                        robot->getAngleH("UPPER_TORSO") + changeInY, 
                        robot->getAngleV("UPPER_TORSO") + changeInX);
        break;

      case MENU_LOWER_TORSO:
        robot->setAngle("LOWER_TORSO", 
                        robot->getAngleH("LOWER_TORSO") + changeInY, 
                        robot->getAngleV("LOWER_TORSO") + changeInX);
        break;

      case MENU_PELVIS:
        robot->setAngle("PELVIS", 
                        robot->getAngleH("PELVIS") + changeInY, 
                        robot->getAngleV("PELVIS") + changeInX);
        break;

      case MENU_LEFT_SHOULDER:
        robot->setAngle("LEFT_SHOULDER", 
                        robot->getAngleH("LEFT_SHOULDER") + changeInY, 
                        robot->getAngleV("LEFT_SHOULDER") + changeInX);
        break;

      case MENU_LEFT_UPPER_ARM:
        robot->setAngle("LEFT_UPPER_ARM", 
                        robot->getAngleH("LEFT_UPPER_ARM") + changeInY, 
                        robot->getAngleV("LEFT_UPPER_ARM") + changeInX);
        break;

      case MENU_LEFT_LOWER_ARM:
        robot->setAngle("LEFT_LOWER_ARM", 
                        robot->getAngleH("LEFT_LOWER_ARM") + changeInY, 
                        robot->getAngleV("LEFT_LOWER_ARM") + changeInX);
        break;

      case MENU_LEFT_HAND:
        robot->setAngle("LEFT_HAND", 
                        robot->getAngleH("LEFT_HAND") + changeInY, 
                        robot->getAngleV("LEFT_HAND") + changeInX);
        break;

      case MENU_RIGHT_SHOULDER:
        robot->setAngle("RIGHT_SHOULDER", 
                        robot->getAngleH("RIGHT_SHOULDER") + changeInY, 
                        robot->getAngleV("RIGHT_SHOULDER") + changeInX);
        break;

      case MENU_RIGHT_UPPER_ARM:
        robot->setAngle("RIGHT_UPPER_ARM", 
                        robot->getAngleH("RIGHT_UPPER_ARM") + changeInY, 
                        robot->getAngleV("RIGHT_UPPER_ARM") + changeInX);
        break;

      case MENU_RIGHT_LOWER_ARM:
        robot->setAngle("RIGHT_LOWER_ARM", 
                        robot->getAngleH("RIGHT_LOWER_ARM") + changeInY, 
                        robot->getAngleV("RIGHT_LOWER_ARM") + changeInX);
        break;

      case MENU_RIGHT_HAND:
        robot->setAngle("RIGHT_HAND", 
                        robot->getAngleH("RIGHT_HAND") + changeInY, 
                        robot->getAngleV("RIGHT_HAND") + changeInX);
        break;

      case MENU_LEFT_UPPER_LEG:
        robot->setAngle("LEFT_UPPER_LEG", 
                        robot->getAngleH("LEFT_UPPER_LEG") + changeInY, 
                        robot->getAngleV("LEFT_UPPER_LEG") + changeInX);
        break;

      case MENU_LEFT_LOWER_LEG:
        robot->setAngle("LEFT_LOWER_LEG", 
                        robot->getAngleH("LEFT_LOWER_LEG") + changeInY, 
                        robot->getAngleV("LEFT_LOWER_LEG") + changeInX);
        break;

      case MENU_LEFT_FOOT:
        robot->setAngle("LEFT_FOOT", 
                        robot->getAngleH("LEFT_FOOT") + changeInY, 
                        robot->getAngleV("LEFT_FOOT") + changeInX);
        break;

      case MENU_RIGHT_UPPER_LEG:
        robot->setAngle("RIGHT_UPPER_LEG", 
                        robot->getAngleH("RIGHT_UPPER_LEG") + changeInY, 
                        robot->getAngleV("RIGHT_UPPER_LEG") + changeInX);
        break;

      case MENU_RIGHT_LOWER_LEG:
        robot->setAngle("RIGHT_LOWER_LEG", 
                        robot->getAngleH("RIGHT_LOWER_LEG") + changeInY, 
                        robot->getAngleV("RIGHT_LOWER_LEG") + changeInX);
        break;

      case MENU_RIGHT_FOOT:
        robot->setAngle("RIGHT_FOOT", 
                        robot->getAngleH("RIGHT_FOOT") + changeInY, 
                        robot->getAngleV("RIGHT_FOOT") + changeInX);
        break;

      default: // Exit on unknown state
        printf("ERROR: Unknown menu state <%i> in motion!\n", currentMode);
        return;
    }

    Keyframe k_;
    k_.getKeyframeFromRobot(robot);
    aClip.setFrameAt(aClip.getCurrentFrameIndex(), k_);

    oldX = x;
    oldY = y;

    glutPostRedisplay();
  }
}