]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
#3084 bbGEditor Bug New Normal - Color refresh for inputs and outputs
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index 7c2ff2df3823ff29006145257918127a15abf9ef..731585d7ac15b80496e0cc030a37f53f072113f2 100644 (file)
@@ -73,23 +73,25 @@ namespace bbtk {
        
 wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView *baseView, int idManager,Factory::Pointer bbtkfactory) 
 {
-       _cbName                 = "ComplexBoxName";
-       _cbPackageName          = "PackageName";
-       _Author                 = "Author ??";
-       _Category               = "<VOID>";
-       _Description            = "Description ??";
-
-       _bugTextActor_text      = "void";
+       _cbName                                 = "ComplexBoxName";
+       _cbPackageName                  = "PackageName";
+       _Author                                 = "Author ??";
+       _Category                               = "<VOID>";
+       _Description                    = "Description ??";
+       _MessageKind                    = "-";
+       _MessageLevel                   = "-";
+
+       _bugTextActor_text              = "void";
        _bugTextActor_status    = 0;
 
-       _parent                 = parent;
-       _numBoxes               = 0;
-       _idManager              = idManager;
-       _baseView               = baseView;
-       _bbtkfactory            = bbtkfactory;
+       _parent                                 = parent;
+       _numBoxes                               = 0;
+       _idManager                              = idManager;
+       _baseView                               = baseView;
+       _bbtkfactory                    = bbtkfactory;
        
-       _startDragging          = false;
-       _isComplexBox           = false;
+       _startDragging                  = false;
+       _isComplexBox                   = false;
 
        if (_baseView != NULL) {
                //EED02JUIN2010
@@ -114,7 +116,6 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView
 
 void wxVtkSceneManager::disconnectDrop() 
 {
-       printf("EED %p ~wxVtkSceneManager::disconnectDrop()\n", this);
        //EED02JUIN2010         _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL);
        //      _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget( new tmpClasswxTextDropTarget() );
 }
@@ -124,10 +125,8 @@ void wxVtkSceneManager::disconnectDrop()
 wxVtkSceneManager::~wxVtkSceneManager() 
 {
        //FCY memory leaks
-       printf("EED %p ~wxVtkSceneManager() START\n", this);
        disconnectDrop();
        delete _baseView;
-       printf("EED %p ~wxVtkSceneManager() END\n", this);
 }
 
 //=========================================================================
@@ -278,6 +277,7 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std
 
 //EED 15 oct 2012      BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxType);
        
+
        Package::Pointer k;
        std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc;
        try{
@@ -326,15 +326,28 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std
        model->addObserver(view);
        model->addObserver(this);
 
+
+//EED2017 change order
+       //Associates the view with the correspondent renderer and the  model.
+       //(NOTE: Refresh is only made by the view)
+       view->setModel(model);
+       view->setBaseView(_baseView);
+
+       //Associates the controller with the correspondent model and view
+       controller->setModelAndView(model, view);
+
+
        //Iterate and create the input ports
        std::map<std::string, BlackBoxInputDescriptor*> descriptorInMap =
                        descriptor->GetInputDescriptorMap();
        std::map<std::string, BlackBoxInputDescriptor*>::iterator itInput;
-
        int i = 0;
-       for (itInput = descriptorInMap.begin(); itInput != descriptorInMap.end(); ++itInput) {
+       for (itInput = descriptorInMap.begin(); itInput != descriptorInMap.end(); ++itInput) 
+       {
                BlackBoxInputDescriptor *desc = itInput->second;
-               createGInputPort(GINPUTPORT, i, model, desc);
+//EED2017-04-07
+//             createGInputPort(GINPUTPORT, i, model, desc);
+               createGInputPort(GINPUTPORT, i, controller, desc);
                i++;
        }
 
@@ -342,27 +355,21 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std
        std::map<std::string, BlackBoxOutputDescriptor*> descriptorOutMap =
                        descriptor->GetOutputDescriptorMap();
        std::map<std::string, BlackBoxOutputDescriptor*>::iterator itOutput;
-
        i = 0;
-       for (itOutput = descriptorOutMap.begin(); itOutput
-                       != descriptorOutMap.end(); ++itOutput) {
+       for (itOutput = descriptorOutMap.begin(); itOutput!= descriptorOutMap.end(); ++itOutput) 
+       {
                BlackBoxOutputDescriptor *desc = itOutput->second;
-               createGOutputPort(GOUTPUTPORT, i, model, desc);
+//EED2017-04-07
+//             createGOutputPort(GOUTPUTPORT, i, model, desc);
+               createGOutputPort(GOUTPUTPORT, i, controller, desc);
                i++;
        }
 
-       //Associates the view with the correspondent renderer and the  model.
-       //(NOTE: Refresh is only made by the view)
-       view->setModel(model);
-       view->setBaseView(_baseView);
+//EED2017 change order
        view->initVtkObjects();
 
-       //Associates the controller with the correspondent model and view
-       controller->setModelAndView(model, view);
-
        //Resgiter change to the observers of the actual model
        model->notifyObservers(_idManager);
-
        int newId = addObjectController(controller);
 
        return newId;
@@ -477,21 +484,35 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 
 //=========================================================================
 
-int wxVtkSceneManager::createGInputPort(int portType, int posinBox, GBoxModel *blackBox, BlackBoxInputDescriptor *desc) 
+//EED2017-04-08
+//int wxVtkSceneManager::createGInputPort(int portType, int posinBox, GBoxModel *blackBox, BlackBoxInputDescriptor *desc) 
+int wxVtkSceneManager::createGInputPort(int portType, int posinBox, GObjectController *gBoxControler, BlackBoxInputDescriptor *desc) 
 {
+       GBoxModel *blackBox=(GBoxModel*)gBoxControler->getModel();
        GPortController* portController = createGPort(portType, desc->GetName(),
                        desc->GetTypeName(), desc->GetDescription(), posinBox, blackBox);
-       blackBox->addInputPort((GPortModel*) portController->getModel());
+       blackBox->addInputPort( (GPortModel*)portController->getModel() );
+
+       vtkGBoxView *vtkgboxView=(vtkGBoxView*)gBoxControler->getView();
+       vtkgboxView->addInputPort( (vtkGPortView*)portController->getView() );
+
        return portController->getId();
 }
 
 //=========================================================================
 
-int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) 
+//EED2017-04-08
+//int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) 
+int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GObjectController *gBoxControler, BlackBoxOutputDescriptor *desc) 
        {
+       GBoxModel *blackBox=(GBoxModel*)gBoxControler->getModel();
        GPortController* portController = createGPort(portType, desc->GetName(),
                        desc->GetTypeName(),desc->GetDescription(), posinBox, blackBox);
        blackBox->addOutputPort((GPortModel*) portController->getModel());
+
+       vtkGBoxView *vtkgboxView=(vtkGBoxView*)gBoxControler->getView();
+       vtkgboxView->addOutputPort( (vtkGPortView*)portController->getView() );
+
        return portController->getId();
 }
 
@@ -502,37 +523,27 @@ GPortController* wxVtkSceneManager::createGPort(int portType,std::string bbtkNam
        int type = GPORT;
 
        //Create the MVC Objects
-       GPortModel
-                       *model =
-                                       (GPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(
-                                                       type);
-       vtkGObjectView *view =
-                       GObjectsMVCFactory::getInstance()->createGObjectView(type);
-       GObjectController* controller =
-                       GObjectsMVCFactory::getInstance()->createGObjectController(type);
-
+       GPortModel                      *model          =       (GPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+       vtkGObjectView          *view           =       GObjectsMVCFactory::getInstance()->createGObjectView(type);
+       GObjectController       *controller =   GObjectsMVCFactory::getInstance()->createGObjectController(type);
        model->registerInBox(blackBox, portType, posInBox);
-
        model->setBBTKType(bbtkType);
        model->setBBTKName(bbtkName);
        model->setBBTKDescription(bbtkDescription);
-
        model->addObserver(view);
        model->addObserver(this);
-
        //Associates the view with the correspondent renderer and the  model.
        //(NOTE: Refresh is only made by the view)
        view->setModel(model);
        view->setBaseView(_baseView);
-       view->initVtkObjects();
+//EED017       view->initVtkObjects();
+       view->createVtkObjects();
+//  view->addVtkActors();
 
        //Associates the controller with the correspondent model and view
        controller->setModelAndView(model, view);
-
        model->notifyObservers(_idManager);
-
        addObjectController(controller);
-
        return (GPortController*) controller;
 }
 
@@ -568,7 +579,8 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort)
          * JGRR AND CM
          * Width increased from 2 to 3, it simplifies line handling and spline control :P
          * @param WidthLine  
-         */ 
+         */
+ //EED2017
         manContourView->SetWidthLine( 3 ) ;
        manContourView->SetShowText(false);
 
@@ -703,10 +715,10 @@ void wxVtkSceneManager::update(int idController, int command) {
                                 // Highliht element 
                                 obc->getView( )->setState( POSSIBLE_CONNECTION ) ;                             
                                 //obc->getView( )->setState( HIGHLIGHTED ) ;
-                            }
-                        }
-                    }
-                }
+                            } // if obc_type
+                        } // for c_it
+                    } // if
+                } // if iter
 
                 // EO JGRR & CM WH  
                      
