Exemplo n.º 1
0
bool
GeometrySelector::handle( const osgGA::GUIEventAdapter& ea
                        , osgGA::GUIActionAdapter& aa
                        )
{
    // RECORD_INFO("reaching here");
    osgViewer::View* viewer = dynamic_cast<osgViewer::View*>(&aa);

    if ( !viewer )
    {
        return false;

    }

    bool drag_event_occurred = ea.getEventType() & osgGA::GUIEventAdapter::DRAG;
    bool push_event_occurred = ea.getEventType() & osgGA::GUIEventAdapter::PUSH;
    bool release_event_occurred = ea.getEventType() & osgGA::GUIEventAdapter::RELEASE;
    bool left_mouse_button_pressed = ea.getButton() == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON;
    bool ctrl_key_pressed = ea.getModKeyMask() &  osgGA::GUIEventAdapter::MODKEY_CTRL;

    if(left_mouse_button_pressed && push_event_occurred)
    {
        Geometry * geometry = _get_intersection(ea,viewer);
        bool blank_click    = geometry == nullptr;
        if(blank_click)
        {
            id = "";
            selected = false;
            RECORD_INFO("not selected");
        }
        else
        {
            id = geometry -> getName();
            selected = true;
            RECORD_INFO(std::string("Selected") + geometry -> getName() );
        }
    }
    else
    {
        selected = false;
    }
    return false;
}
Exemplo n.º 2
0
bool
Selector::_select_neuron(Geometry * geometry)
{
    if(geometry == nullptr)
    {
        RECORD_INFO("Invalid click!");;
        return false;
    }
    RECORD_INFO("Compartment clicked => " + geometry -> getName());
    Geode * geode = (Geode *)(geometry -> getParent(0));
    RECORD_INFO("Neuron clicked => " + geode -> getName());
    ref_ptr<LOD>   lod((LOD *)(geode -> getParent(0)));
    MatrixTransform *matrix_transform = (MatrixTransform *)(lod -> getParent(0));
    matrix_transform -> removeChild(lod.get());
    osgFX::Outline * outline = new osgFX::Outline();
    outline -> setColor(Vec4(0.0f, 1.0f, 0.0f, 1.0f));
    outline -> addChild(lod.get());
    matrix_transform -> addChild(outline);
    return true;
}
Exemplo n.º 3
0
bool
Selector::handle( const osgGA::GUIEventAdapter& ea
                , osgGA::GUIActionAdapter& aa
                )
{
    osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);

    if ( !viewer )
    {
        return false;
    }

    // Geometry * geometry   = _get_intersection(ea,viewer);
    // cout << geometry;
    // bool blank_click      = geometry == nullptr;
    // if(!blank_click)
    // {
    //     RECORD_INFO("Compartment clicked " + geometry -> getName());
    // }
    // else
    // {
    //     // return true;
    //     // RECORD_INFO("Problem");
    // }

    if(select_info -> get_event_type() == 2)
    {
        // RECORD_INFO("Event Type => 2");
        return true;
    }

    // select_info -> set_event_type(0);
    // select_info -> set_id("");

    // if(ea.getEventType() == osgGA::GUIEventAdapter::RELEASE)
    // {
    //     RECORD_INFO(to_string(mode));
    //     if(mode == -1)
    //     {
    //         return false;
    //     }
    //     if(mode == 2)
    //     {
    //         menu -> exec(QCursor::pos());
    //     }
    //     if(mode == 3)
    //     {
    //         menu -> exec(QCursor::pos());
    //     }
    //     mode = -1;
    //     return true;
    // }

    // if(ea.getEventType() == osgGA::GUIEventAdapter::DRAG)
    // {
    //     QDrag *drag = new QDrag(this);
    //     // The data to be transferred by the drag and drop operation is contained in a QMimeData object
    //     QMimeData *data = new QMimeData;
    //     data->setText("This is a test");
    //     // Assign ownership of the QMimeData object to the QDrag object.
    //     drag->setMimeData(data);
    //     // Start the drag and drop operation
    //     drag->start();
    // }

    bool drag_event_occurred = ea.getEventType() & osgGA::GUIEventAdapter::DRAG;
    bool push_event_occurred = ea.getEventType() & osgGA::GUIEventAdapter::PUSH;
    bool release_event_occurred = ea.getEventType() & osgGA::GUIEventAdapter::RELEASE;
    bool left_mouse_button_pressed = ea.getButton() == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON;
    bool ctrl_key_pressed = ea.getModKeyMask() &  osgGA::GUIEventAdapter::MODKEY_CTRL;

    if(left_mouse_button_pressed && push_event_occurred && ctrl_key_pressed)
    {
        Geometry * geometry = _get_intersection(ea,viewer);
        bool blank_click    = geometry == nullptr;
        if(blank_click)
        {
            _deselect_everything();
            return false;
        }
        else
        {
            _select_compartment(geometry);
            RECORD_INFO("Compartment clicked " + geometry -> getName());
            // viewer -> emit_signal(geometry -> getName());
            select_info -> set_event_type(2);
            select_info -> set_id(geometry -> getName().c_str());
            return true;
        }
        return false;
    }

    if(release_event_occurred && left_mouse_button_pressed)
    {
        Geometry * geometry   = _get_intersection(ea,viewer);
        bool blank_click      = geometry == nullptr;
        bool selection_exists = false; //blank_click ? false : selections.find(geometry -> getName()) == selection.end()
        if(!ctrl_key_pressed)
        {
            if(blank_click)
            {
                _deselect_everything();
            }
            else
            {
                // RECORD_INFO("Select Compartment"); // do nothing
                _select_compartment(geometry);
                select_info -> set_event_type(1);
                select_info -> set_id(geometry -> getName().c_str());
                return true;
            }
        }
        return false;
        // else
        // {
        //     if(blank_click)
        //     {
        //         RECORD_INFO("Deselect Everything."); // do nothing
        //         // _deselect_everything();
        //     }
        //     else if(selection_exists)
        //     {
        //         RECORD_INFO("Select Neuron.");
        //         _select_neuron(geometry);
        //     }
        //     else
        //     {
        //         RECORD_INFO("Select Compartment"); // do nothing
        //         // _deselect_everything();
        //         _select_compartment(geometry);
        //     }
        // }
    }

    // if(ea.getEventType() == osgGA::GUIEventAdapter::PUSH)
    // {
    //     if(ea.getButton() == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON)
    //     {
    //         Geometry * geometry = _get_intersection(ea,viewer);
    //         if(geometry)
    //         {
    //             if
    //             {
    //                 _select_compartment(geometry);
    //                 mode = 0;
    //             }
    //             else
    //             {
    //                 _select_neuron(geometry);
    //                 mode = 1;
    //             }
    //             return true;
    //         }
    //         mode = -1;
    //         return false;
    //     }

    //     if(ea.getButton() == osgGA::GUIEventAdapter::RIGHT_MOUSE_BUTTON)
    //     {
    //         Geometry * geometry = _get_intersection(ea,viewer);
    //         if(geometry)
    //         {
    //             if(ea.getModKeyMask() &  osgGA::GUIEventAdapter::MODKEY_CTRL)
    //             {
    //                 _select_compartment(geometry);
    //                 mode = 2;
    //             }
    //             else
    //             {
    //                 _select_neuron(geometry);
    //                 mode = 3;
    //             }
    //             return true;
    //         }
    //         mode = -1;
    //         return false;
    //     }
    // }
    return false;
}