]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx
Feature #1674 . RaC
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxVtkSceneManager.cxx
index dc5545af9ba4652599f22fd17aa1b2209c125b68..62ecce36189b7f9a345cafd7db5e67e2cd59bbbc 100644 (file)
@@ -110,14 +110,16 @@ void wxVtkSceneManager::configureBaseView() {
        interactorstylebaseview->SetwxVtkBaseView(_baseView);
 
        _baseView->GetRenderer()->GetActiveCamera()->ParallelProjectionOn();
-       _baseView->GetRenderer()->ResetCamera(-100, 100, -100, 100, 800, 1100);
+       _baseView->GetRenderer()->ResetCamera(-100, 100, -100, 100, -1000, 1000);
+       _baseView->GetRenderer()->GetActiveCamera()->Zoom(10);
+
 
        _baseView->GetRenderer()->SetBackground(0.9, 0.9, 0.9);
        _baseView->GetRenderer()->GradientBackgroundOn();
 
        // Actos Port_Text
        _textActor = vtkTextActor3D::New();
-       _textActor->SetPosition(-9999, -9999, 900);
+       _textActor->SetPosition(-9999, -9999, GPOSITION_Z);
        _textActor->SetInput("<void>");
        _textActor->GetTextProperty()->SetFontSize(60);
        _textActor->GetTextProperty()->BoldOn();
@@ -131,7 +133,7 @@ void wxVtkSceneManager::configureBaseView() {
        //------------
        double xInic = 0;
        double yInic = 0;
-       double zInic = 900;
+       double zInic = GPOSITION_Z;
 
        vtkPolygon *aPolygon = vtkPolygon::New();
        _fillObjectActor = vtkActor::New();
@@ -262,7 +264,7 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,
        double yy = windowHeight - y;
 
        //z value is not important yet, because it is only used a parallel projection
-       double zz = 900;
+       double zz = GPOSITION_Z;
        _baseView->TransCoordScreenToWorld(xx, yy, zz);
        model->setInicPoint(xx, yy, zz);
 
@@ -350,8 +352,7 @@ int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) {
        double yy = windowHeight - 5;
 
        //z value is not important yet, because it is only used a parallel projection
-       double zz = 900;
-       printf("EED  wxVtkSceneManager::createGComplexBoxInputPort 900-450\n");
+       double zz = GPOSITION_Z;
 
        _baseView->TransCoordScreenToWorld(xx, yy, zz);
        model->setInicPoint(xx, yy, zz);
@@ -365,7 +366,7 @@ int wxVtkSceneManager::createGComplexBoxInputPort(std::string inputName) {
 
        //create the output port
        GPortController* portController = createGPort(GOUTPUTPORT, inputName,
-                       "ComplexInputPort", 0, model);
+                       "ComplexOutputPortType","ComplexOutputPortDescriopton", 0, model);
        model->addOutputPort((GPortModel*) portController->getModel());
 
        //Associates the view with the correspondent renderer and the  model.
@@ -409,9 +410,7 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
        double yy = windowHeight - 5;
 
        //z value is not important yet, because it is only used a parallel projection
-       double zz = 900;
-
-       printf("EED  wxVtkSceneManager::createGComplexBoxOutputPort 900-450\n");
+       double zz = GPOSITION_Z;
 
        _baseView->TransCoordScreenToWorld(xx, yy, zz);
        model->setInicPoint(xx, yy, zz);
@@ -425,7 +424,7 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 
        //create the output port
        GPortController* portController = createGPort(GINPUTPORT, outputName,
-                       "ComplexInputPort", 0, model);
+                       "ComplexInputPort","ComplexInputPortDescription", 0, model);
        model->addInputPort((GPortModel*) portController->getModel());
 
        //Associates the view with the correspondent renderer and the  model.
@@ -449,7 +448,7 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) {
 int wxVtkSceneManager::createGInputPort(int portType, int posinBox,
                GBoxModel *blackBox, BlackBoxInputDescriptor *desc) {
        GPortController* portController = createGPort(portType, desc->GetName(),
-                       desc->GetTypeName(), posinBox, blackBox);
+                       desc->GetTypeName(), desc->GetDescription(), posinBox, blackBox);
        blackBox->addInputPort((GPortModel*) portController->getModel());
        return portController->getId();
 }
@@ -459,7 +458,7 @@ int wxVtkSceneManager::createGInputPort(int portType, int posinBox,
 int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,
                GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) {
        GPortController* portController = createGPort(portType, desc->GetName(),
-                       desc->GetTypeName(), posinBox, blackBox);
+                       desc->GetTypeName(),desc->GetDescription(), posinBox, blackBox);
        blackBox->addOutputPort((GPortModel*) portController->getModel());
        return portController->getId();
 }