@@ -768,7 +780,6 @@ void wxVtkSceneManager::update(int idController, int command) {
                                     if ((obc_type == GPORT) && (obc_state == SELECTED_POSSIBLE_CONNECTION)) {
                                         // Change element to connected state
                                         obc->getView()->setState(HIGHLIGHTED);
-
                                     }
 
                                 }
@@ -1352,6 +1363,7 @@ bool wxVtkSceneManager::MakeBoxExecutable() {
 //=========================================================================
 
 std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
+       std::cout << "wxVtkSceneManager::getDiagramBBS" << std::endl;
        bool existsExec = false;
 
        std::vector<std::string> packages;
@@ -1409,7 +1421,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                script += "\n";
 
                //ups2
-
+               
                script += LineNumber(wln, lnNmbr);
                script += "author \"";
                script += _Author;
@@ -1434,9 +1446,10 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                        script += LineNumber(wln, lnNmbr);
                        script += "new ";
                        int id = boxes[i];
-                       GObjectController *control = _controllers[id];
-                       GBlackBoxModel *model = (GBlackBoxModel*) control->getModel();
+                       GObjectController *control      = _controllers[id];
+                       GBlackBoxModel *model           = (GBlackBoxModel*) control->getModel();
 
+                       script += model->getBBTKPackage()+":";
                        script += model->getBBTKType();
                        script += " ";
                        script += model->getBBTKName();
@@ -1500,6 +1513,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                        }
                        else
                        {
+                                       script += LineNumber(wln, lnNmbr);
                                        script += "connect ";
                                        script += startBox->getBBTKName();
                                        script += ".";
@@ -1515,16 +1529,29 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                                        script += "\n";
                        }
 
