X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FEditorGraphicBBS%2FbbsWxGUIEditorGraphic%2FwxVtkSceneManager.cxx;h=afaa01b68be3a006d4ae539e6be8285583ec1239;hb=567028f33d052a54225024906cce14dc1558162f;hp=3d66871a0e14ee00c0ba4334eecff1ad61cb2a86;hpb=6c3b9595e2e319a6a15a4fa03eec5441a4443aff;p=bbtkGEditor.git diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx index 3d66871..afaa01b 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx @@ -61,9 +61,9 @@ wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, printf( "RaC-EED 21-06-2010 %p wxVtkSceneManager::wxVtkSceneManager If you comment this line, the drag and drop functionnality is not initialized.\n", this); -#ifdef __APPLE__ +//#ifdef __APPLE__ _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget((wxDropTarget*)parent); -#endif +//#endif configureBaseView(); _worldState = NOTHING_HAPPENS; @@ -87,9 +87,10 @@ void wxVtkSceneManager::disconnectDrop() { wxVtkSceneManager::~wxVtkSceneManager() { //FCY memory leaks - printf("EED %p ~wxVtkSceneManager()\n", this); + printf("EED %p ~wxVtkSceneManager() START\n", this); disconnectDrop(); delete _baseView; + printf("EED %p ~wxVtkSceneManager() END\n", this); } //========================================================================= @@ -109,15 +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(); - _baseView->Refresh(); // Actos Port_Text _textActor = vtkTextActor3D::New(); - _textActor->SetPosition(-9999, -9999, 900); + _textActor->SetPosition(-9999, -9999, GPOSITION_Z); _textActor->SetInput(""); _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(); @@ -252,7 +254,9 @@ int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName, BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor( packageName, boxType); - + 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 @@ -260,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); @@ -348,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); @@ -363,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. @@ -407,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); @@ -423,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. @@ -447,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(); } @@ -457,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(); } @@ -465,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; @@ -483,6 +484,7 @@ GPortController* wxVtkSceneManager::createGPort(int portType, model->setBBTKType(bbtkType); model->setBBTKName(bbtkName); + model->setBBTKDescription(bbtkDescription); model->addObserver(view); model->addObserver(this); @@ -508,15 +510,12 @@ GPortController* wxVtkSceneManager::createGPort(int portType, 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); @@ -525,7 +524,7 @@ 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); @@ -533,21 +532,21 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) { /** * 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( 5 ) ; + manContourView->SetWidthLine( 3 ) ; manContourView->SetShowText(false); manContourControl->SetModelView(manContourModel, manContourView); manContourControl->CreateNewManualContour(); - manContourView->RefreshContour(); double x, y, z; connectorModel->getInicPoint(x, y, z); - + + manContourControl->SetState(1); manContourModel->SetCloseContour(false); @@ -559,8 +558,7 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) { int bak = manContourControl->GetNumberOfPointsManualContour() - 1; manContourControl->_bakIdPoint = bak; - manContourView->Refresh(); - + manContourControl->SetMoving(false); connectorcontroller->setModelAndView(connectorModel, connectorView); @@ -576,6 +574,8 @@ int wxVtkSceneManager::createGConnector(GPortModel* startPort) { connectorModel->addObserver(connectorView); connectorModel->addObserver(this); +// manContourView->Refresh(); + return newId; } @@ -628,26 +628,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) { @@ -687,8 +670,8 @@ 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 @@ -713,13 +696,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(); @@ -748,17 +730,12 @@ 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) { @@ -769,21 +746,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) { @@ -810,25 +788,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::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); - if (state == HIGHLIGHTED) { + // JGRR & CM + 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; @@ -838,7 +819,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); @@ -848,11 +829,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); } @@ -861,32 +844,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 @@ -894,30 +880,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 @@ -926,7 +911,8 @@ bool wxVtkSceneManager::OnLeftButtonDown() { //========================================================================= -bool wxVtkSceneManager::OnLeftButtonUp() { +bool wxVtkSceneManager::OnLeftButtonUp() +{ if (_worldState == DRAG_OBJECTS) { _worldState = NOTHING_HAPPENS; @@ -941,8 +927,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; @@ -953,7 +941,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); @@ -1023,6 +1012,7 @@ void wxVtkSceneManager::UnSelectBlackBoxes() { int id = _selectedObjects[i]; GObjectController* control = _controllers[id]; control->getView()->setState(NOTHING_HAPPENS); + control->getModel()->notifyObservers(_idManager); }// for _selectedObjects _selectedObjects.clear(); } @@ -1080,38 +1070,50 @@ 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) + { + 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(); - } - } - - /// 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; } @@ -1137,10 +1139,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) { @@ -1151,8 +1154,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; } @@ -1162,8 +1164,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; } @@ -1176,17 +1177,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()); } } } @@ -1194,8 +1191,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; @@ -1210,7 +1214,9 @@ void wxVtkSceneManager::deleteObject(int id) { _controllers.erase(it); }//if }// for - _parent->saveTempDiagram(); + + + return result; } //========================================================================= @@ -1627,7 +1633,6 @@ void wxVtkSceneManager::deleteAllBoxes() { } _selectedObjects.clear(); _controllers.clear(); - refreshScene(); } //========================================================================= @@ -1650,8 +1655,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(); - } //========================================================================= @@ -1747,20 +1750,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 = ""; 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); } @@ -1770,32 +1789,34 @@ 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); + } } 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); @@ -1804,7 +1825,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); @@ -1815,14 +1836,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); @@ -1833,7 +1854,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { //----------------------- //- COMPLEX INPUT PORTS //----------------------- - getline(inputStream, line);//COMPLEXINPUTS:num + getCleanLine(inputStream, line);//COMPLEXINPUTS:num char inputs[30]; strcpy(inputs, line.c_str()); result = strtok(inputs, delims); @@ -1845,12 +1866,12 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { for (int i = 0; i < numInputs; i++) { //---------- - getline(inputStream, line);//COMPLEX_PORT - getline(inputStream, line);//name + 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 @@ -1868,7 +1889,12 @@ 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); @@ -1879,7 +1905,7 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { //- COMPLEX OUTPUT PORTS //----------------------- - getline(inputStream, line);//COMPLEXOUTPUTS:num + getCleanLine(inputStream, line);//COMPLEXOUTPUTS:num char outputs[30]; strcpy(outputs, line.c_str()); result = strtok(outputs, delims); @@ -1891,12 +1917,12 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { for (int i = 0; i < numOutputs; i++) { //---------- - getline(inputStream, line);//COMPLEX_PORT - getline(inputStream, line);//name + 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 @@ -1914,17 +1940,21 @@ 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(false, outputPortName, xIn, yIn, - zIn); + configGComBoxInputOutputPort(false, outputPortName, xIn, yIn, zIn); } // for output complex box } // complex box //---------- - getline(inputStream, line);//BOXES:num + getCleanLine(inputStream, line);//BOXES:num char boxes[9]; strcpy(boxes, line.c_str()); result = strtok(boxes, delims); @@ -1936,8 +1966,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 @@ -1947,7 +1977,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 @@ -1955,7 +1985,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 @@ -1973,8 +2003,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); @@ -1991,23 +2028,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 @@ -2017,7 +2059,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 @@ -2026,7 +2068,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); @@ -2035,11 +2077,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()); @@ -2052,18 +2095,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); @@ -2073,7 +2112,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()); @@ -2087,9 +2126,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 @@ -2098,7 +2141,6 @@ void wxVtkSceneManager::loadDiagram(stringstream &inputStream) { } // start - refresh(); } //========================================================================= @@ -2173,11 +2215,17 @@ int wxVtkSceneManager::configGConnetion(std::string nameStartBox, boxModel = findGBox(nameStartBox); if (boxModel != NULL) { startP = boxModel->getOutputPort(nameStartPort); + if(startP == NULL){ + printf("SCP: ERROR in wxVtkSceneManager::configGConnetion start port %s is null. Port name is probably wrong.\n", nameStartPort.c_str()); + } } boxModel = findGBox(nameEndBox); if (boxModel != NULL) { endP = boxModel->getInputPort(nameEndPort); + if(endP == NULL){ + printf("SCP: ERROR in wxVtkSceneManager::configGConnetion end port %s is null. Port name is probably wrong\n", nameStartPort.c_str(), nameEndPort.c_str()); + } } //ups2 @@ -2284,9 +2332,7 @@ int wxVtkSceneManager::addObjectController(GObjectController* objController) { int newId = _contLastId;//_controllers.size(); objController->setId(newId); _controllers[newId] = objController; - std::cout - << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = " - << _contLastId << std::endl; + //std::cout << "DFCH: int wxVtkSceneManager::addObjectController(GObjectController* objController) ---- _contLastId = " << _contLastId << std::endl; _contLastId++; return newId; } @@ -2385,7 +2431,6 @@ void wxVtkSceneManager::DuplicateObjects(std::map objec cont->getModel()->notifyObservers(_idManager); } - refreshScene(); }