]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
Reduce Refresh Calls to Boost Speed
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index b27c724c5da02616bba5127a61f1fb27a31cb2fe..670ed13ad7c0aeff4afb3ec1939c443dc3d6e0ce 100644 (file)
 
 #include "wxVtkSceneManager.h"
 
-
 #include <vtkPolygon.h>
 #include <vtkUnstructuredGrid.h>
 
-
 namespace bbtk {
 
-cvs 
 //=========================================================================
 wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
                wxVtk3DBaseView *baseView, int idManager) {
@@ -62,13 +59,11 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
        if (_baseView != NULL) {
                //EED02JUIN2010
                printf(
-               "RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n", this);
-
-               #ifdef __APPLE__
-
+                               "RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n",
+                               this);
+//#ifdef __APPLE__
                _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget((wxDropTarget*)parent);
-
-               #endif
+//#endif
 
                configureBaseView();
                _worldState = NOTHING_HAPPENS;
@@ -92,9 +87,10 @@ void wxVtkSceneManager::disconnectDrop() {
 
 wxVtkSceneManager::~wxVtkSceneManager() {
        //FCY memory leaks
-       printf("EED %p ~wxVtkSceneManager()\n", this);
+       printf("EED %p ~wxVtkSceneManager() START\n", this);
        disconnectDrop();
        delete _baseView;
+       printf("EED %p ~wxVtkSceneManager() END\n", this);
 }
 
 //=========================================================================
@@ -118,7 +114,6 @@ void wxVtkSceneManager::configureBaseView() {
 
        _baseView->GetRenderer()->SetBackground(0.9, 0.9, 0.9);
        _baseView->GetRenderer()->GradientBackgroundOn();
-       _baseView->Refresh();
 
        // Actos Port_Text
        _textActor = vtkTextActor3D::New();
@@ -535,24 +530,19 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        manContourView->SetColorNormalContour(0, 0, 1);
        manContourView->SetColorEditContour(0.5, 0.5, 0.5);
        manContourView->SetColorSelectContour(1, 0.8, 0);
-       
-       
-      /**
+        
+        /**
          * JGRR AND CM
          * Width increased from 2 to 5, it simplifies line handling and spline control :P
          * @param WidthLine  
-         */
-        
-        manContourView->SetWidthLine( 5 ) ;
-
-
+         */ 
+        manContourView->SetWidthLine( 3 ) ;
        manContourView->SetShowText(false);
 
        manContourControl->SetModelView(manContourModel, manContourView);
 
        manContourControl->CreateNewManualContour();
 
-       manContourView->RefreshContour();
 
        double x, y, z;
        connectorModel->getInicPoint(x, y, z);
@@ -568,8 +558,7 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
 
        int bak = manContourControl->GetNumberOfPointsManualContour() - 1;
        manContourControl->_bakIdPoint = bak;
-       manContourView->Refresh();
-
+       
        manContourControl->SetMoving(false);
 
        connectorcontroller->setModelAndView(connectorModel, connectorView);
@@ -585,6 +574,7 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        connectorModel->addObserver(connectorView);
        connectorModel->addObserver(this);
 
+        manContourView->Refresh();
        return newId;
 }
 
@@ -663,9 +653,8 @@ void wxVtkSceneManager::update(int idController, int command) {
                                _selectedObjects.erase(_selectedObjects.begin() + index);
                        }
                } else if (command == INIT_CREATION_CONTOUR) {
-               
-               
-               // JGRR & CM WH
+
+                // JGRR & CM WH
                 typedef std::map<int , GObjectController*>::iterator TIterator ;
                 TIterator iter ;
                 TIterator iter_end ;
@@ -695,10 +684,9 @@ void wxVtkSceneManager::update(int idController, int command) {
                     }
                 }
 
-                // EO JGRR & CM WH
-               
-               
-                       _worldState = INIT_CREATION_CONTOUR;
+                // EO JGRR & CM WH  
+                     
+                        _worldState = INIT_CREATION_CONTOUR;
                        GObjectController* cont = _controllers[idController];
                        GPortModel* startOutputPort = (GPortModel*) cont->getModel();
 
@@ -735,32 +723,31 @@ void wxVtkSceneManager::update(int idController, int command) {
                        if (finPort->getGObjectType() == GPORT) {
                                GPortModel* modelPort = (GPortModel*) finPort->getModel();
                                modelContour->setEndPort(modelPort);
-                               
-                               
-                               // JGRR CM                     
-                    typedef std::map<int , GObjectController*>::iterator TIterator ;
-                    TIterator c_it = _controllers.begin( ) ;
-                    TIterator iter_end   = _controllers.end( ) ;                    
-                    // Go through all componets 
-                    for ( c_it ; c_it != iter_end ; c_it++ ) {
-                        GObjectController* obc = c_it->second ;
-                        int obc_type = obc->getModel( )->getGObjectType( ) ;
-                        int obc_state = obc->getView( )->getState( ) ;
-                        // if the component is a port and the type is the same of that selected
-                        if ( ( obc_type == GPORT ) && ( obc_state == POSSIBLE_CONNECTION )) {
-                            // Return element to neutral state if not selected
-                            obc->getView( )->setState( NOTHING_HAPPENS ) ;                            
-                        }
-                        if ( ( obc_type == GPORT ) &&  (obc_state == SELECTED_POSSIBLE_CONNECTION )) {
-                            // Change element to connected state
-                            obc->getView( )->setState( HIGHLIGHTED ) ;
-                           
-                        }                 
-                        
-                    }
-                    // EO JGRR CM
-                               
-                               _parent->saveTempDiagram();
+
+                                // JGRR CM                     
+                                typedef std::map<int, GObjectController*>::iterator TIterator;
+                                TIterator c_it = _controllers.begin();
+                                TIterator iter_end = _controllers.end();
+                                // Go through all componets 
+                                for (c_it; c_it != iter_end; c_it++) {
+                                    GObjectController* obc = c_it->second;
+                                    int obc_type = obc->getModel()->getGObjectType();
+                                    int obc_state = obc->getView()->getState();
+                                    // if the component is a port and the type is the same of that selected
+                                    if ((obc_type == GPORT) && (obc_state == POSSIBLE_CONNECTION)) {
+                                        // Return element to neutral state if not selected
+                                        obc->getView()->setState(NOTHING_HAPPENS);
+                                    }
+                                    if ((obc_type == GPORT) && (obc_state == SELECTED_POSSIBLE_CONNECTION)) {
+                                        // Change element to connected state
+                                        obc->getView()->setState(HIGHLIGHTED);
+
+                                    }
+
+                                }
+                                // EO JGRR CM                                
+                    
+                                _parent->saveTempDiagram();
                        }
 
                        manualConnectorContourController
@@ -769,8 +756,7 @@ void wxVtkSceneManager::update(int idController, int command) {
                        manualConnectorContourView
                                        * connView =
                                                        (manualConnectorContourView*) manCont->GetManualViewBaseContour();
-                       connView->Refresh();
-
+                                     
                        std::map<int, GObjectController*>::iterator it2;
 
                        for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) {
@@ -781,10 +767,11 @@ void wxVtkSceneManager::update(int idController, int command) {
                                }
                                cont->SetActive(true);
                        }
+                        connView->Refresh();          
                }
 
        }