@@ -467,7 +466,7 @@ int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,
 //=========================================================================
 
 GPortController* wxVtkSceneManager::createGPort(int portType,
-               std::string bbtkName, std::string bbtkType, int posInBox,
+               std::string bbtkName, std::string bbtkType, std::string bbtkDescription, int posInBox,
                GBoxModel *blackBox) {
        int type = GPORT;
 
@@ -485,6 +484,7 @@ GPortController* wxVtkSceneManager::createGPort(int portType,
 
        model->setBBTKType(bbtkType);
        model->setBBTKName(bbtkName);
+       model->setBBTKDescription(bbtkDescription);
 
        model->addObserver(view);
        model->addObserver(this);
@@ -507,18 +507,19 @@ GPortController* wxVtkSceneManager::createGPort(int portType,
 
 //=========================================================================
 
-int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
-       int type = GCONNECTOR;
+int wxVtkSceneManager::createGConnector(GPortModel* startPort) 
+{
+       
+               
 
-       manualConnectorContourController* manContourControl =
-                       new manualConnectorContourController();
-       manualConnectorContourView* manContourView =
-                       new manualConnectorContourView();
-       manualContourModel* manContourModel = new manualContourModel();
+       int type = GCONNECTOR;
 
-       GConnectorController* connectorcontroller = new GConnectorController();
-       GConnectorModel* connectorModel = new GConnectorModel();
-       vtkGConnectorView* connectorView = new vtkGConnectorView();
+       manualConnectorContourController        *manContourControl              = new manualConnectorContourController();
+       manualConnectorContourView                      *manContourView                 = new manualConnectorContourView();
+       manualContourModel                                      *manContourModel                = new manualContourModel();
+       GConnectorController                            *connectorcontroller    = new GConnectorController();
+       GConnectorModel                                         *connectorModel                 = new GConnectorModel();
+       vtkGConnectorView                                       *connectorView                  = new vtkGConnectorView();
        connectorModel->setGObjectType(type);
 
        manContourModel->SetCloseContour(false);
@@ -527,15 +528,17 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        manContourView->SetModel(manContourModel);
        manContourView->SetWxVtkBaseView(_baseView);
        manContourView->SetRange(0.5);
-       manContourView->SetZ(900);
+       manContourView->SetZ(GPOSITION_Z);
 
        manContourView->SetColorNormalContour(0, 0, 1);
        manContourView->SetColorEditContour(0.5, 0.5, 0.5);
        manContourView->SetColorSelectContour(1, 0.8, 0);
         
+       
+
         /**
          * JGRR AND CM
-         * Width increased from 2 to 5, it simplifies line handling and spline control :P
+         * Width increased from 2 to 3, it simplifies line handling and spline control :P
          * @param WidthLine  
          */ 
         manContourView->SetWidthLine( 3 ) ;
@@ -548,7 +551,8 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
 
        double x, y, z;
        connectorModel->getInicPoint(x, y, z);
-
+       
+       
        manContourControl->SetState(1);
        manContourModel->SetCloseContour(false);
 
@@ -576,7 +580,8 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) {
        connectorModel->addObserver(connectorView);
        connectorModel->addObserver(this);
 
-        manContourView->Refresh();
+//     manContourView->Refresh();
+       
        return newId;
 }
 
@@ -629,26 +634,9 @@ void wxVtkSceneManager::update(int idController, int command) {
 
        if (command != NO_COMMAND) {
                if (command == ADD_TO_SELECTED) {
-                       //EEDBorrame                            GObjectController* cont = _controllers[idController];
-
                        if (GetIndexInSelected(idController) == -1) {
                                _selectedObjects.push_back(idController);
                        }
-
-                       //EEDBorrame
-                       //                              bool foundID=false;
-                       //                              for (int i=0; i<(int)_selectedObjects.size() && foundID==false; i++)
-                       //                              {
-                       //                                      if(_selectedObjects[i]==idController)
-                       //                                      {
-                       //                                              foundID = true;
-                       //                                      }
-                       //                              }
-                       //                              if(!foundID)
-                       //                              {
-                       //                                      _selectedObjects.push_back(idController);
-                       //                              }
-
                } else if (command == REMOVE_FROM_SELECTED) {
                        int index = GetIndexInSelected(idController);
                        if (index >= 0) {
@@ -688,13 +676,14 @@ void wxVtkSceneManager::update(int idController, int command) {
 
                 // EO JGRR & CM WH  
                      
-                        _worldState = INIT_CREATION_CONTOUR;
-                       GObjectController* cont = _controllers[idController];
+                       _worldState                                     = INIT_CREATION_CONTOUR;
+                       GObjectController* cont         = _controllers[idController];
                        GPortModel* startOutputPort = (GPortModel*) cont->getModel();
 
                        // The last one is the controller of the connector
                        std::map<int, GObjectController*>::iterator it2;
 
+
                        for (it2 = _controllers.begin(); it2 != _controllers.end(); ++it2) {
                                GObjectController *cont = it2->second;
                                if (cont->getGObjectType() == GPORT) {
@@ -714,13 +703,12 @@ void wxVtkSceneManager::update(int idController, int command) {
                        }
                        _selectedObjects.clear();
                        _idConnectionInCreation = createGConnector(startOutputPort);
-               } else if (command == FIN_CREATION_CONTOUR && _worldState
-                               == INIT_CREATION_CONTOUR) {
+               } else if (command == FIN_CREATION_CONTOUR && _worldState == INIT_CREATION_CONTOUR) {
                        _worldState = NOTHING_HAPPENS;
                        //int id = _controllers.size()-1;
-                       GObjectController *cont = _controllers[_idConnectionInCreation];
-                       GConnectorModel *modelContour = (GConnectorModel*) cont->getModel();
-                       GObjectController *finPort = _controllers[idController];
+                       GObjectController       *cont                   = _controllers[_idConnectionInCreation];
+                       GConnectorModel         *modelContour   = (GConnectorModel*) cont->getModel();
+                       GObjectController       *finPort                = _controllers[idController];
 
                        if (finPort->getGObjectType() == GPORT) {
                                GPortModel* modelPort = (GPortModel*) finPort->getModel();
@@ -752,12 +740,8 @@ void wxVtkSceneManager::update(int idController, int command) {
                                                                _parent->saveTempandUpdate("create connection");
                        }
 
-                       manualConnectorContourController
-                                       * manCont =
-                                                       ((GConnectorController*) cont)->getManualContourController();
-                       manualConnectorContourView
-                                       * connView =
-                                                       (manualConnectorContourView*) manCont->GetManualViewBaseContour();
+                       manualConnectorContourController        *manCont        = ((GConnectorController*) cont)->getManualContourController();
+                       manualConnectorContourView                      *connView       = (manualConnectorContourView*) manCont->GetManualViewBaseContour();
                                      
                        std::map<int, GObjectController*>::iterator it2;
 
@@ -769,7 +753,7 @@ void wxVtkSceneManager::update(int idController, int command) {
                                }
                                cont->SetActive(true);
                        }
-                        connView->Refresh();          
+                       connView->Refresh();          
                }
 
        }
@@ -778,13 +762,13 @@ void wxVtkSceneManager::update(int idController, int command) {
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnMouseMove() {
+bool wxVtkSceneManager::OnMouseMove() 
+{
        int X, Y;
-       bool okStatusMessage = false;
-       bool okPortMessage = false;
+       bool okStatusMessage    = false;
+       bool okPortMessage              = false;
        wxVTKRenderWindowInteractor *wxVTKiren;
-       wxVTKiren
-                       = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
+       wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
        wxVTKiren->GetEventPosition(X, Y);
 
        if (_worldState == DRAG_OBJECTS) {
@@ -811,27 +795,28 @@ bool wxVtkSceneManager::OnMouseMove() {
 
                _startDragging = false;
 
-       } else if (_worldState == NOTHING_HAPPENS || _worldState
-                       == INIT_CREATION_CONTOUR) {
+       } else if (_worldState == NOTHING_HAPPENS || _worldState == INIT_CREATION_CONTOUR) {
                std::map<int, GObjectController*>::iterator it;
                double px, py, pz;
                for (it = _controllers.begin(); it != _controllers.end(); ++it) {
                        GObjectController *desc = it->second;
-                       int type = desc->getGObjectType();
-                       int state = desc->getView()->getState();
+                       int type        = desc->getGObjectType();
+                       int state       = desc->getView()->getState();
                        desc->getModel()->getCenter(px, py, pz);
 
                         // JGRR & CM
-                       if ((state == HIGHLIGHTED) || (state == SELECTED_POSSIBLE_CONNECTION )) {
+                       if ((state == HIGHLIGHTED) || (state == SELECTED_POSSIBLE_CONNECTION )) 
+                       {
                         // EO JGRR & CM    
                                okStatusMessage = true;
                                updateStatusBar(desc->getStatusText());
-                               if (type == GBLACKBOX) {
+                               if (type == GBLACKBOX) 
+                               {
                                        GBlackBoxModel *mod = (GBlackBoxModel*) desc->getModel();
-                                       _parent->displayBlackBoxInfo(mod->getBBTKPackage(),
-                                                       mod->getBBTKType());
+                                       _parent->displayBlackBoxInfo(mod->getBBTKPackage(),mod->getBBTKType());
                                } // if GBLACKBOX
-                               if (type == GPORT) {
+                               if (type == GPORT) 
+                               {
                                        // PortText
                                        okPortMessage = true;
                                        py = py + 5;
@@ -841,7 +826,7 @@ bool wxVtkSceneManager::OnMouseMove() {
 
                                        // FillPortText
                                        px = px - 33;
-                                       py = py;
+                                       //py = py;
                                        _fillObjectActor->SetScale(1);
                                        _fillObjectActor->GetProperty()->SetOpacity(0.50);
                                        _fillObjectActor->SetPosition(px, py, 1);
@@ -851,11 +836,13 @@ bool wxVtkSceneManager::OnMouseMove() {
                        } // for controllers it
                }
        }
-       if (okStatusMessage == false) {
+       if (okStatusMessage == false) 
+       {
                updateStatusBar("");
        }
 
-       if (okPortMessage == false) {
+       if (okPortMessage == false) 
+       {
                _textActor->SetScale(0.0001);
                _fillObjectActor->SetScale(0.0001);
        }
@@ -864,32 +851,35 @@ bool wxVtkSceneManager::OnMouseMove() {
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnLeftButtonDown() {
-
-       if (_worldState == INIT_CREATION_CONTOUR) {
+bool wxVtkSceneManager::OnLeftButtonDown() 
+{
+       if (_worldState == INIT_CREATION_CONTOUR) 
+       {
                bool isOverPort = false;
                std::map<int, GObjectController*>::iterator it;
-               for (it = _controllers.begin(); it != _controllers.end() && isOverPort
-                               == false; ++it) {
+               for (it = _controllers.begin(); it != _controllers.end() && isOverPort== false; ++it) 
+               {
                        GObjectController *desc = it->second;
-                       if (desc->getGObjectType() == GPORT) {
+                       if (desc->getGObjectType() == GPORT) 
+                       {
                                GPortModel *portmod = (GPortModel*) desc->getModel();
                                vtkGObjectView *portView = desc->getView();
-                               if (portmod->getPortType() == GINPUTPORT
-                                               && portView->getState() == HIGHLIGHTED) {
+                               if (portmod->getPortType() == GINPUTPORT && portView->getState() == HIGHLIGHTED) 
+                               {
                                        isOverPort = true;
-                                 } // if
-                                // JGRR & CM                    
-                                if ( portmod->getPortType( ) == GINPUTPORT &&  portView->getState( ) == SELECTED_POSSIBLE_CONNECTION   ) {
-                                    isOverPort = true ;
-                                    portView->setState( HIGHLIGHTED);
-                                }                    
-                                // EO JGRR & CM 
-
-                        } // if
+                               } // if
+                               // JGRR & CM                    
+                               if ( portmod->getPortType( ) == GINPUTPORT &&  portView->getState( ) == SELECTED_POSSIBLE_CONNECTION   ) {
+                                       isOverPort = true ;
+                                       portView->setState( HIGHLIGHTED);
+                               }                    
+                               // EO JGRR & CM 
+
+                       } // if
                } // for
 
-               if (isOverPort == false) {
+               if (isOverPort == false) 
+               {
                        CancelConnection();
                        UnSelectBlackBoxes();
                } // isOverPort
@@ -897,30 +887,29 @@ bool wxVtkSceneManager::OnLeftButtonDown() {
 
        } else { //_worldState
 
-               _worldState = DRAG_OBJECTS;
-               _startDragging = true;
+               _worldState             = DRAG_OBJECTS;
+               _startDragging  = true;
 
-               int shiftkey =
-                               _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey();
-               int ctrlkey =
-                               _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
-               ctrlkey = ctrlkey + shiftkey;
+               int shiftkey    = _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey();
+               int ctrlkey             = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
+               ctrlkey                 = ctrlkey + shiftkey;
 
                GObjectController *cont = GetGBlackBoxControlerPointedByMouse();
 
-               if (GetGBlackBoxControlerPointedByMouse() != NULL) {
+               if (cont != NULL) {
                        int state = cont->getView()->getState();
                        if ((ctrlkey == 0) && (state == HIGHLIGHTED)) {
                                UnSelectBlackBoxes();
                        }
+               } else {
+                       UnSelectBlackBoxes();  // EED 12/07/2012
                }
                for (int i = 0; i < (int) _selectedObjects.size(); i++) {
                        int id = _selectedObjects[i];
-                       GObjectControllercont = _controllers[id];
+                       GObjectController *cont = _controllers[id];
                        cont->getView()->setState(DRAG);
                        cont->getModel()->notifyObservers(_idManager);
                } // for
-               
        } // if _selectedObjects.size
 
 
@@ -929,7 +918,8 @@ bool wxVtkSceneManager::OnLeftButtonDown() {
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnLeftButtonUp() {
+bool wxVtkSceneManager::OnLeftButtonUp() 
+{
        if (_worldState == DRAG_OBJECTS) {
                _worldState = NOTHING_HAPPENS;
 
@@ -944,8 +934,10 @@ bool wxVtkSceneManager::OnLeftButtonUp() {
 }
 
 //=========================================================================
-void wxVtkSceneManager::CancelConnection() {
-       if (_worldState == INIT_CREATION_CONTOUR) {
+void wxVtkSceneManager::CancelConnection() 
+{
+       if (_worldState == INIT_CREATION_CONTOUR) 
+       {
                _worldState = NOTHING_HAPPENS;
                //int lastId = _controllers.size()-1;
 
@@ -956,7 +948,8 @@ void wxVtkSceneManager::CancelConnection() {
                _controllers.erase(_idConnectionInCreation);
 
                std::map<int, GObjectController*>::iterator it;
-               for (it = _controllers.begin(); it != _controllers.end(); ++it) {
+               for (it = _controllers.begin(); it != _controllers.end(); ++it) 
+               {
                        GObjectController *desc = it->second;
                        desc->SetActive(true);
                        desc->getView()->setState(NOTHING_HAPPENS);
@@ -967,8 +960,10 @@ void wxVtkSceneManager::CancelConnection() {
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnRightButtonUp() {
-       if (_worldState == INIT_CREATION_CONTOUR) {
+bool wxVtkSceneManager::OnRightButtonUp() 
+{
+       if (_worldState == INIT_CREATION_CONTOUR) 
+       {
                CancelConnection();
        }
        UnSelectBlackBoxes();
@@ -1084,38 +1079,63 @@ bool wxVtkSceneManager::OnLeftDClick() {
 
 //=========================================================================
 
-bool wxVtkSceneManager::OnChar() {
-       char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
-        int ctrlkey = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
+bool wxVtkSceneManager::OnChar() 
+{
+       bool ok=false;
+       bool oktmp;
+       char keyCode    = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
+       int ctrlkey             = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey();
         
        // KeyCode 127 : Delete Key
        // KeyCode 8 : Backspace Key
-       if (keyCode == 8 || keyCode == 127) {
-               if (_selectedObjects.size() > 0) {
-                       for (int i = 0; i < (int) _selectedObjects.size(); i++) {
+
+
+       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];
                                std::map<int, GObjectController*>::iterator it;
                                it = _controllers.find(id);
-                               if (it != _controllers.end()) {
-                                       deleteObject(id);
-                               }
+                               if (it != _controllers.end()) 
+                               {
+                                       oktmp   =       deleteObject(id);
+                                       ok              =       ok||oktmp;
+                               } // if
+                       }// for selected objects                
+                       if (ok) _selectedObjects.clear();
+                       _parent->saveTempandUpdate("delete object");
+       }// if keyCode
+       
+       /// Duplicate 
+#ifdef MACOSX
+       if((keyCode==0) && (ctrlkey==1)) {                
+#else
+       ctrlkey+=keyCode;
+       if(ctrlkey==5){                
+#endif
+               if(_selectedObjects.size()){
+                       std::cout<<"objects to copy :";
+                       for(int i=0;i<_selectedObjects.size();i++)
+                       {
+                               std::cout<<_selectedObjects.at(i)<<" ";
                        }
-                       _selectedObjects.clear();
-               }
-       }
-        ctrlkey+=keyCode;
-        /// Duplicate 
-             if(ctrlkey==5){                
-                if(_selectedObjects.size()){
-                    std::cout<<"objects to copy :";
-                    for(int i=0;i<_selectedObjects.size();i++){
-                       std::cout<<_selectedObjects.at(i)<<" ";
-                    }
-                    DuplicateObjects(getSelectedObjects());   
-                }else{
-                    std::cout<<"No objects to copy\n";
-                }
-            }  
+                       DuplicateObjects(getSelectedObjects());   
+               }else{
+                       std::cout<<"No objects to copy\n";
+               } // _selectedObjects.size
+       } // ctrlkey 5  
 
        return true;
 }
@@ -1141,10 +1161,11 @@ void wxVtkSceneManager::AddControlerToBeRemove(
 
 //=========================================================================
 
-void wxVtkSceneManager::deleteObject(int id) {
+bool wxVtkSceneManager::deleteObject(int id) 
+{
+       bool result=true;
        GObjectController *control = _controllers[id];
        std::vector<int> controllersToRemove;
-
        if (control->getGObjectType() == GBLACKBOX || control->getGObjectType()
                        == GCOMPLEXINPUTPORT || control->getGObjectType()
                        == GCOMPLEXOUTPUTPORT) {
@@ -1155,8 +1176,7 @@ void wxVtkSceneManager::deleteObject(int id) {
 
                // Add box input controllers to be removed
                for (int i = 0; i < (int) inputs.size(); i++) {
-                       AddControlerToBeRemove(&controllersToRemove,
-                                       inputs[i]->getObjectId());
+                       AddControlerToBeRemove(&controllersToRemove, inputs[i]->getObjectId());
                        if (inputs[i]->isConnected()) {
                                boxConnected = true;
                        }
@@ -1166,8 +1186,7 @@ void wxVtkSceneManager::deleteObject(int id) {
 
                // Add box output controllers to be removed
                for (int i = 0; i < (int) outputs.size(); i++) {
-                       AddControlerToBeRemove(&controllersToRemove,
-                                       outputs[i]->getObjectId());
+                       AddControlerToBeRemove(&controllersToRemove, outputs[i]->getObjectId());
                        if (outputs[i]->isConnected()) {
                                boxConnected = true;
                        }
@@ -1180,17 +1199,13 @@ void wxVtkSceneManager::deleteObject(int id) {
                        int type = cont->getGObjectType();
                        if (type == GCONNECTOR) {
                                GConnectorModel *conMod = (GConnectorModel*) cont->getModel();
-                               if (conMod->getStartPort() != NULL
-                                               && conMod->getStartPort()->getParentBox()->getObjectId()
-                                                               == bbmod->getObjectId()) {
-                                       AddControlerToBeRemove(&controllersToRemove,
-                                                       conMod->getObjectId());
+                               if (conMod->getStartPort() != NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) 
+                               {
+                                       AddControlerToBeRemove(&controllersToRemove,conMod->getObjectId());
                                }
-                               if (conMod->getEndPort() != NULL
-                                               && conMod->getEndPort()->getParentBox()->getObjectId()
-                                                               == bbmod->getObjectId()) {
-                                       AddControlerToBeRemove(&controllersToRemove,
-                                                       conMod->getObjectId());
+                               if (conMod->getEndPort() != NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId()) 
+                               {
+                                       AddControlerToBeRemove(&controllersToRemove,conMod->getObjectId());
                                }
                        }
                }
@@ -1198,8 +1213,15 @@ void wxVtkSceneManager::deleteObject(int id) {
                // Add box controller to be removed
                AddControlerToBeRemove(&controllersToRemove, bbmod->getObjectId());
        } else if (control->getGObjectType() == GCONNECTOR) {
-               GConnectorModel *conMod = (GConnectorModel*) control->getModel();
-               AddControlerToBeRemove(&controllersToRemove, conMod->getObjectId());
+               GConnectorController *gconnectorcontroler = (GConnectorController*)control;
+               if (gconnectorcontroler->getManualContourController()->IsEditable()==false)
+               {
+                       GConnectorModel *conMod = (GConnectorModel*) control->getModel();
+                       AddControlerToBeRemove(&controllersToRemove, conMod->getObjectId());
+               } else{
+                       gconnectorcontroler->getManualContourController()->OnChar();
+                       result = false;
+               }
        }
 
        std::map<int, GObjectController*>::iterator it;
@@ -1214,7 +1236,9 @@ void wxVtkSceneManager::deleteObject(int id) {
                        _controllers.erase(it);
                }//if
        }// for
-       _parent->saveTempandUpdate("delete object");
+       
+       
+       return result;
 }
 
 //=========================================================================
@@ -1392,32 +1416,66 @@ 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 += "connect ";
+                                       script += startBox->getBBTKName();
+                                       script += ".";
+                                       script += start->getBBTKName();
+
+                                       script += " ";
+
+                                       //End Connection info
+                                       script += endBox->getBBTKName();
+                                       script += ".";
+                                       script += end->getBBTKName();
+
+                                       script += "\n";
+                       }
 
                        script += "\n";
                }
 
                script += LineNumber(wln, lnNmbr);
                script += "\n";
+
+               script += "\n";
+               script += "# Complex input ports\n";
+               script += complexInputs;
+
                for (i = 0; i < (int) execBoxes.size(); i++) {
                        script += LineNumber(wln, lnNmbr);
                        script += "exec ";
@@ -1593,6 +1651,14 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() {
                }
        }
 
+       script += "\n";
+       script += "# Complex input ports\n";
+       script += complexInputs;
+
+       script += "\n";
+       script += "# Complex output ports\n";
+       script += complexOutputs;
+
        script += "\n";
 
        for (i = 0; i < (int) execBoxes.size(); i++) {
@@ -1605,14 +1671,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";
@@ -1685,6 +1743,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();
@@ -1698,6 +1758,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();
@@ -1717,6 +1778,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();
@@ -1748,20 +1824,36 @@ void wxVtkSceneManager::saveDiagram(std::string &content) {
 }
 
 //=========================================================================
-
-void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
-
+void wxVtkSceneManager::getCleanLine(stringstream &inputStream, std::string &line)
+{
+       getline(inputStream, line,'\n');
+       int size = line.length();
+    if (size>0)
+       {
+               if ( line[ size-1 ]==13  )
+               {
+                       line.erase(size-1,1);
+               } // if line
+       } // if size
+}
+       
+//=========================================================================
+void wxVtkSceneManager::loadDiagram(stringstream &inputStream) 
+{
+       int size;
        std::string version = "<void>";
        std::string line = "";
        char delims[] = ":";
        char *result = NULL;
 
-       getline(inputStream, line);
+       getCleanLine(inputStream, line);
 
        bool start = false;
        while (!inputStream.eof()) {
                if (line == "" || line[0] == '#') {
-                       getline(inputStream, line);
+                       line="";
+                       getCleanLine(inputStream, line);
+                       
                        if (line == "# - BBTKGEditor v 1.0 BBG BlackBox Diagram file") {
                                version = line.substr(18, 3);
                        }
@@ -1771,32 +1863,37 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        if (line == "# - BBTKGEditor v 1.2 BBG BlackBox Diagram file") {
                                version = line.substr(18, 3);
                        }
+                       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;
                }
        }
 
-       printf("EED wxVtkSceneManager::loadDiagram  version=%s\n", version.c_str());
 
        if (start) {
 
                if ((version != "1.0") && (version != "1.1")) {
-                       getline(inputStream, line);//CATEGORY:<category of the box>
+                       getCleanLine(inputStream, line);//CATEGORY:<category of the box>
                        char categoryTmp[30];
                        strcpy(categoryTmp, line.c_str());
                        result = strtok(categoryTmp, delims);
                        result = strtok(NULL, delims);
                        SetCategory(result);
 
-                       getline(inputStream, line);//DESCRIPTION:<description of the box>
+                       getCleanLine(inputStream, line);//DESCRIPTION:<description of the box>
                        char descriptionTmp[1024];
                        strcpy(descriptionTmp, line.c_str());
                        result = strtok(descriptionTmp, delims);
                        result = strtok(NULL, delims);
                        SetDescription(result);
 
-                       getline(inputStream, line);//AUTHOR:<author>
+                       getCleanLine(inputStream, line);//AUTHOR:<author>
                        char authorTmp[255];
                        strcpy(authorTmp, line.c_str());
                        result = strtok(authorTmp, delims);
@@ -1805,7 +1902,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                }
 
                //----------
-               getline(inputStream, line);//COMPLEX_BOX:TRUE|FALSE
+               getCleanLine(inputStream, line);//COMPLEX_BOX:TRUE|FALSE
                char complexTmp[30];
                strcpy(complexTmp, line.c_str());
                result = strtok(complexTmp, delims);
@@ -1816,14 +1913,14 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        _isComplexBox = true;
 
                        if ((version != "1.0") && (version != "1.1")) {
-                               getline(inputStream, line);//COMPLEXNAME:<name of the complex box>
+                               getCleanLine(inputStream, line);//COMPLEXNAME:<name of the complex box>
                                char complexboxnameTmp[255];
                                strcpy(complexboxnameTmp, line.c_str());
                                result = strtok(complexboxnameTmp, delims);
                                result = strtok(NULL, delims);
                                SetCbName(result);
 
-                               getline(inputStream, line);//PACKAGENAME:<name of the package of the box>
+                               getCleanLine(inputStream, line);//PACKAGENAME:<name of the package of the box>
                                char packagenameTmp[255];
                                strcpy(packagenameTmp, line.c_str());
                                result = strtok(packagenameTmp, delims);
@@ -1831,27 +1928,81 @@ 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
                        //-----------------------
-                       getline(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++) {
                                //----------
-                               getline(inputStream, line);//COMPLEX_PORT
-                               getline(inputStream, line);//name
-                               std::string inputPortName(line);
+                               getCleanLine(inputStream, line);//COMPLEX_PORT
+                               getCleanLine(inputStream, line);//name
+                               std::string outputPortName(line);
 
                                //----------
-                               getline(inputStream, line);//xInic:yInic:zInic
+                               getCleanLine(inputStream, line);//xInic:yInic:zInic
                                char coord[80];
                                strcpy(coord, line.c_str());
                                result = strtok(coord, delims);//xInic
@@ -1869,35 +2020,43 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                std::istringstream zSt(zInic);
                                zSt >> zIn;
 
-                               getline(inputStream, line);//FIN_COMPLEX_PORT
+                               if (version<="1.2")
+                               {
+                                       if (zIn==900) zIn=GPOSITION_Z;
+                               }
+                               
+                               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
                        //-----------------------
-
-                       getline(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++) {
                                //----------
-                               getline(inputStream, line);//COMPLEX_PORT
-                               getline(inputStream, line);//name
-                               std::string outputPortName(line);
+                               getCleanLine(inputStream, line);//COMPLEX_PORT
+                               getCleanLine(inputStream, line);//name
+                               std::string inputPortName(line);
 
                                //----------
-                               getline(inputStream, line);//xInic:yInic:zInic
+                               getCleanLine(inputStream, line);//xInic:yInic:zInic
                                char coord[80];
                                strcpy(coord, line.c_str());
                                result = strtok(coord, delims);//xInic
@@ -1915,17 +2074,20 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                std::istringstream zSt(zInic);
                                zSt >> zIn;
 
-                               getline(inputStream, line);//FIN_COMPLEX_PORT
-
-                               configGComBoxInputOutputPort(false, outputPortName, xIn, yIn,
-                                               zIn);
+                               if (version<="1.2")
+                               {
+                                       if (zIn==900) zIn=GPOSITION_Z;
+                               }
+                               
+                               getCleanLine(inputStream, line);//FIN_COMPLEX_PORT
+                               configGComBoxInputOutputPort(true, inputPortName, xIn, yIn, zIn);
 
-                       } // for output complex box
+                       } // for external input
+               }
 
-               } // complex box
 
                //----------
-               getline(inputStream, line);//BOXES:num
+               getCleanLine(inputStream, line);//BOXES:num
                char boxes[9];
                strcpy(boxes, line.c_str());
                result = strtok(boxes, delims);
@@ -1937,8 +2099,8 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
 
                for (int i = 0; i < numBoxes; i++) {
                        //----------
-                       getline(inputStream, line);//BOX
-                       getline(inputStream, line);//package:type:name
+                       getCleanLine(inputStream, line);//BOX
+                       getCleanLine(inputStream, line);//package:type:name
                        char box[150];
                        strcpy(box, line.c_str());
                        result = strtok(box, delims);//package
@@ -1948,7 +2110,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        result = strtok(NULL, delims);//name
                        std::string name(result);
 
-                       getline(inputStream, line);//ISEXEC:TRUE|FALSE
+                       getCleanLine(inputStream, line);//ISEXEC:TRUE|FALSE
                        char exec[15];
                        strcpy(exec, line.c_str());
                        result = strtok(exec, delims);//ISEXEC
@@ -1956,7 +2118,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        std::string isExec(result);
 
                        //----------
-                       getline(inputStream, line);//xInic:yInic:zInic
+                       getCleanLine(inputStream, line);//xInic:yInic:zInic
                        char coord[80];
                        strcpy(coord, line.c_str());
                        result = strtok(coord, delims);//xInic
@@ -1974,8 +2136,15 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        std::istringstream zSt(zInic);
                        zSt >> zIn;
 
+                       
+                       if (version<="1.2")
+                       {
+                               if (zIn==900) zIn=GPOSITION_Z;
+                       }
+                       
+                       
                        //----------
-                       getline(inputStream, line);//xEnd:yEnd:zEnd
+                       getCleanLine(inputStream, line);//xEnd:yEnd:zEnd
                        strcpy(coord, line.c_str());
                        result = strtok(coord, delims);//xEnd
                        std::string xEnd(result);
@@ -1992,23 +2161,28 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        std::istringstream zEt(zEnd);
                        zEt >> zEn;
 
+                       if (version<="1.2")
+                       {
+                               if (zEn==900) zEn=GPOSITION_Z;
+                       }
+                       
+                       
                        bool boxExecutable = false;
                        if (isExec == "TRUE") {
                                boxExecutable = true;
                        }
 
                        int idBox = createGBlackBox(xIn, yIn, package, type);
-                       configGBlackBox(idBox, xIn, yIn, zIn, name, boxExecutable, xEn,
-                                       yEn, zEn);
+                       configGBlackBox(idBox, xIn, yIn, zIn, name, boxExecutable, xEn, yEn, zEn);
 
                        GObjectController *cont = _controllers[idBox];
                        GBlackBoxModel *bbmod = (GBlackBoxModel*) cont->getModel();
 
                        //----------
-                       getline(inputStream, line);//PORT o FIN_BOX
+                       getCleanLine(inputStream, line);//PORT o FIN_BOX
                        std::string port = line.substr(0, 4);
                        while (port == "PORT") {
-                               getline(inputStream, line);//name:value
+                               getCleanLine(inputStream, line);//name:value
                                char poort[150];
                                strcpy(poort, line.c_str());
                                result = strtok(poort, delims);//name
@@ -2018,7 +2192,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
 
                                bbmod->setValueToInput(name, value);
 
-                               getline(inputStream, line);//PORT o FIN_BOX
+                               getCleanLine(inputStream, line);//PORT o FIN_BOX
                                port = line.substr(0, 4);
                        } // while
 
@@ -2027,7 +2201,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
 
                /// CONNECTIONS
                //----------
-               getline(inputStream, line);//CONNECTIONS:num
+               getCleanLine(inputStream, line);//CONNECTIONS:num
                char conns[30];
                strcpy(conns, line.c_str());
                result = strtok(conns, delims);
@@ -2036,11 +2210,12 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                int numConns;
                std::istringstream isCons(result);
                isCons >> numConns;
-
+               
+               
                for (int i = 0; i < numConns; i++) {
                        //----------
-                       getline(inputStream, line);//CONNECTION
-                       getline(inputStream, line);//Startbox.PortName:EndBox.PortName
+                       getCleanLine(inputStream, line);//CONNECTION
+                       getCleanLine(inputStream, line);//Startbox.PortName:EndBox.PortName
 
                        char connec[200];
                        strcpy(connec, line.c_str());
@@ -2053,18 +2228,14 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                        result = strtok(NULL, delims);
                        std::string nameEndPort(result);
 
-                       int idCon = configGConnetion(nameStartBox, nameStartPort,
-                                       nameEndBox, nameEndPort);
+                       int idCon = configGConnetion(nameStartBox, nameStartPort,nameEndBox, nameEndPort);
 
                        if (version != "1.0") {
                                //Readding control points of the manualContour
-                               //ups1
-                               GConnectorController *tempp =
-                                               (GConnectorController*) _controllers[idCon];
-                               GConnectorModel *conMod = (GConnectorModel*) tempp->getModel();
-                               vtkGConnectorView *conView =
-                                               (vtkGConnectorView*) tempp->getView();
-                               getline(inputStream, line); //NumberOfControlPoints:##
+                               GConnectorController *tempp             = (GConnectorController*) _controllers[idCon];
+                               GConnectorModel *conMod                 = (GConnectorModel*) tempp->getModel();
+                               vtkGConnectorView *conView              = (vtkGConnectorView*) tempp->getView();
+                               getCleanLine(inputStream, line); //NumberOfControlPoints:##
                                strcpy(conns, line.c_str());
                                result = strtok(conns, delims);
                                result = strtok(NULL, delims);
@@ -2074,7 +2245,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                isCons >> numberOfControlPoints;
 
                                for (int ii = 0; ii < numberOfControlPoints; ii++) {
-                                       getline(inputStream, line); //XX:YY:ZZ
+                                       getCleanLine(inputStream, line); //XX:YY:ZZ
                                        char connec[200];
                                        strcpy(connec, line.c_str());
 
@@ -2088,9 +2259,13 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
                                        result = strtok(NULL, delims);
                                        std::istringstream isPointZ(result);
                                        isPointZ >> pz;
-
-                                       conMod->getManualContourModel()->InsertPoint_id(ii + 1, px,
-                                                       py, pz);
+               
+                                       if (version<="1.2")
+                                       {
+                                               if (pz==900) pz=GPOSITION_Z;
+                                       }
+                                       
+                                       conMod->getManualContourModel()->InsertPoint_id(ii + 1, px, py, pz);
                                        conView->getManualContourView()->AddPoint();
                                }
                        }// version !=1.0
@@ -2135,7 +2310,9 @@ GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
                }
        } // for
 
-       if ((_isComplexBox) && (boxModel == NULL)) {
+
+
+       if (boxModel == NULL) {
                std::vector<int> lstInputs = getComplexInputPorts();
                for (j = 0; j < (int) lstInputs.size(); j++) {
                        idB = lstInputs[j];
@@ -2145,6 +2322,8 @@ GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
                        }
                } // for
 
+               if(_isComplexBox)
+               {
                std::vector<int> lstOutputs = getComplexOutputPorts();
                for (j = 0; j < (int) lstOutputs.size(); j++) {
                        int idB = lstOutputs[j];
@@ -2153,8 +2332,9 @@ GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) {
                                boxModel = bMod;
                        }
                } // for
+               }
 
-       } // complex box
+       } // inputs/outputs
 
        return boxModel;
 }
@@ -2171,6 +2351,10 @@ 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){
@@ -2179,6 +2363,10 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox,
        }
 
        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){
@@ -2188,6 +2376,7 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox,
 
        //ups2
        int idCon = createGConnector(startP);
+
        _worldState = NOTHING_HAPPENS;
        GConnectorController *tempp = (GConnectorController*) _controllers[idCon];
 
@@ -2675,6 +2864,25 @@ std::string wxVtkSceneManager::GetDescription() {
 
 //=========================================================================
 
+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 ){