]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
Bug #1689
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index 62ecce36189b7f9a345cafd7db5e67e2cd59bbbc..b5e431c7c3816a5368d4ec88efde27a08bca5075 100644 (file)
 namespace bbtk {
 
 //=========================================================================
-wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
-               wxVtk3DBaseView *baseView, int idManager) {
-       _cbName = "ComplexBoxName";
-       _cbPackageName = "PackageName";
-       _Author = "Author ??";
-       _Category = "<VOID>";
-       _Description = "Description ??";
-
-       _parent = parent;
-       _numBoxes = 0;
-       _idManager = idManager;
-       _baseView = baseView;
-       _startDragging = false;
-       _isComplexBox = false;
+       
+// EED 15 oct 2012  wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView *baseView, int idManager,Factory::Pointer bbtkfactory) 
+       
+wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView *baseView, int idManager,Factory::Pointer bbtkfactory) 
+{
+       _cbName                 = "ComplexBoxName";
+       _cbPackageName  = "PackageName";
+       _Author                 = "Author ??";
+       _Category               = "<VOID>";
+       _Description    = "Description ??";
+
+       _parent                 = parent;
+       _numBoxes               = 0;
+       _idManager              = idManager;
+       _baseView               = baseView;
+       _bbtkfactory    = bbtkfactory;
+       
+       _startDragging  = false;
+       _isComplexBox   = false;
 
        if (_baseView != NULL) {
                //EED02JUIN2010
@@ -70,14 +75,15 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
                registerController(this);
 
        }
-       _idConnectionInCreation = -1;
-       _contLastId = 0;
+       _idConnectionInCreation = -1;
+       _contLastId                             = 0;
 
 }
 
 //=========================================================================
 
