void MapTool:: frame() { if (PROJECTION_FAILED) return; statsMan.start(StatsManager::EDITLINE); //handle motion Geometry::Point<double,3> pos = getPosition(); pos = crusta->mapToUnscaledGlobe(pos); if (pos == prevPosition) return; switch (mode) { case MODE_DRAGGING: { MapManager* mapMan = crusta->getMapManager(); Shape*& curShape = mapMan->getActiveShape(toolId); assert(curShape != NULL); ///\todo implement a way to check validity of curControl that doesn't suck assert(curShape->isValid(curControl)); ///\todo HACK: avoid moving control point if projection has failed Vis2010 float scaleFac = Vrui::getNavigationTransformation().getScaling(); if (scaleFac*Geometry::dist(pos, curControl.handle->pos) > 5.0) return; curShape->moveControlPoint(curControl, pos); break; } case MODE_SELECTING_CONTROL: { Shape*& curShape = crusta->getMapManager()->getActiveShape(toolId); if (curShape == NULL) { curControl = Shape::BAD_ID; mode = MODE_IDLE; } else { selectControl(pos); } break; } case MODE_SELECTING_SHAPE: { selectShape(pos); break; } default: break; } statsMan.stop(StatsManager::EDITLINE); }
void AMSimpleBeamConfigurationSetPage::initializePage() { AMViewPage::initializePage(); disconnectMouseSignal(); connect(view(), SIGNAL(mousePressed(QPointF)), this, SLOT(selectShape(QPointF))); connect(view(), SIGNAL(mouseLeftReleased(QPointF)), this, SLOT(releaseShape())); emit initBeamShape(); }
void AMSimpleBeamConfigurationSetPage::disconnectMouseSignal() { disconnect(view(), SIGNAL(mousePressed(QPointF)), this, SLOT(selectShape(QPointF))); disconnect(view(), SIGNAL(mouseReleased(QPointF)), this, SLOT(releaseShape())); }
void MapTool:: buttonCallback(int buttonSlotIndex, Vrui::InputDevice::ButtonCallbackData* cbData) { statsMan.start(StatsManager::EDITLINE); Geometry::Point<double,3> pos = getPosition(); pos = crusta->mapToUnscaledGlobe(pos); Shape*& curShape = crusta->getMapManager()->getActiveShape(toolId); if (cbData->newButtonState) { if (buttonSlotIndex==0) { switch (mode) { case MODE_IDLE: { createShape(curShape, curControl, pos); crusta->getMapManager()->updateActiveShape(toolId); mode = MODE_DRAGGING; break; } case MODE_SELECTING_CONTROL: { selectControl(pos); addControlPoint(curShape, curControl, pos); mode = MODE_DRAGGING; break; } case MODE_SELECTING_SHAPE: { if (curShape != NULL) { deleteShape(curShape, curControl); } break; } default: break; } } else { switch (mode) { case MODE_DRAGGING: { removeControl(curShape, curControl); //destroy empty shapes if (curShape->getControlPoints().size()==0) { deleteShape(curShape, curControl); mode = MODE_IDLE; } else mode = MODE_SELECTING_CONTROL; break; } case MODE_IDLE: case MODE_SELECTING_CONTROL: { selectShape(pos); mode = MODE_SELECTING_SHAPE; break; } default: break; } } } else { if (buttonSlotIndex==0) { switch (mode) { case MODE_DRAGGING: { mode = MODE_SELECTING_CONTROL; break; } default: break; } } else { switch (mode) { case MODE_SELECTING_SHAPE: { if (curShape != NULL) { mode = MODE_SELECTING_CONTROL; } else { mode = MODE_IDLE; } break; } default: break; } } } statsMan.stop(StatsManager::EDITLINE); }