]> 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 557a2b0e7aa8cbb2c1dc184373baca3c74b72ed9..731585d7ac15b80496e0cc030a37f53f072113f2 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$
 
 namespace bbtk {
 
-//=========================================================================
-wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
-               wxVtk3DBaseView *baseView, int idManager) {
-       _cbName = "ComplexBoxName";
-       _cbPackageName = "PackageName";
-       _Author = "Author ??";
-       _Category = "<VOID>";
-       _Description = "Description ??";
+#define POORT_MAX_LINE_SIZE_INTERPRETER 1500
 
-       _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 ??";
+       _MessageKind                    = "-";
+       _MessageLevel                   = "-";
+
+       _bugTextActor_text              = "void";
+       _bugTextActor_status    = 0;
+
+       _parent                                 = parent;
+       _numBoxes                               = 0;
+       _idManager                              = idManager;
+       _baseView                               = baseView;
+       _bbtkfactory                    = bbtkfactory;
+       
+       _startDragging                  = false;
+       _isComplexBox                   = false;
 
        if (_baseView != NULL) {
                //EED02JUIN2010
@@ -70,41 +107,38 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent,
                registerController(this);
 
        }
-       _idConnectionInCreation = -1;
-       _contLastId = 0;
+       _idConnectionInCreation = -1;
+       _contLastId                             = 0;
 
 }
 
 //=========================================================================
 
-void wxVtkSceneManager::disconnectDrop() {
-       printf("EED %p ~wxVtkSceneManager::disconnectDrop()\n", this);
+void wxVtkSceneManager::disconnectDrop() 
+{
        //EED02JUIN2010         _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL);
        //      _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget( new tmpClasswxTextDropTarget() );
 }
 
 //=========================================================================
 
-wxVtkSceneManager::~wxVtkSceneManager() {
+wxVtkSceneManager::~wxVtkSceneManager() 
+{
        //FCY memory leaks
-       printf("EED %p ~wxVtkSceneManager() START\n", this);
        disconnectDrop();
        delete _baseView;
-       printf("EED %p ~wxVtkSceneManager() END\n", this);
 }
 
 //=========================================================================
 
-void wxVtkSceneManager::configureBaseView() {
-       printf("EED wxVtkSceneManager::configureBaseView 0\n");
-       vtkInteractorStyleBaseView2D *interactorstylebaseview =
-                       vtkInteractorStyleBaseView2D::New();
+void wxVtkSceneManager::configureBaseView() 
+{
+       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);
@@ -119,12 +153,12 @@ 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);
        _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);
 
@@ -187,7 +221,6 @@ void wxVtkSceneManager::configureBaseView() {
        _aPolygonMapper->Modified();
 
        _baseView->GetRenderer()->AddActor(_fillObjectActor);
-       printf("EED wxVtkSceneManager::configureBaseView 1\n");
 }
 
 //=========================================================================
@@ -232,31 +265,40 @@ 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 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);
 
-       int type = GBLACKBOX;
+//EED 15 oct 2012      BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxType);
+       
 
-       //Create the MVC Objects
+       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());
+       }
 
-       GBlackBoxModel
-                       *model =
-                                       (GBlackBoxModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(
-                                                       type);
-       vtkGObjectView *view =
-                       GObjectsMVCFactory::getInstance()->createGObjectView(type);
-       GObjectController* controller =
-                       GObjectsMVCFactory::getInstance()->createGObjectController(type);
-
-       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
 
@@ -284,15 +326,28 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,
        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++;
        }
 
@@ -300,27 +355,21 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,
        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;
@@ -337,14 +386,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 +439,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,69 +484,73 @@ 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();
 }
 
 //=========================================================================
 
-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
-       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;
 }
 
 //=========================================================================
 