-void wxVtkSceneManager::disconnectDrop() {
+void wxVtkSceneManager::disconnectDrop() 
+{
        printf("EED %p ~wxVtkSceneManager::disconnectDrop()\n", this);
        //EED02JUIN2010         _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL);
        //      _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget( new tmpClasswxTextDropTarget() );
@@ -85,7 +91,8 @@ void wxVtkSceneManager::disconnectDrop() {
 
 //=========================================================================
 
-wxVtkSceneManager::~wxVtkSceneManager() {
+wxVtkSceneManager::~wxVtkSceneManager() 
+{
        //FCY memory leaks
        printf("EED %p ~wxVtkSceneManager() START\n", this);
        disconnectDrop();
@@ -95,16 +102,15 @@ wxVtkSceneManager::~wxVtkSceneManager() {
 
 //=========================================================================
 
-void wxVtkSceneManager::configureBaseView() {
+void wxVtkSceneManager::configureBaseView() 
+{
        printf("EED wxVtkSceneManager::configureBaseView 0\n");
-       vtkInteractorStyleBaseView2D *interactorstylebaseview =
-                       vtkInteractorStyleBaseView2D::New();
+       vtkInteractorStyleBaseView2D *interactorstylebaseview = vtkInteractorStyleBaseView2D::New();
 
        _baseView->SetInteractorStyleBaseView(interactorstylebaseview);
 
        // Important to activate the 2D interaction system
-       wxVTKRenderWindowInteractor *iren =
-                       _baseView->GetWxVTKRenderWindowInteractor();
+       wxVTKRenderWindowInteractor *iren =     _baseView->GetWxVTKRenderWindowInteractor();
        interactorstylebaseview->SetInteractor(iren);
        iren->SetInteractorStyle(interactorstylebaseview);
        interactorstylebaseview->SetwxVtkBaseView(_baseView);
@@ -123,8 +129,7 @@ void wxVtkSceneManager::configureBaseView() {
        _textActor->SetInput("<void>");
        _textActor->GetTextProperty()->SetFontSize(60);
        _textActor->GetTextProperty()->BoldOn();
-       _textActor->GetTextProperty()->SetColor(PORTTEXT_NH_R, PORTTEXT_NH_G,
-                       PORTTEXT_NH_B);
+       _textActor->GetTextProperty()->SetColor(PORTTEXT_NH_R, PORTTEXT_NH_G,PORTTEXT_NH_B);
 
        _baseView->GetRenderer()->AddActor(_textActor);
 
@@ -232,31 +237,39 @@ void wxVtkSceneManager::configGBlackBox(int idBox, double xIn, double yIn,
 
 //=========================================================================
 
-int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,
-               std::string boxType) {
-       _worldState = NOTHING_HAPPENS;
-       //EED           int windowWidth                                                 = _baseView->GetRenWin()->GetSize()[0];
-       int windowHeight = _baseView->GetRenWin()->GetSize()[1];
-
-       int type = GBLACKBOX;
-
+int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std::string boxType) 
+{
+       _worldState                                             = NOTHING_HAPPENS;
+       int windowHeight                                = _baseView->GetRenWin()->GetSize()[1];
+       int type                                                = GBLACKBOX;
        //Create the MVC Objects
+       GBlackBoxModel *model                   =       (GBlackBoxModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+       vtkGObjectView *view                    =       GObjectsMVCFactory::getInstance()->createGObjectView(type);
+       GObjectController *controller   =       GObjectsMVCFactory::getInstance()->createGObjectController(type);
 
-       GBlackBoxModel
-                       *model =
-                                       (GBlackBoxModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(
-                                                       type);
-       vtkGObjectView *view =
-                       GObjectsMVCFactory::getInstance()->createGObjectView(type);
-       GObjectController* controller =
-                       GObjectsMVCFactory::getInstance()->createGObjectController(type);
+//EED 15 oct 2012      BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxType);
+       
+       Package::Pointer k;
+       std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc;
+       try{
+               k               = _bbtkfactory->GetPackage(packageName);
+               mapDesc = k->GetDescriptorMap();
+       }catch(Exception e){
+               printf("EED. ERROR!: Exception in wxVtkSceneManager::createGBlackBox for package %s, NOT EXIST\n", packageName.c_str());
+       }
 
-       BlackBoxDescriptor::Pointer descriptor =
-                       GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(
-                                       packageName, boxType);
-       if (descriptor == NULL){
+       BlackBoxDescriptor::Pointer descriptor;
+       try{
+               descriptor = mapDesc[boxType];
+       }catch(Exception e){
+               printf("EED. ERROR!: Exception in wxVtkSceneManager::createGBlackBox for box %s of package %s, NOT EXIST\n", boxType.c_str(),packageName.c_str());
+       }
+       
+       if (descriptor == NULL)
+       {
                        printf("SCP: ERROR in wxVtkSceneManager::createGBlackBox, box %s probably does not exist.\n",  boxType.c_str());
-               }
+       }
+       
        //Prepares the initial model
        //The coordinates obtained are the following. Top-Left:x=0,y=0 Bottom-Right:x=width,y=height
 
@@ -337,14 +350,9 @@ int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) {
 
        //Create the MVC Objects
 
-       GComplexBoxPortModel
-                       *model =
-                                       (GComplexBoxPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(
-                                                       type);
-       vtkGObjectView *view =
-                       GObjectsMVCFactory::getInstance()->createGObjectView(type);
-       GObjectController* controller =
-                       GObjectsMVCFactory::getInstance()->createGObjectController(type);
+       GComplexBoxPortModel    *model          = (GComplexBoxPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+       vtkGObjectView                  *view           = GObjectsMVCFactory::getInstance()->createGObjectView(type);
+       GObjectController               *controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
 
        //Prepares the initial model
 
@@ -395,14 +403,9 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 
        //Create the MVC Objects
 
-       GComplexBoxPortModel
-                       *model =
-                                       (GComplexBoxPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(
-                                                       type);
-       vtkGObjectView *view =
-                       GObjectsMVCFactory::getInstance()->createGObjectView(type);
-       GObjectController *controller =
-                       GObjectsMVCFactory::getInstance()->createGObjectController(type);
+       GComplexBoxPortModel    *model          = (GComplexBoxPortModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+       vtkGObjectView                  *view           = GObjectsMVCFactory::getInstance()->createGObjectView(type);
+       GObjectController               *controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
 
        //Prepares the initial model
 
@@ -445,8 +448,8 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 
 //=========================================================================
 
-int wxVtkSceneManager::createGInputPort(int portType, int posinBox,
-               GBoxModel *blackBox, BlackBoxInputDescriptor *desc) {
+int wxVtkSceneManager::createGInputPort(int portType, int posinBox, GBoxModel *blackBox, BlackBoxInputDescriptor *desc) 
+{
        GPortController* portController = createGPort(portType, desc->GetName(),
                        desc->GetTypeName(), desc->GetDescription(), posinBox, blackBox);
        blackBox->addInputPort((GPortModel*) portController->getModel());
@@ -455,8 +458,8 @@ int wxVtkSceneManager::createGInputPort(int portType, int posinBox,
 
 //=========================================================================
 
-int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,
-               GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) {
+int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) 
+       {
        GPortController* portController = createGPort(portType, desc->GetName(),
                        desc->GetTypeName(),desc->GetDescription(), posinBox, blackBox);
        blackBox->addOutputPort((GPortModel*) portController->getModel());
@@ -465,9 +468,8 @@ int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,
 
 //=========================================================================
 
-GPortController* wxVtkSceneManager::createGPort(int portType,
-               std::string bbtkName, std::string bbtkType, std::string bbtkDescription, int posInBox,
-               GBoxModel *blackBox) {
+GPortController* wxVtkSceneManager::createGPort(int portType,std::string bbtkName, std::string bbtkType, std::string bbtkDescription, int posInBox,GBoxModel *blackBox) 
+{
        int type = GPORT;
 
        //Create the MVC Objects
@@ -509,9 +511,6 @@ GPortController* wxVtkSceneManager::createGPort(int portType,
 
 int wxVtkSceneManager::createGConnector(GPortModel* startPort) 
 {
-       
-               
-
        int type = GCONNECTOR;
 
        manualConnectorContourController        *manContourControl              = new manualConnectorContourController();
@@ -587,41 +586,44 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort)
 
 //=========================================================================
 
-void wxVtkSceneManager::registerController(InteractorStyleMaracas *param) {
-       vtkInteractorStyleBaseView
-                       * baseViewControlManager =
-                                       (vtkInteractorStyleBaseView*) _baseView->GetInteractorStyleBaseView();
+void wxVtkSceneManager::registerController(InteractorStyleMaracas *param) 
+{
+       vtkInteractorStyleBaseView * baseViewControlManager = (vtkInteractorStyleBaseView*) _baseView->GetInteractorStyleBaseView();
        baseViewControlManager->AddInteractorStyleMaracas(param);
 }
 
 //=========================================================================
 
-void wxVtkSceneManager::unregisterController(InteractorStyleMaracas *param) {
-       vtkInteractorStyleBaseView
-                       * baseViewControlManager =
-                                       (vtkInteractorStyleBaseView*) _baseView->GetInteractorStyleBaseView();
+void wxVtkSceneManager::unregisterController(InteractorStyleMaracas *param) 
+{
+       vtkInteractorStyleBaseView *baseViewControlManager = (vtkInteractorStyleBaseView*) _baseView->GetInteractorStyleBaseView();
        baseViewControlManager->RemoveInteractorStyleMaracas(param);
 }
 
 //=========================================================================
 
-vtkRenderer* wxVtkSceneManager::getRenderer() {
+vtkRenderer* wxVtkSceneManager::getRenderer() 
+{
        return _baseView->GetRenderer();
 }
 
 //=========================================================================
 
-vtkRenderWindow* wxVtkSceneManager::getRenderWindow() {
+vtkRenderWindow* wxVtkSceneManager::getRenderWindow() 
+{
        return _baseView->GetRenWin();
 }
 //=========================================================================
 
 
 //=========================================================================
-int wxVtkSceneManager::GetIndexInSelected(int idControler) {
+int wxVtkSceneManager::GetIndexInSelected(int idControler) 
+{
        int index = -1;
-       for (int i = 0; i < (int) _selectedObjects.size(); i++) {
-               if (_selectedObjects[i] == idControler) {
+       for (int i = 0; i < (int) _selectedObjects.size(); i++) 
+       {
+               if (_selectedObjects[i] == idControler) 
+               {
                        index = i;
                        break;
                }
@@ -632,18 +634,21 @@ int wxVtkSceneManager::GetIndexInSelected(int idControler) {
 
 void wxVtkSceneManager::update(int idController, int command) {
 
-       if (command != NO_COMMAND) {
-               if (command == ADD_TO_SELECTED) {
-                       if (GetIndexInSelected(idController) == -1) {
+       if (command != NO_COMMAND) 
+       {
+               if (command == ADD_TO_SELECTED) 
+               {
+                       if (GetIndexInSelected(idController) == -1) 
+                       {
                                _selectedObjects.push_back(idController);
                        }
                } else if (command == REMOVE_FROM_SELECTED) {
                        int index = GetIndexInSelected(idController);
-                       if (index >= 0) {
+                       if (index >= 0) 
+                       {
                                _selectedObjects.erase(_selectedObjects.begin() + index);
                        }
                } else if (command == INIT_CREATION_CONTOUR) {
-
                 // JGRR & CM WH
                 typedef std::map<int , GObjectController*>::iterator TIterator ;
                 TIterator iter ;
@@ -683,12 +688,14 @@ void wxVtkSceneManager::update(int idController, int command) {
                        // The last one is the controller of the connector
                        std::map<int, GObjectController*>::iterator it2;
 
-
-                       for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) {
+                       for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) 
+                       {
                                GObjectController *cont = it2->second;
-                               if (cont->getGObjectType() == GPORT) {
+                               if (cont->getGObjectType() == GPORT) 
+                               {
                                        GPortModel* port = (GPortModel*) cont->getModel();
-                                       if (port->getPortType() == GINPUTPORT) {
+                                       if (port->getPortType() == GINPUTPORT) 
+                                       {
                                                cont->SetActive(true);
                                        } else {
                                                cont->getView()->setState(NOTHING_HAPPENS);
@@ -710,7 +717,8 @@ void wxVtkSceneManager::update(int idController, int command) {
                        GConnectorModel         *modelContour   = (GConnectorModel*) cont->getModel();
                        GObjectController       *finPort                = _controllers[idController];
 
-                       if (finPort->getGObjectType() == GPORT) {
+                       if (finPort->getGObjectType() == GPORT) 
+                       {
                                GPortModel* modelPort = (GPortModel*) finPort->getModel();
                                modelContour->setEndPort(modelPort);
 
@@ -745,7 +753,8 @@ void wxVtkSceneManager::update(int idController, int command) {
                                      
                        std::map<int, GObjectController*>::iterator it2;
 
-                       for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) {
+                       for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) 
+                       {
                                GObjectController *cont = it2->second;
                                if (cont->getView() != NULL) {
                                        cont->getView()->setState(NOTHING_HAPPENS);
@@ -1840,11 +1849,14 @@ 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 = "";
        char delims[] = ":";
        char *result = NULL;
+       int MAX_LINE_SIZE=1500;
+       char poort[MAX_LINE_SIZE];
 
        getCleanLine(inputStream, line);
 
@@ -2181,13 +2193,26 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        //----------
                        getCleanLine(inputStream, line);//PORT o FIN_BOX
                        std::string port = line.substr(0, 4);
-                       while (port == "PORT") {
+                       while (port == "PORT") 
+                       {
                                getCleanLine(inputStream, line);//name:value
-                               char poort[150];
+                               if (line.length()>=MAX_LINE_SIZE-1)
+                               {
+                                       line=line.substr(0, MAX_LINE_SIZE-1);
+                               }
+                               
                                strcpy(poort, line.c_str());
                                result = strtok(poort, delims);//name
                                std::string name(result);
+                               
+                               //EED 16 oct 2012 Adding at the end character " if necesary in the value definition
                                result = strtok(NULL, delims);//value
+                               if (( result[0]=='"' ) && ( result[ strlen(result)-1 ]!='"' )  )
+                               {
+                                       std::string tmpString=" ";
+                                       tmpString[0]=34;         // character "
+                                       strcat(result,tmpString.c_str());
+                               }
                                std::string value(result);
 
                                bbmod->setValueToInput(name, value);
@@ -2273,6 +2298,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                } // for numConns
 
        } // start
+       
+printf("EED wxVtkSceneManager::loadDiagram End \n");
 
 }
 //=========================================================================
@@ -2641,8 +2668,7 @@ void wxVtkSceneManager::addObjects(std::map<int, GObjectController*> objectsMap)
                        double xInic, yInic, zInic;
                        GBlackBoxModel* copyBox = (GBlackBoxModel*) cont->getModel();
                        copyBox->getInicPoint(xInic, yInic, zInic);
-                       int idBox = createGBlackBox(0, 0, copyBox->getBBTKPackage(),
-                                       copyBox->getBBTKType());
+                       int idBox = createGBlackBox(0, 0, copyBox->getBBTKPackage(),copyBox->getBBTKType());
 
                        int idcB = copyBox->getObjectId();
                        oldIdNewIdBoxes[idcB] = idBox;
@@ -2650,9 +2676,10 @@ void wxVtkSceneManager::addObjects(std::map<int, GObjectController*> objectsMap)
                        GBlackBoxModel* newbox = (GBlackBoxModel*) cont->getModel();
                        newbox->setInicPoint(xInic, yInic, zInic);
                        int num = newbox->getNumInputPorts();
-                       for (int j = 0; j < num; j++) {
+                       for (int j = 0; j < num; j++) 
+                       {
                                newbox->setValueToInputPort(j, copyBox->getValueInputPort(j));
-                       }
+                       }// for j
                        newbox->notifyObservers(_idManager);
                } else if (type == GCONNECTOR) {
                        int idCon = cont->getId();