]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
#3057 bbGEditor Feature New Normal - optimizing of vtk actors management (input...
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index 9b9c60a8b826890daf3ed879da402150402ea41f..95a2454c22ff447cf2ec8b5e21ee29bede39abf0 100644 (file)
@@ -1,3 +1,28 @@
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
+#                        pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+#
+#  This software is governed by the CeCILL-B license under French law and 
+#  abiding by the rules of distribution of free software. You can  use, 
+#  modify and/ or redistribute the software under the terms of the CeCILL-B 
+#  license as circulated by CEA, CNRS and INRIA at the following URL 
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability. 
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------  
+*/
+
 /*=========================================================================
  Program:   bbtk
  Module:    $RCSfile$
@@ -49,19 +74,24 @@ namespace bbtk {
 wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView *baseView, int idManager,Factory::Pointer bbtkfactory) 
 {
        _cbName                 = "ComplexBoxName";
-       _cbPackageName  = "PackageName";
+       _cbPackageName          = "PackageName";
        _Author                 = "Author ??";
        _Category               = "<VOID>";
-       _Description    = "Description ??";
+       _Description            = "Description ??";
+       _MessageKind = " ";
+       _MessageLevel = " ";
+
+       _bugTextActor_text      = "void";
+       _bugTextActor_status    = 0;
 
        _parent                 = parent;
        _numBoxes               = 0;
        _idManager              = idManager;
        _baseView               = baseView;
-       _bbtkfactory    = bbtkfactory;
+       _bbtkfactory            = bbtkfactory;
        
-       _startDragging  = false;
-       _isComplexBox   = false;
+       _startDragging          = false;
+       _isComplexBox           = false;
 
        if (_baseView != NULL) {
                //EED02JUIN2010
@@ -106,7 +136,6 @@ wxVtkSceneManager::~wxVtkSceneManager()
 
 void wxVtkSceneManager::configureBaseView() 
 {
-       printf("EED wxVtkSceneManager::configureBaseView 0\n");
        vtkInteractorStyleBaseView2D *interactorstylebaseview = vtkInteractorStyleBaseView2D::New();
 
        _baseView->SetInteractorStyleBaseView(interactorstylebaseview);
@@ -127,6 +156,7 @@ void wxVtkSceneManager::configureBaseView()
 
        // Actos Port_Text
        _textActor = vtkTextActor3D::New();
+//     _textActor = vtkTextActor::New();
        _textActor->SetPosition(-9999, -9999, GPOSITION_Z);
        _textActor->SetInput("<void>");
        _textActor->GetTextProperty()->SetFontSize(60);
@@ -194,7 +224,6 @@ void wxVtkSceneManager::configureBaseView()
        _aPolygonMapper->Modified();
 
        _baseView->GetRenderer()->AddActor(_fillObjectActor);
-       printf("EED wxVtkSceneManager::configureBaseView 1\n");
 }
 
 //=========================================================================
@@ -251,6 +280,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{
@@ -303,7 +333,6 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std
        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) {
                BlackBoxInputDescriptor *desc = itInput->second;
@@ -315,7 +344,6 @@ 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) {
@@ -328,6 +356,7 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std
        //(NOTE: Refresh is only made by the view)
        view->setModel(model);
        view->setBaseView(_baseView);
+
        view->initVtkObjects();
 
        //Associates the controller with the correspondent model and view
@@ -497,7 +526,11 @@ GPortController* wxVtkSceneManager::createGPort(int portType,std::string bbtkNam
        //(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);
@@ -507,6 +540,7 @@ GPortController* wxVtkSceneManager::createGPort(int portType,std::string bbtkNam
        addObjectController(controller);
 
        return (GPortController*) controller;
+
 }
 
 //=========================================================================
@@ -541,7 +575,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);
 
@@ -777,7 +812,7 @@ bool wxVtkSceneManager::OnMouseMove()
 {
        int X, Y;
        bool okStatusMessage    = false;
-       bool okPortMessage              = false;
+       bool okPortMessage      = false;
        wxVTKRenderWindowInteractor *wxVTKiren;
        wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
        wxVTKiren->GetEventPosition(X, Y);
@@ -819,7 +854,7 @@ bool wxVtkSceneManager::OnMouseMove()
                        if ((state == HIGHLIGHTED) || (state == SELECTED_POSSIBLE_CONNECTION )) 
                        {
                         // EO JGRR & CM    
-                               okStatusMessage = true;
+                               okStatusMessage         = true;
                                updateStatusBar(desc->getStatusText());
                                if (type == GBLACKBOX) 
                                {
@@ -829,32 +864,43 @@ bool wxVtkSceneManager::OnMouseMove()
                                if (type == GPORT) 
                                {
                                        // PortText
-                                       okPortMessage = true;
-                                       py = py + 5;
-                                       _textActor->SetInput(desc->getStatusText().c_str());
-                                       _textActor->SetScale(0.1);
-                                       _textActor->SetPosition(px - 25, py + 1, pz + 2);
-
-                                       // FillPortText
-                                       px = px - 33;
-                                       //py = py;
-                                       _fillObjectActor->SetScale(1);
-                                       _fillObjectActor->GetProperty()->SetOpacity(0.50);
-                                       _fillObjectActor->SetPosition(px, py, 1);
-                                       _aPolygonMapper->Modified();
-                               } // if GPORT
+                                       if ( ( _bugTextActor_text==desc->getStatusText() ) || (_bugTextActor_status==0) )
+                                       {
+                                               _bugTextActor_status    = 1;
+                                               okPortMessage           = true;
+                                               py                      = py + 5;
+                                               _textActor->SetScale(0.1);
+                                               std::string tmp = desc->getStatusText()+"\n";
+                                               _textActor->SetInput( tmp.c_str() );
+                                               _textActor->SetPosition(px - 25, py + 1, pz + 2);
+                                               _textActor->Modified();
+                                               // FillPortText
+                                               px                      = px - 33;
+                                               //py = py;
+                                               _fillObjectActor->SetScale(1);
+                                               _fillObjectActor->GetProperty()->SetOpacity(0.50);
+                                               _fillObjectActor->SetPosition(px, py, 1);
+                                               _aPolygonMapper->Modified();
+                                       } else {
+                                               _bugTextActor_status    = 2;
+                                       } //  _bugTextActor_tex
+                                       _bugTextActor_text              = desc->getStatusText();
 
-                       } // for controllers it
-               }
+                               } // if GPORT
+                       }  //if state
+               } // for controllers it
        }
        if (okStatusMessage == false) 
        {
                updateStatusBar("");
        }
 
-       if (okPortMessage == false) 
+       if ((okPortMessage == false) || (_bugTextActor_status== 2 ) )
        {
+               _bugTextActor_status    = 0; 
                _textActor->SetScale(0.0001);
+               _textActor->SetInput("a\n");
+               _textActor->Modified();
                _fillObjectActor->SetScale(0.0001);
        }
        return true;
@@ -1314,6 +1360,7 @@ bool wxVtkSceneManager::MakeBoxExecutable() {
 //=========================================================================
 
 std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
+       std::cout << "wxVtkSceneManager::getDiagramBBS" << std::endl;
        bool existsExec = false;
 
        std::vector<std::string> packages;
@@ -1371,7 +1418,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                script += "\n";
 
                //ups2
-
+               
                script += LineNumber(wln, lnNmbr);
                script += "author \"";
                script += _Author;
@@ -1396,9 +1443,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();
@@ -1462,6 +1510,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                        }
                        else
                        {
+                                       script += LineNumber(wln, lnNmbr);
                                        script += "connect ";
                                        script += startBox->getBBTKName();
                                        script += ".";
@@ -1477,16 +1526,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 ";
@@ -1506,6 +1568,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;
@@ -1579,6 +1642,7 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
                GObjectController *control = _controllers[id];
                GBlackBoxModel *model = (GBlackBoxModel*) control->getModel();
 
+               script += model->getBBTKPackage()+":";
                script += model->getBBTKType();
                script += " ";
                script += model->getBBTKName();
@@ -1672,6 +1736,12 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
 
        script += "\n";
 
+       script += "message ";
+       script += _MessageKind;
+       script += " ";
+       script += _MessageLevel;
+       script += "\n";
+
        for (i = 0; i < (int) execBoxes.size(); i++) {
                script += "exec ";
                int id = execBoxes[i];
@@ -1811,10 +1881,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);
        }
 
@@ -1851,7 +1928,7 @@ void wxVtkSceneManager::getCleanLine(stringstream &inputStream, std::string &lin
 //=========================================================================
 void wxVtkSceneManager::loadDiagram(stringstream &inputStream) 
 {
-       printf("EED wxVtkSceneManager::loadDiagram Start \n");
+
        int size;
        std::string version = "<void>";
        std::string line = "";
@@ -1994,6 +2071,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        }
 
 
+
                        //-----------------------
                        //- COMPLEX OUTPUT PORTS
                        //-----------------------
@@ -2110,7 +2188,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
@@ -2123,6 +2202,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        result = strtok(NULL, delims);//name
                        std::string name(result);
 
+
                        getCleanLine(inputStream, line);//ISEXEC:TRUE|FALSE
                        char exec[15];
                        strcpy(exec, line.c_str());
@@ -2181,7 +2261,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        
                        
                        bool boxExecutable = false;
-                       if (isExec == "TRUE") {
+                       if (isExec == "TRUE") 
+                       {
                                boxExecutable = true;
                        }
 
@@ -2238,7 +2319,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
@@ -2295,20 +2377,16 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                                        conView->getManualContourView()->AddPoint();
                                }
                        }// version !=1.0
-
                } // for numConns
-
-       } // start
-       
-printf("EED wxVtkSceneManager::loadDiagram End \n");
-
+       } // start      
 }
 //=========================================================================
 
 
 //=========================================================================
 void wxVtkSceneManager::configGComBoxInputOutputPort(bool inputoutput,
-               std::string portName, double xIn, double yIn, double zIn) {
+               std::string portName, double xIn, double yIn, double zIn) 
+{
        int idPort;
        if (inputoutput == true) {
                idPort = createGComplexBoxInputPort(portName);
@@ -2324,7 +2402,8 @@ void wxVtkSceneManager::configGComBoxInputOutputPort(bool inputoutput,
 
 
 //=========================================================================
-GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
+GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) 
+{
        int j;
        int idB;
        GBoxModel *bMod;
@@ -2333,7 +2412,8 @@ GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
        for (j = 0; j < (int) lstB.size(); j++) {
                idB = lstB[j];
                bMod = (GBoxModel*) _controllers[idB]->getModel();
-               if (_controllers[idB]->getModel()->getBBTKName() == boxname) {
+               if (_controllers[idB]->getModel()->getBBTKName() == boxname) 
+                {
                        boxModel = bMod;
                }
        } // for
@@ -2345,7 +2425,8 @@ GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
                for (j = 0; j < (int) lstInputs.size(); j++) {
                        idB = lstInputs[j];
                        bMod = (GBoxModel*) _controllers[idB]->getModel();
-                       if (_controllers[idB]->getModel()->getBBTKName() == boxname) {
+                       if (_controllers[idB]->getModel()->getBBTKName() == boxname) 
+                        {
                                boxModel = bMod;
                        }
                } // for
@@ -2356,7 +2437,8 @@ GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
                for (j = 0; j < (int) lstOutputs.size(); j++) {
                        int idB = lstOutputs[j];
                        bMod = (GBoxModel*) _controllers[idB]->getModel();
-                       if (_controllers[idB]->getModel()->getBBTKName() == boxname) {
+                       if (_controllers[idB]->getModel()->getBBTKName() == boxname) 
+                        {
                                boxModel = bMod;
                        }
                } // for
@@ -2386,7 +2468,7 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox,
        if (boxModel != NULL) {
                startP = boxModel->getOutputPort(nameStartPort);
                if(startP == NULL){
-                       printf("SCP: ERROR in wxVtkSceneManager::configGConnetion start port %s is null. Port name is probably wrong.\n", nameStartPort.c_str());
+                       printf("SCP: ERROR in wxVtkSceneManager::configGConnetion start port is null. Port name is probably wrong.  Start>%s::%s  End>%s::%s\n", nameStartBox.c_str(), nameStartPort.c_str(), nameEndBox.c_str(), nameEndPort.c_str() );
                }
        }
 
@@ -2398,7 +2480,7 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox,
        if (boxModel != NULL) {
                endP = boxModel->getInputPort(nameEndPort);
                if(endP == NULL){
-                       printf("SCP: ERROR in wxVtkSceneManager::configGConnetion end port %s is null. Port name is probably wrong\n", nameStartPort.c_str(), nameEndPort.c_str());
+                       printf("SCP: ERROR in wxVtkSceneManager::configGConnetion end port is null. Port name is probably wrong. Start>%s::%s  End>%s::%s \n", nameStartBox.c_str(), nameStartPort.c_str(), nameEndBox.c_str(), nameEndPort.c_str());
                }
        }
 
@@ -2892,6 +2974,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()
 {