-int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
+int wxVtkSceneManager::createGConnector(GPortModel* startPort) 
+{
        int type = GCONNECTOR;
 
        manualConnectorContourController        *manContourControl              = new manualConnectorContourController();
@@ -530,11 +573,14 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        manContourView->SetColorEditContour(0.5, 0.5, 0.5);
        manContourView->SetColorSelectContour(1, 0.8, 0);
         
+       
+
         /**
          * 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);
 
@@ -581,41 +627,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;
                }
@@ -626,18 +675,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 ;
@@ -663,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  
                      
@@ -677,11 +729,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);
@@ -703,7 +758,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);
 
@@ -724,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);
-
                                     }
 
                                 }
@@ -738,7 +793,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);
@@ -759,7 +815,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);
@@ -801,7 +857,7 @@ bool wxVtkSceneManager::OnMouseMove()
                        if ((state == HIGHLIGHTED) || (state == SELECTED_POSSIBLE_CONNECTION )) 
                        {
                         // EO JGRR & CM    
-                               okStatusMessage = true;
+                               okStatusMessage         = true;
                                updateStatusBar(desc->getStatusText());
                                if (type == GBLACKBOX) 
                                {
@@ -811,32 +867,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;
@@ -953,8 +1020,10 @@ void wxVtkSceneManager::CancelConnection()
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnRightButtonUp() {
-       if (_worldState == INIT_CREATION_CONTOUR) {
+bool wxVtkSceneManager::OnRightButtonUp() 
+{
+       if (_worldState == INIT_CREATION_CONTOUR) 
+       {
                CancelConnection();
        }
        UnSelectBlackBoxes();
@@ -1079,8 +1148,21 @@ bool wxVtkSceneManager::OnChar()
         
        // KeyCode 127 : Delete Key
        // KeyCode 8 : Backspace Key
+
+
+       if (keyCode == 8 || keyCode == 127 || keyCode == 27) 
+       {
+               if (_worldState == INIT_CREATION_CONTOUR) 
+               {
+                       CancelConnection();
+                       UnSelectBlackBoxes();
+               }
+       }
+
+
        if (keyCode == 8 || keyCode == 127) 
        {
+
                        for (int i = 0; i < (int) _selectedObjects.size(); i++) 
                        {
                                int id = _selectedObjects[i];
@@ -1281,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;
@@ -1338,7 +1421,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                script += "\n";
 
                //ups2
-
+               
                script += LineNumber(wln, lnNmbr);
                script += "author \"";
                script += _Author;
@@ -1363,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();
@@ -1394,32 +1478,80 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) {
                script += LineNumber(wln, lnNmbr);
                script += "\n";
 
+
+               std::string complexInputs="";
+
                for (i = 0; i < (int) connections.size(); i++) {
-                       script += LineNumber(wln, lnNmbr);
-                       script += "connect ";
+                       //script += LineNumber(wln, lnNmbr);
+                       //script += "connect ";
                        int id = connections[i];
                        GObjectController *control = _controllers[id];
                        GConnectorModel *model = (GConnectorModel*) control->getModel();
 
-                       //Start Connection info
-                       GPortModel *start = model->getStartPort();
-                       script += start->getParentBox()->getBBTKName();
-                       script += ".";
-                       script += start->getBBTKName();
 
-                       script += " ";
+                       //Connection info
+                       GPortModel *start = model->getStartPort();
+                       GBoxModel *startBox = start->getParentBox();
 
-                       //End Connection info
                        GPortModel *end = model->getEndPort();
-                       script += end->getParentBox()->getBBTKName();
-                       script += ".";
-                       script += end->getBBTKName();
+                       GBoxModel *endBox = end->getParentBox();
+
+                       if (startBox->getGObjectType() == GCOMPLEXINPUTPORT)
+                       {
+                                       complexInputs += "input ";
+                                       complexInputs += startBox->getBBTKName();
+
+                                       complexInputs += " ";
+                                       complexInputs += endBox->getBBTKName();
+                                       complexInputs += ".";
+                                       complexInputs += end->getBBTKName();
+
+                                       complexInputs += " ";
+                                       complexInputs += "\" \"";
+
+                                       complexInputs += "\n";
+                       }
+                       else
+                       {
+                                       script += LineNumber(wln, lnNmbr);
+                                       script += "connect ";
+                                       script += startBox->getBBTKName();
+                                       script += ".";
+                                       script += start->getBBTKName();
 
+                                       script += " ";
+
+                                       //End Connection info
+                                       script += endBox->getBBTKName();
+                                       script += ".";
+                                       script += end->getBBTKName();
+
+                                       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 ";
@@ -1439,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;
@@ -1512,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();
@@ -1596,8 +1730,26 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
        }
 
        script += "\n";
+       script += "# Complex input ports\n";
+       script += complexInputs;
 
-       for (i = 0; i < (int) execBoxes.size(); i++) {
+       script += "\n";
+       script += "# Complex output ports\n";
+       script += complexOutputs;
+
+       script += "\n";
+
+       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];
@@ -1607,14 +1759,6 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
                script += "\n";
        }
 
-       script += "\n";
-       script += "# Complex input ports\n";
-       script += complexInputs;
-
-       script += "\n";
-       script += "# Complex output ports\n";
-       script += complexOutputs;
-
        script += "\n";
        script += "endefine";
        script += "\n";
@@ -1643,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:";
@@ -1687,6 +1853,8 @@ void wxVtkSceneManager::saveDiagram(std::string &content) {
                content += GetCbPackageName();
                content += "\n";
 
+               /* CHANGE TO THE VERSION 1.4 RaC2012 2nd HackFest
+                * External inputs are possible for applications and complex boxes
                //Print info complex input ports
                std::vector<int> inputs = getComplexInputPorts();
                int insize = inputs.size();
@@ -1700,6 +1868,7 @@ void wxVtkSceneManager::saveDiagram(std::string &content) {
                        GObjectController *cont = _controllers[id];
                        cont->getModel()->save(content);
                }
+               */
 
                //Print info complex output ports
                std::vector<int> outputs = getComplexOutputPorts();
@@ -1719,6 +1888,21 @@ void wxVtkSceneManager::saveDiagram(std::string &content) {
                content += "FALSE\n";
        }
 
+       // CHANGE TO THE VERSION 1.4 RaC2012 2nd HackFest
+       // External inputs are possible for applications and complex boxes
+       std::vector<int> inputs = getComplexInputPorts();
+       int insize = inputs.size();
+       content += "COMPLEXINPUTS:";
+       sprintf(buffer, "%d", insize);
+       content += buffer;
+       content += "\n";
+
+       for (int i = 0; i < insize; i++) {
+               int id = inputs[i];
+               GObjectController *cont = _controllers[id];
+               cont->getModel()->save(content);
+       }
+
        //Print boxes
        std::vector<int> boxes = getBlackBoxes();
        int bsize = boxes.size();
@@ -1726,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);
        }
 
