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; }
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; }
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; }