Esempio n. 1
0
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()));
}
Esempio n. 4
0
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);
}