@@ -1771,6 +1962,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
        std::string line = "";
        char delims[] = ":";
        char *result = NULL;
+       char poort[POORT_MAX_LINE_SIZE_INTERPRETER];
 
        getCleanLine(inputStream, line);
 
@@ -1792,6 +1984,9 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        if (line == "# - BBTKGEditor v 1.3 BBG BlackBox Diagram file") {
                                version = line.substr(18, 3);
                        }
+                       if (line == "# - BBTKGEditor v 1.4 BBG BlackBox Diagram file") {
+                               version = line.substr(18, 3);
+                       }
                } else if (line == "APP_START") {
                        start = true;
                        break;
@@ -1851,24 +2046,79 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                                SetCbPackageName(result);
                        }
 
+                       if(version < "1.4")
+                       {
+                               //-----------------------
+                               //- COMPLEX INPUT PORTS
+                               //-----------------------
+                               getCleanLine(inputStream, line);//COMPLEXINPUTS:num
+                               char inputs[30];
+                               strcpy(inputs, line.c_str());
+                               result = strtok(inputs, delims);
+                               result = strtok(NULL, delims);
+
+                               int numInputs;
+                               std::istringstream inps(result);
+                               inps >> numInputs;
+
+                               for (int i = 0; i < numInputs; i++) {
+                                       //----------
+                                       getCleanLine(inputStream, line);//COMPLEX_PORT
+                                       getCleanLine(inputStream, line);//name
+                                       std::string inputPortName(line);
+
+                                       //----------
+                                       getCleanLine(inputStream, line);//xInic:yInic:zInic
+                                       char coord[80];
+                                       strcpy(coord, line.c_str());
+                                       result = strtok(coord, delims);//xInic
+                                       std::string xInic(result);
+                                       result = strtok(NULL, delims);//yInic
+                                       std::string yInic(result);
+                                       result = strtok(NULL, delims);//zInic
+                                       std::string zInic(result);
+
+                                       double xIn, yIn, zIn;
+                                       std::istringstream xSt(xInic);
+                                       xSt >> xIn;
+                                       std::istringstream ySt(yInic);
+                                       ySt >> yIn;
+                                       std::istringstream zSt(zInic);
+                                       zSt >> zIn;
+
+                                       if (version<="1.2")
+                                       {
+                                               if (zIn==900) zIn=GPOSITION_Z;
+                                       }
+
+                                       getCleanLine(inputStream, line);//FIN_COMPLEX_PORT
+
+                                       configGComBoxInputOutputPort(true, inputPortName, xIn, yIn, zIn);
+
+                               } // for input complex box
+                       }
+
+
+
                        //-----------------------
