X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsWxGUIEditorGraphic%2FwxVtkSceneManager.cxx;h=d334129e967a9914b7ba8011441538ad2a30d7bf;hb=a3c95f8a4a71a532a46804e8c4f213aa2188d73b;hp=fb33bd02bb43061f6442ea3b691b045c14806044;hpb=24faf1e291b1a80a058f04e3de712044c00b76ab;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx index fb33bd0..d334129 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx @@ -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$ @@ -40,21 +65,33 @@ namespace bbtk { -//========================================================================= -wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, - wxVtk3DBaseView *baseView, int idManager) { - _cbName = "ComplexBoxName"; - _cbPackageName = "PackageName"; - _Author = "Author ??"; - _Category = ""; - _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 = ""; + _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,14 +107,15 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, registerController(this); } - _idConnectionInCreation = -1; - _contLastId = 0; + _idConnectionInCreation = -1; + _contLastId = 0; } //========================================================================= -void wxVtkSceneManager::disconnectDrop() { +void wxVtkSceneManager::disconnectDrop() +{ printf("EED %p ~wxVtkSceneManager::disconnectDrop()\n", this); //EED02JUIN2010 _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL); // _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget( new tmpClasswxTextDropTarget() ); @@ -85,7 +123,8 @@ void wxVtkSceneManager::disconnectDrop() { //========================================================================= -wxVtkSceneManager::~wxVtkSceneManager() { +wxVtkSceneManager::~wxVtkSceneManager() +{ //FCY memory leaks printf("EED %p ~wxVtkSceneManager() START\n", this); disconnectDrop(); @@ -95,35 +134,34 @@ wxVtkSceneManager::~wxVtkSceneManager() { //========================================================================= -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); _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(); - _baseView->Refresh(); // Actos Port_Text _textActor = vtkTextActor3D::New(); - _textActor->SetPosition(-9999, -9999, 900); +// _textActor = vtkTextActor::New(); + _textActor->SetPosition(-9999, -9999, GPOSITION_Z); _textActor->SetInput(""); _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); @@ -132,7 +170,7 @@ void wxVtkSceneManager::configureBaseView() { //------------ double xInic = 0; double yInic = 0; - double zInic = 900; + double zInic = GPOSITION_Z; vtkPolygon *aPolygon = vtkPolygon::New(); _fillObjectActor = vtkActor::New(); @@ -186,7 +224,6 @@ void wxVtkSceneManager::configureBaseView() { _aPolygonMapper->Modified(); _baseView->GetRenderer()->AddActor(_fillObjectActor); - printf("EED wxVtkSceneManager::configureBaseView 1\n"); } //========================================================================= @@ -231,29 +268,39 @@ void wxVtkSceneManager::configGBlackBox(int idBox, double xIn, double yIn, //========================================================================= -int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName, - std::string boxType) { - _worldState = NOTHING_HAPPENS; - //EED int windowWidth = _baseView->GetRenWin()->GetSize()[0]; - int windowHeight = _baseView->GetRenWin()->GetSize()[1]; - - int type = GBLACKBOX; - +int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName,std::string boxType) +{ + _worldState = NOTHING_HAPPENS; + int windowHeight = _baseView->GetRenWin()->GetSize()[1]; + int type = GBLACKBOX; //Create the MVC Objects + GBlackBoxModel *model = (GBlackBoxModel*) GObjectsMVCFactory::getInstance()->createGObjectModel(type); + vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type); + GObjectController *controller = GObjectsMVCFactory::getInstance()->createGObjectController(type); - GBlackBoxModel - *model = - (GBlackBoxModel*) GObjectsMVCFactory::getInstance()->createGObjectModel( - type); - vtkGObjectView *view = - GObjectsMVCFactory::getInstance()->createGObjectView(type); - GObjectController* controller = - GObjectsMVCFactory::getInstance()->createGObjectController(type); - - BlackBoxDescriptor::Pointer descriptor = - GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor( - packageName, boxType); +//EED 15 oct 2012 BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxType); + + Package::Pointer k; + std::map< std::string, BlackBoxDescriptor::Pointer> mapDesc; + try{ + k = _bbtkfactory->GetPackage(packageName); + mapDesc = k->GetDescriptorMap(); + }catch(Exception e){ + printf("EED. ERROR!: Exception in wxVtkSceneManager::createGBlackBox for package %s, NOT EXIST\n", packageName.c_str()); + } + BlackBoxDescriptor::Pointer descriptor; + 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 @@ -261,7 +308,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); @@ -334,14 +381,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 @@ -349,8 +391,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); @@ -364,7 +405,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. @@ -393,14 +434,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 @@ -408,9 +444,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); @@ -424,7 +458,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. @@ -445,29 +479,28 @@ int wxVtkSceneManager::createGComplexBoxOutputPort(std::string outputName) { //========================================================================= -int wxVtkSceneManager::createGInputPort(int portType, int posinBox, - GBoxModel *blackBox, BlackBoxInputDescriptor *desc) { +int wxVtkSceneManager::createGInputPort(int portType, int posinBox, GBoxModel *blackBox, BlackBoxInputDescriptor *desc) +{ GPortController* portController = createGPort(portType, desc->GetName(), - desc->GetTypeName(), posinBox, blackBox); + desc->GetTypeName(), desc->GetDescription(), posinBox, blackBox); blackBox->addInputPort((GPortModel*) portController->getModel()); return portController->getId(); } //========================================================================= -int wxVtkSceneManager::createGOutputPort(int portType, int posinBox, - GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) { +int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GBoxModel *blackBox, BlackBoxOutputDescriptor *desc) + { GPortController* portController = createGPort(portType, desc->GetName(), - desc->GetTypeName(), posinBox, blackBox); + desc->GetTypeName(),desc->GetDescription(), posinBox, blackBox); blackBox->addOutputPort((GPortModel*) portController->getModel()); return portController->getId(); } //========================================================================= -GPortController* wxVtkSceneManager::createGPort(int portType, - std::string bbtkName, std::string bbtkType, 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 @@ -484,6 +517,7 @@ GPortController* wxVtkSceneManager::createGPort(int portType, model->setBBTKType(bbtkType); model->setBBTKName(bbtkName); + model->setBBTKDescription(bbtkDescription); model->addObserver(view); model->addObserver(this); @@ -506,18 +540,16 @@ GPortController* wxVtkSceneManager::createGPort(int portType, //========================================================================= -int wxVtkSceneManager::createGConnector(GPortModel* startPort) { +int wxVtkSceneManager::createGConnector(GPortModel* startPort) +{ int type = GCONNECTOR; - manualConnectorContourController* manContourControl = - new manualConnectorContourController(); - manualConnectorContourView* manContourView = - new manualConnectorContourView(); - manualContourModel* manContourModel = new manualContourModel(); - - 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); @@ -526,15 +558,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 ) ; @@ -544,11 +578,11 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) { manContourControl->CreateNewManualContour(); - manContourView->RefreshContour(); double x, y, z; connectorModel->getInicPoint(x, y, z); - + + manContourControl->SetState(1); manContourModel->SetCloseContour(false); @@ -560,8 +594,7 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) { int bak = manContourControl->GetNumberOfPointsManualContour() - 1; manContourControl->_bakIdPoint = bak; - manContourView->Refresh(); - + manContourControl->SetMoving(false); connectorcontroller->setModelAndView(connectorModel, connectorView); @@ -577,46 +610,51 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) { connectorModel->addObserver(connectorView); connectorModel->addObserver(this); +// manContourView->Refresh(); + return newId; } //========================================================================= -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; } @@ -627,35 +665,21 @@ int wxVtkSceneManager::GetIndexInSelected(int idControler) { 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) { + if (command != NO_COMMAND) + { + if (command == ADD_TO_SELECTED) + { + 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) { + if (index >= 0) + { _selectedObjects.erase(_selectedObjects.begin() + index); } } else if (command == INIT_CREATION_CONTOUR) { - // JGRR & CM WH typedef std::map::iterator TIterator ; TIterator iter ; @@ -688,18 +712,21 @@ 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::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); @@ -714,15 +741,15 @@ 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) { + if (finPort->getGObjectType() == GPORT) + { GPortModel* modelPort = (GPortModel*) finPort->getModel(); modelContour->setEndPort(modelPort); @@ -749,20 +776,16 @@ void wxVtkSceneManager::update(int idController, int command) { } // EO JGRR CM - _parent->saveTempDiagram(); + _parent->saveTempandUpdate("create connection"); } - manualConnectorContourController - * manCont = - ((GConnectorController*) cont)->getManualContourController(); - manualConnectorContourView - * connView = - (manualConnectorContourView*) manCont->GetManualViewBaseContour(); - connView->Refresh(); - + manualConnectorContourController *manCont = ((GConnectorController*) cont)->getManualContourController(); + manualConnectorContourView *connView = (manualConnectorContourView*) manCont->GetManualViewBaseContour(); + std::map::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); @@ -770,21 +793,22 @@ void wxVtkSceneManager::update(int idController, int command) { } cont->SetActive(true); } + connView->Refresh(); } } - + } //========================================================================= -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,52 +835,66 @@ 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::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; + 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; - _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) { + 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; @@ -864,32 +902,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::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 +938,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]; - GObjectController* cont = _controllers[id]; + GObjectController *cont = _controllers[id]; cont->getView()->setState(DRAG); cont->getModel()->notifyObservers(_idManager); } // for - } // if _selectedObjects.size @@ -929,7 +969,8 @@ bool wxVtkSceneManager::OnLeftButtonDown() { //========================================================================= -bool wxVtkSceneManager::OnLeftButtonUp() { +bool wxVtkSceneManager::OnLeftButtonUp() +{ if (_worldState == DRAG_OBJECTS) { _worldState = NOTHING_HAPPENS; @@ -944,8 +985,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 +999,8 @@ void wxVtkSceneManager::CancelConnection() { _controllers.erase(_idConnectionInCreation); std::map::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 +1011,10 @@ void wxVtkSceneManager::CancelConnection() { //========================================================================= -bool wxVtkSceneManager::OnRightButtonUp() { - if (_worldState == INIT_CREATION_CONTOUR) { +bool wxVtkSceneManager::OnRightButtonUp() +{ + if (_worldState == INIT_CREATION_CONTOUR) + { CancelConnection(); } UnSelectBlackBoxes(); @@ -1084,38 +1130,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::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 +1212,11 @@ void wxVtkSceneManager::AddControlerToBeRemove( //========================================================================= -void wxVtkSceneManager::deleteObject(int id) { +bool wxVtkSceneManager::deleteObject(int id) +{ + bool result=true; GObjectController *control = _controllers[id]; std::vector controllersToRemove; - if (control->getGObjectType() == GBLACKBOX || control->getGObjectType() == GCOMPLEXINPUTPORT || control->getGObjectType() == GCOMPLEXOUTPUTPORT) { @@ -1155,8 +1227,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 +1237,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 +1250,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 +1264,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::iterator it; @@ -1214,7 +1287,9 @@ void wxVtkSceneManager::deleteObject(int id) { _controllers.erase(it); }//if }// for - _parent->saveTempandUpdate(); + + + return result; } //========================================================================= @@ -1279,6 +1354,7 @@ bool wxVtkSceneManager::MakeBoxExecutable() { //========================================================================= std::string wxVtkSceneManager::getDiagramBBS(bool wln) { + std::cout << "wxVtkSceneManager::getDiagramBBS" << std::endl; bool existsExec = false; std::vector packages; @@ -1336,7 +1412,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) { script += "\n"; //ups2 - + script += LineNumber(wln, lnNmbr); script += "author \""; script += _Author; @@ -1361,9 +1437,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(); @@ -1392,32 +1469,75 @@ 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; + + 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 "; @@ -1437,6 +1557,7 @@ std::string wxVtkSceneManager::getDiagramBBS(bool wln) { //========================================================================= std::string wxVtkSceneManager::saveComplexBoxBBS() { + std::cout<<"wxVtkSceneManager::saveComplexBoxBBS"< packages; std::vector boxes; std::vector connections; @@ -1593,6 +1714,20 @@ std::string wxVtkSceneManager::saveComplexBoxBBS() { } } + script += "\n"; + script += "# Complex input ports\n"; + script += complexInputs; + + script += "\n"; + script += "# Complex output ports\n"; + script += complexOutputs; + + script += "\n"; + + script += "message "; + script += _MessageKind; + script += " "; + script += _MessageLevel; script += "\n"; for (i = 0; i < (int) execBoxes.size(); i++) { @@ -1605,14 +1740,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"; @@ -1631,7 +1758,6 @@ void wxVtkSceneManager::deleteAllBoxes() { } _selectedObjects.clear(); _controllers.clear(); - refreshScene(); } //========================================================================= @@ -1654,8 +1780,6 @@ void wxVtkSceneManager::centerView() { _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0, 0, temp[2]); _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp); _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0, 0, temp[2]); - _baseView->RefreshView(); - } //========================================================================= @@ -1688,6 +1812,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 inputs = getComplexInputPorts(); int insize = inputs.size(); @@ -1701,6 +1827,7 @@ void wxVtkSceneManager::saveDiagram(std::string &content) { GObjectController *cont = _controllers[id]; cont->getModel()->save(content); } + */ //Print info complex output ports std::vector outputs = getComplexOutputPorts(); @@ -1720,6 +1847,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 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 boxes = getBlackBoxes(); int bsize = boxes.size(); @@ -1727,10 +1869,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 "<getStatusText()<getModel()->getBBTKType()<getModel()->getBBTKType();//CFT + std::cout<<"nname: "<getModel()->getBBTKName()<getModel()->getGObjectType()<getModel()->save(content); } @@ -1751,20 +1900,38 @@ void wxVtkSceneManager::saveDiagram(std::string &content) { } //========================================================================= +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) +{ -void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { - + int size; std::string version = ""; std::string line = ""; char delims[] = ":"; char *result = NULL; + char poort[POORT_MAX_LINE_SIZE_INTERPRETER]; - 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); } @@ -1774,32 +1941,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: + getCleanLine(inputStream, line);//CATEGORY: char categoryTmp[30]; strcpy(categoryTmp, line.c_str()); result = strtok(categoryTmp, delims); result = strtok(NULL, delims); SetCategory(result); - getline(inputStream, line);//DESCRIPTION: + getCleanLine(inputStream, line);//DESCRIPTION: char descriptionTmp[1024]; strcpy(descriptionTmp, line.c_str()); result = strtok(descriptionTmp, delims); result = strtok(NULL, delims); SetDescription(result); - getline(inputStream, line);//AUTHOR: + getCleanLine(inputStream, line);//AUTHOR: char authorTmp[255]; strcpy(authorTmp, line.c_str()); result = strtok(authorTmp, delims); @@ -1808,7 +1980,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); @@ -1819,14 +1991,14 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { _isComplexBox = true; if ((version != "1.0") && (version != "1.1")) { - getline(inputStream, line);//COMPLEXNAME: + getCleanLine(inputStream, line);//COMPLEXNAME: char complexboxnameTmp[255]; strcpy(complexboxnameTmp, line.c_str()); result = strtok(complexboxnameTmp, delims); result = strtok(NULL, delims); SetCbName(result); - getline(inputStream, line);//PACKAGENAME: + getCleanLine(inputStream, line);//PACKAGENAME: char packagenameTmp[255]; strcpy(packagenameTmp, line.c_str()); result = strtok(packagenameTmp, delims); @@ -1834,27 +2006,82 @@ 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 @@ -1872,35 +2099,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 @@ -1918,17 +2153,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); @@ -1940,8 +2178,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 @@ -1951,7 +2189,8 @@ 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 @@ -1959,7 +2198,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 @@ -1977,8 +2216,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); @@ -1995,33 +2241,51 @@ 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 - char poort[150]; + while (port == "PORT") + { + getCleanLine(inputStream, line);//name:value + 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); - getline(inputStream, line);//PORT o FIN_BOX + getCleanLine(inputStream, line);//PORT o FIN_BOX port = line.substr(0, 4); } // while @@ -2030,7 +2294,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); @@ -2039,11 +2303,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()); @@ -2056,18 +2321,15 @@ 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); @@ -2077,7 +2339,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()); @@ -2091,25 +2353,26 @@ 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 - } // for numConns - - } // start - - refresh(); + } // 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); @@ -2125,7 +2388,8 @@ void wxVtkSceneManager::configGComBoxInputOutputPort(bool inputoutput, //========================================================================= -GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) { +GBoxModel* wxVtkSceneManager::findGBox(std::string boxname) +{ int j; int idB; GBoxModel *bMod; @@ -2134,31 +2398,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 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 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; } @@ -2175,17 +2447,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 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 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]; @@ -2387,7 +2674,6 @@ void wxVtkSceneManager::DuplicateObjects(std::map objec cont->getModel()->notifyObservers(_idManager); } - refreshScene(); } @@ -2451,8 +2737,7 @@ void wxVtkSceneManager::addObjects(std::map 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; @@ -2460,9 +2745,10 @@ void wxVtkSceneManager::addObjects(std::map 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(); @@ -2674,6 +2960,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::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 ){