+ bool wxVtkSceneManager::OnLeftDClick()
+ {
+ int X,Y;
+ wxVTKRenderWindowInteractor *wxVTKiren;
+ wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
+ wxVTKiren->GetEventPosition(X,Y);
+
+ std::map<int, GObjectController*>::iterator it;
+
+ bool clickOnObject = false;
+
+ for(it = _controllers.begin(); it != _controllers.end() && clickOnObject==false; ++it)
+ {
+ GObjectController *cont = it->second;
+ int type = cont->getGObjectType();
+
+ if(cont->getView()->isPointInside(X,Y))
+ {
+ if(type==GBLACKBOX)
+ {
+ for (int i=0; i<_selectedObjects.size(); i++)
+ {
+ int id = _selectedObjects[i];
+ GObjectController* control = _controllers[id];
+ control->getView()->setState(NOTHING_HAPPENS);
+ }
+ _selectedObjects.clear();
+
+ GBlackBoxModel *bbmodel = (GBlackBoxModel*)cont->getModel();
+ _parent->editBlackBox(bbmodel);
+ }
+ clickOnObject = true;
+ }
+ }
+
+ if(clickOnObject==false)
+ {
+ //_parent->editDiagramParameters(this);
+ }
+
+ return true;
+ }
+
+ //=========================================================================
+
+ bool wxVtkSceneManager::OnChar()
+ {
+ char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
+
+ // KeyCode 127 : Delete Key
+ // KeyCode 8 : Backspace Key
+ if(keyCode == 8 || keyCode == 127)
+ {
+ if(_selectedObjects.size()>0)
+ {
+ for(int i=0;i<_selectedObjects.size();i++)
+ {
+ int id = _selectedObjects[i];
+ deleteObject(id);
+ }
+ _selectedObjects.clear();
+ }
+ }
+
+ return true;
+ }
+
+ //=========================================================================
+
+ void wxVtkSceneManager::deleteObject(int id)
+ {
+ GObjectController *control = _controllers[id];
+ std::vector<int> controllersToRemove;
+
+ if(control->getGObjectType()==GBLACKBOX)
+ {
+ GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel();
+ std::vector<GPortModel*> inputs = bbmod->getInputPorts();
+
+ bool boxConnected = false;
+
+ // Add box input controllers to be removed
+ for(int i = 0;i<inputs.size();i++)
+ {
+ controllersToRemove.push_back(inputs[i]->getObjectId());
+ if(inputs[i]->isConnected())
+ {
+ boxConnected = true;
+ }
+ }
+
+ std::vector<GPortModel*> outputs = bbmod->getOutputPorts();
+
+ // Add box output controllers to be removed
+ for(int i = 0;i<outputs.size();i++)
+ {
+ controllersToRemove.push_back(outputs[i]->getObjectId());
+ if(outputs[i]->isConnected())
+ {
+ boxConnected = true;
+ }
+ }
+
+ // Add connection controllers to be removed
+ std::map<int, GObjectController*>::iterator it;
+ for(it = _controllers.begin(); it != _controllers.end(); ++it)
+ {
+ GObjectController *cont = it->second;
+ int type = cont->getGObjectType();
+ if(type==GCONNECTOR)
+ {
+ GConnectorModel *conMod = (GConnectorModel*)cont->getModel();
+ if(conMod->getStartPort()!=NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
+ {
+ controllersToRemove.push_back(conMod->getObjectId());
+ }
+ if(conMod->getEndPort()!=NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
+ {
+ controllersToRemove.push_back(conMod->getObjectId());
+ }
+ }
+ }
+
+ // Add box controller to be removed
+ controllersToRemove.push_back(bbmod->getObjectId());
+ }
+
+ for(int i = 0;i<controllersToRemove.size();i++)
+ {
+ int id = controllersToRemove[i];
+ GObjectController *cont = _controllers[id];
+ cont->removeFromScene();
+ unregisterController((InteractorStyleMaracas*)cont);
+ _controllers.erase(id);
+ }
+
+
+ }
+
+ //=========================================================================
+