-                       //- COMPLEX INPUT PORTS
+                       //- COMPLEX OUTPUT PORTS
                        //-----------------------
-                       getCleanLine(inputStream, line);//COMPLEXINPUTS:num
-                       char inputs[30];
-                       strcpy(inputs, line.c_str());
-                       result = strtok(inputs, delims);
+
+                       getCleanLine(inputStream, line);//COMPLEXOUTPUTS:num
+                       char outputs[30];
+                       strcpy(outputs, line.c_str());
+                       result = strtok(outputs, delims);
                        result = strtok(NULL, delims);
 
-                       int numInputs;
-                       std::istringstream inps(result);
-                       inps >> numInputs;
+                       int numOutputs;
+                       std::istringstream outps(result);
+                       outps >> numOutputs;
 
-                       for (int i = 0; i < numInputs; i++) {
+                       for (int i = 0; i < numOutputs; i++) {
                                //----------
                                getCleanLine(inputStream, line);//COMPLEX_PORT
                                getCleanLine(inputStream, line);//name
-                               std::string inputPortName(line);
+                               std::string outputPortName(line);
 
                                //----------
                                getCleanLine(inputStream, line);//xInic:yInic:zInic
@@ -1896,30 +2146,33 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                                
                                getCleanLine(inputStream, line);//FIN_COMPLEX_PORT
 
-                               configGComBoxInputOutputPort(true, inputPortName, xIn, yIn, zIn);
+                               configGComBoxInputOutputPort(false, outputPortName, xIn, yIn, zIn);
 
-                       } // for input complex box
+                       } // for output complex box
 
+               } // complex box
 
+               // RaC2012 2nd Hackfest
+               if(version >= "1.4")
+               {
                        //-----------------------
-                       //- COMPLEX OUTPUT PORTS
+                       //- EXTERNAL INPUT PORTS
                        //-----------------------
-
-                       getCleanLine(inputStream, line);//COMPLEXOUTPUTS:num
-                       char outputs[30];
-                       strcpy(outputs, line.c_str());
-                       result = strtok(outputs, delims);
+                       getCleanLine(inputStream, line);//COMPLEXINPUTS:num
+                       char inputs[30];
+                       strcpy(inputs, line.c_str());
+                       result = strtok(inputs, delims);
                        result = strtok(NULL, delims);
 
-                       int numOutputs;
-                       std::istringstream outps(result);
-                       outps >> numOutputs;
+                       int numInputs;
+                       std::istringstream inps(result);
+                       inps >> numInputs;
 
-                       for (int i = 0; i < numOutputs; i++) {
+                       for (int i = 0; i < numInputs; i++) {
                                //----------
                                getCleanLine(inputStream, line);//COMPLEX_PORT
                                getCleanLine(inputStream, line);//name
-                               std::string outputPortName(line);
+                               std::string inputPortName(line);
 
                                //----------
                                getCleanLine(inputStream, line);//xInic:yInic:zInic
@@ -1946,12 +2199,11 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                                }
                                
                                getCleanLine(inputStream, line);//FIN_COMPLEX_PORT
+                               configGComBoxInputOutputPort(true, inputPortName, xIn, yIn, zIn);
 
-                               configGComBoxInputOutputPort(false, outputPortName, xIn, yIn, zIn);
-
-                       } // for output complex box
+                       } // for external input
+               }
 