-
+        
 }
 
 //=========================================================================
@@ -832,7 +819,9 @@ bool wxVtkSceneManager::OnMouseMove() {
                        int state = desc->getView()->getState();
                        desc->getModel()->getCenter(px, py, pz);
 
-                       if (state == HIGHLIGHTED) {
+                        // JGRR & CM
+                       if ((state == HIGHLIGHTED) || (state == SELECTED_POSSIBLE_CONNECTION )) {
+                        // EO JGRR & CM    
                                okStatusMessage = true;
                                updateStatusBar(desc->getStatusText());
                                if (type == GBLACKBOX) {
@@ -887,16 +876,15 @@ bool wxVtkSceneManager::OnLeftButtonDown() {
                                if (portmod->getPortType() == GINPUTPORT
                                                && portView->getState() == HIGHLIGHTED) {
                                        isOverPort = true;
-                               } // if
-                               
-                               // JGRR & CM                    
-                    if ( portmod->getPortType( ) == GINPUTPORT &&  portView->getState( ) == SELECTED_POSSIBLE_CONNECTION   ) {
-                        isOverPort = true ;
-                        portView->setState( HIGHLIGHTED);
-                    }                    
-                    // EO JGRR & CM 
-                    
-                       } // if
+                                 } // if
+                                // JGRR & CM                    
+                                if ( portmod->getPortType( ) == GINPUTPORT &&  portView->getState( ) == SELECTED_POSSIBLE_CONNECTION   ) {
+                                    isOverPort = true ;
+                                    portView->setState( HIGHLIGHTED);
+                                }                    
+                                // EO JGRR & CM 
+
+                        } // if
                } // for
 
                if (isOverPort == false) {
@@ -1036,6 +1024,7 @@ void wxVtkSceneManager::UnSelectBlackBoxes() {
                int id = _selectedObjects[i];
                GObjectController* control = _controllers[id];
                control->getView()->setState(NOTHING_HAPPENS);
+               control->getModel()->notifyObservers(_idManager);
        }// for _selectedObjects
        _selectedObjects.clear();
 }
@@ -1112,7 +1101,7 @@ bool wxVtkSceneManager::OnChar() {
                        _selectedObjects.clear();
                }
        }