+                       script += LineNumber(wln, lnNmbr);
                        script += "\n";
                }
 
                script += LineNumber(wln, lnNmbr);
                script += "\n";
 
+               script += LineNumber(wln, lnNmbr);
                script += "\n";
+
+               script += LineNumber(wln, lnNmbr);
                script += "# Complex input ports\n";
                script += complexInputs;
 
+               if((_MessageKind!="-")&&(_MessageLevel!="-")){
+                       script += LineNumber(wln, lnNmbr);
+                       script += "message ";
+                       script += _MessageKind;
+                       script += " ";
+                       script += _MessageLevel;
+                       script += "\n";
+               }
+
                for (i = 0; i < (int) execBoxes.size(); i++) {
                        script += LineNumber(wln, lnNmbr);
                        script += "exec ";
@@ -1544,6 +1571,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
 //=========================================================================
 
 std::string wxVtkSceneManager::saveComplexBoxBBS() {
+       std::cout<<"wxVtkSceneManager::saveComplexBoxBBS"<<std::endl;
        std::vector<std::string> packages;
        std::vector<int> boxes;
        std::vector<int> connections;
@@ -1617,6 +1645,7 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
                GObjectController *control = _controllers[id];
                GBlackBoxModel *model = (GBlackBoxModel*) control->getModel();
 
+               script += model->getBBTKPackage()+":";
                script += model->getBBTKType();
                script += " ";
                script += model->getBBTKName();
@@ -1710,7 +1739,17 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
 
        script += "\n";
 
-       for (i = 0; i < (int) execBoxes.size(); i++) {
+       if((_MessageKind!="-")&&(_MessageLevel!="-"))
+       {
+               script += "message ";
+               script += _MessageKind;
+               script += " ";
+               script += _MessageLevel;
+               script += "\n";
+       }
+
+       for (i = 0; i < (int) execBoxes.size(); i++) 
+       {
                script += "exec ";
                int id = execBoxes[i];
                GObjectController *control = _controllers[id];
@@ -1748,23 +1787,45 @@ void wxVtkSceneManager::refresh() {
 }
 //=========================================================================
 
-void wxVtkSceneManager::refreshScene() {
+void wxVtkSceneManager::refreshScene() 
+{
        _baseView->RefreshView();
 }
 
 //=========================================================================
 
-void wxVtkSceneManager::centerView() {
+void wxVtkSceneManager::centerView() 
+{
+       double bb[6];
+       _baseView->GetRenderer()->ComputeVisiblePropBounds(bb);
+
        double temp[3];
        _baseView->GetRenderer()->GetActiveCamera()->GetFocalPoint(temp);
        _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0, 0, temp[2]);
        _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp);
        _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0, 0, temp[2]);
+
+       _baseView->GetRenderer()->ResetCamera();
+       _baseView->GetRenderer()->ResetCameraClippingRange();
+
+/*
+       double tt=_baseView->GetRenderer()->GetNearClippingPlaneTolerance();
+       printf("EED wxVtkSceneManager::centerView() tolerance=%f\n",tt);
+       double cr1,cr2;
+       _baseView->GetRenderer()->GetActiveCamera()->GetClippingRange(cr1,cr2);
+       printf("EED wxVtkSceneManager::centerView() cr1=%f  cr2=%f\n",cr1,cr2);
+       _baseView->GetRenderer()->GetActiveCamera()->SetClippingRange(0.01,100000);
+       _baseView->GetRenderer()->GetActiveCamera()->GetClippingRange(cr1,cr2);
+       printf("EED wxVtkSceneManager::centerView() cr1=%f  cr2=%f\n",cr1,cr2);
+*/
+
+       _baseView->GetRenderer()->Render();
 }
 
 //=========================================================================
 
-void wxVtkSceneManager::saveDiagram(std::string &content) {
+void wxVtkSceneManager::saveDiagram(std::string &content) 
+{
        char buffer[50];
 
        content += "CATEGORY:";
@@ -1849,10 +1910,17 @@ void wxVtkSceneManager::saveDiagram(std::string &content) {
        sprintf(buffer, "%d", bsize);
        content += buffer;
        content += "\n";
-
+       
        for (int i = 0; i < bsize; i++) {
                int id = boxes[i];
+//             std::cout<<"id "<<id<<std::endl;//CFT
                GObjectController *cont = _controllers[id];
+//             std::cout<<"nombre: "<<cont->getStatusText()<<std::endl;//CFT
+//             std::cout<<"tipo: "<<cont->getModel()->getBBTKType()<<std::endl;//CFT
+//             //boxesDiagram[i] = cont->getModel()->getBBTKType();//CFT
+//             std::cout<<"nname: "<<cont->getModel()->getBBTKName()<<std::endl;//CFT
+//             std::cout<<"categorie: "<<GetCategory()<<std::endl;//CFT
+//             std::cout<<"type: "<<cont->getModel()->getGObjectType()<<std::endl;//CFT
                cont->getModel()->save(content);
        }
 
@@ -1889,7 +1957,6 @@ void wxVtkSceneManager::getCleanLine(stringstream &inputStream, std::string &lin
 //=========================================================================
 void wxVtkSceneManager::loadDiagram(stringstream &inputStream) 
 {
-
        int size;
        std::string version = "<void>";
        std::string line = "";
@@ -2149,7 +2216,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                std::istringstream is(result);
                is >> numBoxes;
 
-               for (int i = 0; i < numBoxes; i++) {
+               for (int i = 0; i < numBoxes; i++) 
+               {
                        //----------
                        getCleanLine(inputStream, line);//BOX
                        getCleanLine(inputStream, line);//package:type:name
@@ -2221,7 +2289,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        
                        
                        bool boxExecutable = false;
-                       if (isExec == "TRUE") {
+                       if (isExec == "TRUE") 
+                       {
                                boxExecutable = true;
                        }
 
@@ -2278,7 +2347,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                isCons >> numConns;
                
                
-               for (int i = 0; i < numConns; i++) {
+               for (int i = 0; i < numConns; i++) 
+               {
                        //----------
                        getCleanLine(inputStream, line);//CONNECTION
                        getCleanLine(inputStream, line);//Startbox.PortName:EndBox.PortName
@@ -2294,7 +2364,6 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        result = strtok(NULL, delims);
                        std::string nameEndPort(result);
 
-
                        int idCon = configGConnetion(nameStartBox, nameStartPort,nameEndBox, nameEndPort);
 
                        if (version != "1.0") {
@@ -2933,6 +3002,31 @@ std::string wxVtkSceneManager::GetDescription() {
 
 //=========================================================================
 
+void wxVtkSceneManager::SetMessageKind(std::string kind) {
+               _MessageKind = kind;
+       
+}
+                               
+//=========================================================================
+
+std::string wxVtkSceneManager::GetMessageKind(){
+               return _MessageKind;
+}
+
+//=========================================================================
+
+void wxVtkSceneManager::SetMessageLevel(std::string Level){
+               _MessageLevel = Level;
+}
+
+//=========================================================================
+
+std::string wxVtkSceneManager::GetMessageLevel(){
+               return _MessageLevel;
+}
+
+//=========================================================================
+
 std::vector< std::string> wxVtkSceneManager::GetExternalInputsNames()
 {