-               } // complex box
 
                //----------
                getCleanLine(inputStream, line);//BOXES:num
@@ -1964,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
@@ -1977,6 +2230,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());
@@ -2035,7 +2289,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                        
                        
                        bool boxExecutable = false;
-                       if (isExec == "TRUE") {
+                       if (isExec == "TRUE") 
+                       {
                                boxExecutable = true;
                        }
 
@@ -2048,13 +2303,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()>=POORT_MAX_LINE_SIZE_INTERPRETER-1)
+                               {
+                                       line=line.substr(0, POORT_MAX_LINE_SIZE_INTERPRETER-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);
@@ -2079,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
@@ -2136,18 +2405,16 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream)
                                        conView->getManualContourView()->AddPoint();
                                }
                        }// version !=1.0
-
                } // for numConns
-
-       } // start
-
+       } // 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);
@@ -2163,7 +2430,8 @@ void wxVtkSceneManager::configGComBoxInputOutputPort(bool inputoutput,
 
 
 //=========================================================================
-GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
+GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) 
+{
        int j;
        int idB;
        GBoxModel *bMod;
@@ -2172,31 +2440,39 @@ 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
 
-       if ((_isComplexBox) && (boxModel == NULL)) {
+
+
+       if (boxModel == NULL) {
                std::vector<int> lstInputs = getComplexInputPorts();
                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
 
+               if(_isComplexBox)
+               {
                std::vector<int> lstOutputs = getComplexOutputPorts();
                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
+               }
 
-       } // complex box
+       } // inputs/outputs
 
        return boxModel;
 }
@@ -2213,23 +2489,32 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox,
        GPortModel *endP = NULL;
 
        boxModel = findGBox(nameStartBox);
+       if(boxModel == NULL)
+       {
+               printf("RaC: ERROR in wxVtkSceneManager::configGConnetion A box to connect start port %s is null. Box name is probably wrong.\n", nameStartPort.c_str());
+       }
        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() );
                }
        }
 
        boxModel = findGBox(nameEndBox);
+       if(boxModel == NULL)
+       {
+                printf("RaC: ERROR in wxVtkSceneManager::configGConnetion A box to connect start port %s is null. Box name is probably wrong.\n", nameStartPort.c_str());
+       }
        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());
                }
        }
 
        //ups2
        int idCon = createGConnector(startP);
+
        _worldState = NOTHING_HAPPENS;
        GConnectorController *tempp = (GConnectorController*) _controllers[idCon];
 
@@ -2494,8 +2779,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;
@@ -2503,9 +2787,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();
@@ -2717,6 +3002,50 @@ 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()
+{
+
+       std::vector< std::string> extInputs;
+       std::map<int, GObjectController*>::iterator it;
+       for (it = _controllers.begin(); it != _controllers.end(); ++it)
+       {
+               GObjectController *cont = it->second;
+               if (cont->getGObjectType() == GCOMPLEXINPUTPORT)
+               {
+                       extInputs.push_back(cont->getModel()->getBBTKName());
+               }
+       }
+       return extInputs;
+}
+
+//=========================================================================
+
+
 
 void wxVtkSceneManager::printAll(int com , int sta ){