]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
no message
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index e6b41ad69b3c5c33412548d2548841e16bea89aa..4a30692602d990b6e8dd43403d6fada88180fb60 100644 (file)
@@ -798,10 +798,15 @@ namespace bbtk
                {
                        if(_selectedObjects.size()>0)
                        {
-                               for(int i=0;i<_selectedObjects.size();i++)
+                               for(int i=0;i<(int)_selectedObjects.size();i++)
                                {
-                                       int id = _selectedObjects[i];
-                                       deleteObject(id);
+                                       int id = _selectedObjects[i];                                   
+                                       std::map<int,GObjectController*>::iterator it;
+                    it = _controllers.find(id);
+                                       if (it!=_controllers.end())
+                                       {
+                                               deleteObject(id);
+                                       }
                                }
                                _selectedObjects.clear();
                        }
@@ -812,6 +817,28 @@ namespace bbtk
 
        //=========================================================================
 
+       void wxVtkSceneManager::AddControlerToBeRemove(std::vector<int> *controllersToRemove, int id)
+       {
+               
+               int i;
+               bool ok=true;
+               for(i=0 ; i < (int)controllersToRemove->size() ; i++ )
+               {
+                       if (id == (*controllersToRemove)[i] )
+                       {
+                               ok=false;
+                       }
+               }
+               
+               if (ok==true)
+               {
+                  controllersToRemove->push_back( id );
+               }
+               
+       }
+       
+       //=========================================================================
+       
        void wxVtkSceneManager::deleteObject(int id)
        {
                GObjectController *control = _controllers[id];
@@ -825,9 +852,9 @@ namespace bbtk
                        bool boxConnected = false;
 
                        // Add box input controllers to be removed
-                       for(int i = 0;i<inputs.size();i++)
+                       for(int i = 0;i< (int)inputs.size();i++)
                        {
-                               controllersToRemove.push_back(inputs[i]->getObjectId());
+                               AddControlerToBeRemove( &controllersToRemove, inputs[i]->getObjectId() );
                                if(inputs[i]->isConnected())
                                {
                                        boxConnected = true;
@@ -837,9 +864,9 @@ namespace bbtk
                        std::vector<GPortModel*> outputs = bbmod->getOutputPorts();
 
                        // Add box output controllers to be removed
-                       for(int i = 0;i<outputs.size();i++)
+                       for(int i = 0;i<(int)outputs.size();i++)
                        {
-                               controllersToRemove.push_back(outputs[i]->getObjectId());
+                               AddControlerToBeRemove( &controllersToRemove, outputs[i]->getObjectId() );
                                if(outputs[i]->isConnected())
                                {
                                        boxConnected = true;
@@ -857,37 +884,39 @@ namespace bbtk
                                        GConnectorModel *conMod = (GConnectorModel*)cont->getModel();
                                        if(conMod->getStartPort()!=NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
                                        {
-                                               controllersToRemove.push_back(conMod->getObjectId());
+                                               AddControlerToBeRemove( &controllersToRemove, conMod->getObjectId() );
                                        }
                                        if(conMod->getEndPort()!=NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
                                        {
-                                               controllersToRemove.push_back(conMod->getObjectId());
+                                               AddControlerToBeRemove( &controllersToRemove, conMod->getObjectId() );
                                        }
                                }
                        }
 
                        // Add box controller to be removed
-                       controllersToRemove.push_back(bbmod->getObjectId());
+                       AddControlerToBeRemove( &controllersToRemove, bbmod->getObjectId() );
                }
                else if(control->getGObjectType()==GCONNECTOR)
                {                       
                        GConnectorModel *conMod = (GConnectorModel*)control->getModel();
-                       controllersToRemove.push_back(conMod->getObjectId());
+                       AddControlerToBeRemove( &controllersToRemove, conMod->getObjectId() );
                }
 
-               for(int i = 0;i<controllersToRemove.size();i++)
+               
+               std::map<int,GObjectController*>::iterator it;
+
+               for(int i = 0;i<(int)controllersToRemove.size();i++)
                {
-                       int id = controllersToRemove[i];
-                       GObjectController *cont = _controllers[id];
+                       int key = controllersToRemove[i];
+                       it = _controllers.find( key );
+                       GObjectController *cont = _controllers[ key ];
                        if(cont!=NULL)
                        {
                                cont->removeFromScene();
                                unregisterController((InteractorStyleMaracas*)cont);                    
-                               _controllers.erase(id);
-                       }
-               }
-
-
+                               _controllers.erase(it);
+                       }//if
+               }// for
        }
 
        //=========================================================================