-        
+        ctrlkey+=keyCode;
         /// Duplicate 
              if(ctrlkey==5){                
                 if(_selectedObjects.size()){
@@ -1223,7 +1212,7 @@ void wxVtkSceneManager::deleteObject(int id) {
                        _controllers.erase(it);
                }//if
        }// for
-       _parent->saveTempDiagram();
+       _parent->saveTempandUpdate();
 }
 
 //=========================================================================
@@ -1640,7 +1629,6 @@ void wxVtkSceneManager::deleteAllBoxes() {
        }
        _selectedObjects.clear();
        _controllers.clear();
-       refreshScene();
 }
 
 //=========================================================================
@@ -1663,8 +1651,6 @@ void wxVtkSceneManager::centerView() {
        _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0, 0, temp[2]);
        _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp);
        _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0, 0, temp[2]);
-       _baseView->RefreshView();
-
 }
 
 //=========================================================================
@@ -2029,6 +2015,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                std::string value(result);
 
                                bbmod->setValueToInput(name, value);
+
                                getline(inputStream, line);//PORT o FIN_BOX
                                port = line.substr(0, 4);
                        } // while
@@ -2110,7 +2097,6 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
 
        } // start
 
-       refresh();
 }
 //=========================================================================
 
@@ -2296,9 +2282,7 @@ int wxVtkSceneManager::addObjectController(GObjectController* objController) {
        int newId = _contLastId;//_controllers.size();
        objController->setId(newId);
        _controllers[newId] = objController;
-       std::cout
-                       << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = "
-                       << _contLastId << std::endl;
+       //std::cout << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = " << _contLastId << std::endl;
        _contLastId++;
        return newId;
 }
@@ -2397,7 +2381,6 @@ void wxVtkSceneManager::DuplicateObjects(std::map<int, GObjectController*> objec
             cont->getModel()->notifyObservers(_idManager);
 
         }
-        refreshScene();
     }
 
 
@@ -2638,7 +2621,6 @@ void wxVtkSceneManager::SetCbPackageName(std::string packagename) {
        }
 }
 
-
 //=========================================================================
 std::string wxVtkSceneManager::GetCbPackageName() {
        return _cbPackageName;
@@ -2678,14 +2660,14 @@ void wxVtkSceneManager::SetDescription(std::string description) {
        }
 }
 
-
 //=========================================================================
 std::string wxVtkSceneManager::GetDescription() {
        return _Description;
 }
 
 //=========================================================================
-// JGRR & CM
+
+
 void wxVtkSceneManager::printAll(int com , int sta ){
         
          int tmpState = sta ;
@@ -2741,4 +2723,5 @@ void wxVtkSceneManager::printAll(int com , int sta ){
 
 } // EO namespace bbtk
 
-// EOF 
+// EOF
+