1 /*=========================================================================
7 =========================================================================*/
9 /* ---------------------------------------------------------------------
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
14 * This software is governed by the CeCILL-B license under French law and
15 * abiding by the rules of distribution of free software. You can use,
16 * modify and/ or redistribute the software under the terms of the CeCILL-B
17 * license as circulated by CEA, CNRS and INRIA at the following URL
18 * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
19 * or in the file LICENSE.txt.
21 * As a counterpart to the access to the source code and rights to copy,
22 * modify and redistribute granted by the license, users are provided only
23 * with a limited warranty and the software's author, the holder of the
24 * economic rights, and the successive licensors have only limited
27 * The fact that you are presently reading this means that you have had
28 * knowledge of the CeCILL-B license and that you accept its terms.
29 * ------------------------------------------------------------------------ */
33 * \brief Class bbtk::wxVtkSceneManager .
37 #include "wxVtkSceneManager.h"
43 //=========================================================================
44 wxVtkSceneManager::wxVtkSceneManager(wxGEditorTabPanel *parent, wxVtk3DBaseView *baseView,int idManager)
55 _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget((wxDropTarget*)parent);
57 _worldState=NOTHING_HAPPENS;
58 registerController(this);
64 //=========================================================================
66 void wxVtkSceneManager::disconnectDrop()
68 _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL);
71 //=========================================================================
73 wxVtkSceneManager::~wxVtkSceneManager()
77 //=========================================================================
79 void wxVtkSceneManager::configureBaseView()
81 vtkInteractorStyleBaseView2D *interactorstylebaseview = vtkInteractorStyleBaseView2D::New();
83 _baseView->SetInteractorStyleBaseView(interactorstylebaseview);
85 // Important to activate the 2D interaction system
86 wxVTKRenderWindowInteractor *iren = _baseView->GetWxVTKRenderWindowInteractor();
87 interactorstylebaseview->SetInteractor ( iren );
88 iren->SetInteractorStyle(interactorstylebaseview);
89 interactorstylebaseview->SetwxVtkBaseView(_baseView);
91 _baseView->GetRenderer()->GetActiveCamera()->ParallelProjectionOn();
92 _baseView->GetRenderer()->ResetCamera(-100,100,-100,100,900,1000);
94 _baseView->GetRenderer()->SetBackground(0.9,0.9,0.9);
95 _baseView->GetRenderer()->GradientBackgroundOff();
99 //=========================================================================
101 int wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName, std::string boxType)
104 int windowWidth=_baseView->GetRenWin()->GetSize()[0];
105 int windowHeight=_baseView->GetRenWin()->GetSize()[1];
107 int type = GBLACKBOX;
109 //Create the MVC Objects
111 GBlackBoxModel *model = (GBlackBoxModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type);
112 vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type);
113 GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
115 BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxType);
117 //Prepares the initial model
118 //The coordinates obtained are the following. Top-Left:x=0,y=0 Bottom-Right:x=width,y=height
121 double yy = windowHeight-y;
123 //z value is not important yet, because it is only used a parallel projection
126 _baseView->TransCoordScreenToWorld(xx,yy,zz);
127 model->setInicPoint(xx,yy,zz);
130 std::stringstream stream;
134 stream << "Box0" << _numBoxes;
138 stream << "Box" << _numBoxes;
140 std::string arraystring = stream.str();
142 model->setBBTKName(arraystring);
143 model->setBBTKType(boxType);
144 model->setBBTKPackage(packageName);
146 model->addObserver(view);
147 model->addObserver(this);
149 //Iterate and create the input ports
150 std::map<std::string, BlackBoxInputDescriptor*> descriptorInMap = descriptor->GetInputDescriptorMap();
151 std::map<std::string, BlackBoxInputDescriptor*>::iterator itInput;
154 for(itInput = descriptorInMap.begin(); itInput != descriptorInMap.end(); ++itInput)
156 BlackBoxInputDescriptor *desc = itInput->second;
157 createGInputPort(GINPUTPORT,i,model,desc);
161 //Iterate and create the output ports
162 std::map<std::string, BlackBoxOutputDescriptor*> descriptorOutMap = descriptor->GetOutputDescriptorMap();
163 std::map<std::string, BlackBoxOutputDescriptor*>::iterator itOutput;
166 for(itOutput = descriptorOutMap.begin();itOutput != descriptorOutMap.end(); ++itOutput)
168 BlackBoxOutputDescriptor *desc = itOutput->second;
169 createGOutputPort(GOUTPUTPORT,i,model,desc);
174 //Associates the view with the correspondent renderer and the model.
175 //(NOTE: Refresh is only made by the view)
176 view->setModel(model);
177 view->setBaseView(_baseView);
178 view->initVtkObjects();
180 //Associates the controller with the correspondent model and view
181 controller->setModelAndView(model,view);
183 //Resgiter change to the observers of the actual model
184 model->notifyObservers(_idManager);
186 //Register the controller of the new object
187 registerController((InteractorStyleMaracas*) controller);
189 //Add the object to the objects list
190 int newId = _controllers.size();
191 controller->setId(newId);
192 _controllers[newId] = controller;
197 //=========================================================================
199 int wxVtkSceneManager::createGInputPort(int portType, int posinBox,GBlackBoxModel *blackBox, BlackBoxInputDescriptor *desc)
201 GPortController* portController = createGPort(portType,desc->GetName(),desc->GetTypeName(),posinBox,blackBox);
202 blackBox->addInputPort((GPortModel*)portController->getModel());
203 return portController->getId();
206 //=========================================================================
208 int wxVtkSceneManager::createGOutputPort(int portType, int posinBox,GBlackBoxModel *blackBox, BlackBoxOutputDescriptor *desc)
210 GPortController* portController = createGPort(portType,desc->GetName(),desc->GetTypeName(),posinBox,blackBox);
211 blackBox->addOutputPort((GPortModel*)portController->getModel());
212 return portController->getId();
215 //=========================================================================
217 GPortController* wxVtkSceneManager::createGPort(int portType,std::string bbtkName, std::string bbtkType, int posInBox,GBlackBoxModel *blackBox)
221 //Create the MVC Objects
222 GPortModel *model = (GPortModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type);
223 vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type);
224 GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
226 model->registerInBox(blackBox,portType, posInBox);
228 model->setBBTKType(bbtkType);
229 model->setBBTKName(bbtkName);
231 model->addObserver(view);
232 model->addObserver(this);
234 //Associates the view with the correspondent renderer and the model.
235 //(NOTE: Refresh is only made by the view)
236 view->setModel(model);
237 view->setBaseView(_baseView);
238 view->initVtkObjects();
240 //Associates the controller with the correspondent model and view
241 controller->setModelAndView(model,view);
243 model->notifyObservers(_idManager);
245 //Register the controller of the new object
246 registerController((InteractorStyleMaracas*) controller);
248 int newId = _controllers.size();
249 controller->setId(newId);
250 _controllers[newId] = controller;
252 return (GPortController*)controller;
255 //=========================================================================
257 int wxVtkSceneManager::createGConnector(GPortModel* startPort)
259 int type = GCONNECTOR;
261 manualConnectorContourController* manContourControl = new manualConnectorContourController();
262 manualConnectorContourView* manContourView = new manualConnectorContourView();
263 manualContourModel* manContourModel = new manualContourModel();
265 GConnectorController* connectorcontroller = new GConnectorController();
266 GConnectorModel* connectorModel = new GConnectorModel();
267 vtkGConnectorView* connectorView = new vtkGConnectorView();
268 connectorModel->setGObjectType(type);
270 manContourModel->SetCloseContour(false);
271 connectorModel->setStartPort(startPort);
273 manContourView->SetModel( manContourModel );
274 manContourView->SetWxVtkBaseView( _baseView );
275 manContourView->SetRange( 0.5 );
276 manContourView->SetZ( 900 );
278 manContourView->SetColorNormalContour(0, 0, 1);
279 manContourView->SetColorEditContour(0.5, 0.5, 0.5);
280 manContourView->SetColorSelectContour(1, 0.8, 0);
281 manContourView->SetWidthLine(1);
282 manContourView->SetShowText(false);
284 manContourControl->SetModelView( manContourModel , manContourView );
286 manContourControl->CreateNewManualContour();
288 manContourView->RefreshContour();
292 connectorModel->getInicPoint(x,y,z);
294 manContourControl->SetState(1);
295 manContourModel->SetCloseContour(false);
297 manContourModel->AddPoint(x,y,z);
298 manContourView->AddPoint();
300 manContourModel->AddPoint(x,y,z);
301 manContourView->AddPoint();
303 int bak= manContourControl->GetNumberOfPointsManualContour() - 1;
304 manContourControl->_bakIdPoint=bak;
305 manContourView->Refresh();
307 manContourControl->SetMoving( false );
309 registerController((InteractorStyleMaracas*) connectorcontroller);
311 connectorcontroller->setManualContourController(manContourControl);
312 connectorModel->setManualContourModel(manContourModel);
313 connectorView->setManualContourView(manContourView);
314 connectorView->setModel(connectorModel);
315 connectorView->setBaseView(_baseView);
316 connectorcontroller->setModelAndView(connectorModel,connectorView);
318 connectorModel->addObserver(connectorView);
319 connectorModel->addObserver(this);
321 int newId = _controllers.size();
322 connectorcontroller->setId(newId);
323 _controllers[newId] = connectorcontroller;
328 //=========================================================================
330 void wxVtkSceneManager::registerController(InteractorStyleMaracas *param)
332 vtkInteractorStyleBaseView* baseViewControlManager = (vtkInteractorStyleBaseView*)_baseView->GetInteractorStyleBaseView();
333 baseViewControlManager->AddInteractorStyleMaracas( param );
336 //=========================================================================
338 void wxVtkSceneManager::unregisterController(InteractorStyleMaracas *param)
340 vtkInteractorStyleBaseView* baseViewControlManager = (vtkInteractorStyleBaseView*)_baseView->GetInteractorStyleBaseView();
341 baseViewControlManager->RemoveInteractorStyleMaracas( param );
344 //=========================================================================
346 vtkRenderer* wxVtkSceneManager::getRenderer()
348 return _baseView->GetRenderer();
351 //=========================================================================
353 vtkRenderWindow* wxVtkSceneManager::getRenderWindow()
355 return _baseView->GetRenWin();
357 //=========================================================================
360 void wxVtkSceneManager::update(int idController,int command)
362 if(command != NO_COMMAND)
364 if(command == ADD_TO_SELECTED)
366 GObjectController* cont = _controllers[idController];
369 for (int i=0; i<_selectedObjects.size() && foundID==false; i++)
371 int id = _selectedObjects[i];
379 int id = idController;
380 _selectedObjects.push_back(id);
384 else if(command == INIT_CREATION_CONTOUR)
386 _worldState = INIT_CREATION_CONTOUR;
387 GObjectController* cont = _controllers[idController];
388 GPortModel* startOutputPort = (GPortModel*)cont->getModel();
391 // The last one is the controller of the connector
392 for(int i=0;i<_controllers.size();i++)
394 GObjectController* cont = _controllers[i];
395 if(cont->getGObjectType() == GPORT )
397 GPortModel* port = (GPortModel*)cont->getModel();
398 if(port->getPortType()==GINPUTPORT)
400 cont->SetActive(true);
404 cont->getView()->setState(NOTHING_HAPPENS);
405 cont->getModel()->notifyObservers(_idManager);
406 cont->SetActive(false);
411 cont->getView()->setState(NOTHING_HAPPENS);
412 cont->getModel()->notifyObservers(_idManager);
413 cont->SetActive(false);
417 _selectedObjects.clear();
419 createGConnector(startOutputPort);
422 else if(command == FIN_CREATION_CONTOUR && _worldState == INIT_CREATION_CONTOUR)
424 _worldState = NOTHING_HAPPENS;
425 int id = _controllers.size()-1;
426 GObjectController* cont = _controllers[id];
427 GConnectorModel* modelContour = (GConnectorModel*)cont->getModel();
429 GObjectController* finPort = _controllers[idController];
430 if(finPort->getGObjectType() == GPORT)
432 GPortModel* modelPort = (GPortModel*)finPort->getModel();
433 modelContour->setEndPort(modelPort);
436 manualConnectorContourController* manCont = ((GConnectorController*)cont)->getManualContourController();
437 manualConnectorContourView* connView = (manualConnectorContourView*)manCont->GetManualViewBaseContour();
440 for(int i=0;i<_controllers.size();i++)
442 GObjectController* cont = _controllers[i];
443 if(cont->getView()!=NULL)
445 cont->getView()->setState(NOTHING_HAPPENS);
446 cont->getModel()->notifyObservers(_idManager);
448 cont->SetActive(true);
455 //=========================================================================
457 bool wxVtkSceneManager::OnMouseMove()
460 wxVTKRenderWindowInteractor *wxVTKiren;
461 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
462 wxVTKiren->GetEventPosition(X,Y);
465 if(_worldState == DRAG_OBJECTS)
467 for (int i=0; i<_selectedObjects.size(); i++)
469 int id = _selectedObjects[i];
470 GObjectController* cont = _controllers[id];
473 cont->getView()->setStartDragging(true);
475 cont->getView()->moveObject(X,Y);
476 cont->getView()->setState(DRAG);
477 cont->getModel()->notifyObservers(_idManager);
480 std::map<int, GObjectController*>::iterator it;
482 for(it = _controllers.begin(); it != _controllers.end(); ++it)
484 GObjectController *desc = it->second;
485 if(desc->getGObjectType()==GCONNECTOR)
487 vtkGConnectorView* vconn = (vtkGConnectorView*)desc->getView();
488 vconn->updateStartEndPoints();
492 _startDragging=false;
495 else if(_worldState == NOTHING_HAPPENS || _worldState == INIT_CREATION_CONTOUR)
497 std::map<int, GObjectController*>::iterator it;
499 for(it = _controllers.begin(); it != _controllers.end(); ++it)
501 GObjectController *desc = it->second;
502 int type = desc->getGObjectType();
503 int state = desc->getView()->getState();
505 if(state == HIGHLIGHTED){
507 updateStatusBar(desc->getStatusText());
510 GBlackBoxModel *mod = (GBlackBoxModel*)desc->getModel();
511 _parent->displayBlackBoxInfo(mod->getBBTKPackage(),mod->getBBTKType());
523 //=========================================================================
525 bool wxVtkSceneManager::OnLeftButtonDown()
527 if(_worldState==INIT_CREATION_CONTOUR)
529 bool isOverPort=false;
530 std::map<int, GObjectController*>::iterator it;
531 for(it = _controllers.begin(); it != _controllers.end() && isOverPort==false; ++it)
533 GObjectController *desc = it->second;
534 if(desc->getGObjectType()==GPORT)
536 GPortModel* portmod=(GPortModel*)desc->getModel();
537 vtkGObjectView* portView=desc->getView();
538 if(portmod->getPortType()==GINPUTPORT && portView->getState()==HIGHLIGHTED)
545 if(isOverPort==false)
547 _worldState=NOTHING_HAPPENS;
548 int lastId = _controllers.size()-1;
549 GConnectorController *connector = (GConnectorController*)_controllers[lastId];
550 connector->removeFromScene();
551 unregisterController(connector);
552 _controllers.erase(lastId);
554 for(it = _controllers.begin(); it != _controllers.end(); ++it)
556 GObjectController *desc = it->second;
557 desc->SetActive(true);
558 desc->getView()->setState(NOTHING_HAPPENS);
559 desc->getModel()->notifyObservers(_idManager);
564 if(_selectedObjects.size()!=0)
566 _worldState = DRAG_OBJECTS;
567 _startDragging = true;
569 for (int i = 0; i < _selectedObjects.size(); i++)
571 int id = _selectedObjects[i];
572 GObjectController* cont = _controllers[id];
573 cont->getView()->setState(DRAG);
574 cont->getModel()->notifyObservers(_idManager);
583 //=========================================================================
585 bool wxVtkSceneManager::OnLeftButtonUp()
587 if(_worldState == DRAG_OBJECTS)
589 _worldState = NOTHING_HAPPENS;
591 for (int i = 0; i < _selectedObjects.size(); i++)
593 int id = _selectedObjects[i];
594 GObjectController* cont = _controllers[id];
595 cont->getView()->setState(SELECTED);
596 cont->getModel()->notifyObservers(_idManager);
602 //=========================================================================
604 bool wxVtkSceneManager::OnRightButtonUp()
606 if(_worldState==INIT_CREATION_CONTOUR)
608 _worldState=NOTHING_HAPPENS;
609 int lastId = _controllers.size()-1;
610 GConnectorController *connector = (GConnectorController*)_controllers[lastId];
611 connector->removeFromScene();
612 unregisterController(connector);
613 _controllers.erase(lastId);
615 std::map<int, GObjectController*>::iterator it;
616 for(it = _controllers.begin(); it != _controllers.end(); ++it)
618 GObjectController *desc = it->second;
619 desc->SetActive(true);
620 desc->getView()->setState(NOTHING_HAPPENS);
621 desc->getModel()->notifyObservers(_idManager);
626 for (int i = 0; i < _selectedObjects.size(); i++)
628 int id = _selectedObjects[i];
629 GObjectController* cont = _controllers[id];
630 cont->SetActive(true);
631 cont->getView()->setState(NOTHING_HAPPENS);
632 cont->getModel()->notifyObservers(_idManager);
635 _selectedObjects.clear();
640 //=========================================================================
642 bool wxVtkSceneManager::OnLeftDClick()
645 wxVTKRenderWindowInteractor *wxVTKiren;
646 wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor();
647 wxVTKiren->GetEventPosition(X,Y);
649 std::map<int, GObjectController*>::iterator it;
651 bool clickOnObject = false;
653 for(it = _controllers.begin(); it != _controllers.end() && clickOnObject==false; ++it)
655 GObjectController *cont = it->second;
656 int type = cont->getGObjectType();
658 if(cont->getView()->isPointInside(X,Y))
662 for (int i=0; i<_selectedObjects.size(); i++)
664 int id = _selectedObjects[i];
665 GObjectController* control = _controllers[id];
666 control->getView()->setState(NOTHING_HAPPENS);
668 _selectedObjects.clear();
670 GBlackBoxModel *bbmodel = (GBlackBoxModel*)cont->getModel();
671 _parent->editBlackBox(bbmodel);
673 clickOnObject = true;
677 if(clickOnObject==false)
679 //_parent->editDiagramParameters(this);
685 //=========================================================================
687 bool wxVtkSceneManager::OnChar()
689 char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode();
691 // KeyCode 127 : Delete Key
692 // KeyCode 8 : Backspace Key
693 if(keyCode == 8 || keyCode == 127)
695 if(_selectedObjects.size()>0)
697 for(int i=0;i<_selectedObjects.size();i++)
699 int id = _selectedObjects[i];
702 _selectedObjects.clear();
709 //=========================================================================
711 void wxVtkSceneManager::deleteObject(int id)
713 GObjectController *control = _controllers[id];
714 std::vector<int> controllersToRemove;
716 if(control->getGObjectType()==GBLACKBOX)
718 GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel();
719 std::vector<GPortModel*> inputs = bbmod->getInputPorts();
721 bool boxConnected = false;
723 // Add box input controllers to be removed
724 for(int i = 0;i<inputs.size();i++)
726 controllersToRemove.push_back(inputs[i]->getObjectId());
727 if(inputs[i]->isConnected())
733 std::vector<GPortModel*> outputs = bbmod->getOutputPorts();
735 // Add box output controllers to be removed
736 for(int i = 0;i<outputs.size();i++)
738 controllersToRemove.push_back(outputs[i]->getObjectId());
739 if(outputs[i]->isConnected())
745 // Add connection controllers to be removed
746 std::map<int, GObjectController*>::iterator it;
747 for(it = _controllers.begin(); it != _controllers.end(); ++it)
749 GObjectController *cont = it->second;
750 int type = cont->getGObjectType();
753 GConnectorModel *conMod = (GConnectorModel*)cont->getModel();
754 if(conMod->getStartPort()!=NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
756 controllersToRemove.push_back(conMod->getObjectId());
758 if(conMod->getEndPort()!=NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
760 controllersToRemove.push_back(conMod->getObjectId());
765 // Add box controller to be removed
766 controllersToRemove.push_back(bbmod->getObjectId());
768 else if(control->getGObjectType()==GCONNECTOR)
770 GConnectorModel *conMod = (GConnectorModel*)control->getModel();
771 controllersToRemove.push_back(conMod->getObjectId());
774 for(int i = 0;i<controllersToRemove.size();i++)
776 int id = controllersToRemove[i];
777 GObjectController *cont = _controllers[id];
778 cont->removeFromScene();
779 unregisterController((InteractorStyleMaracas*)cont);
780 _controllers.erase(id);
786 //=========================================================================
788 void wxVtkSceneManager::displayBlackBoxInfo(std::string packageName, std::string boxName)
790 _parent->displayBlackBoxInfo(packageName,boxName);
793 //=========================================================================
795 void wxVtkSceneManager::updateStatusBar(std::string textStatus)
797 _parent->updateStatusBar(textStatus);
800 //=========================================================================
802 std::string wxVtkSceneManager::getDiagramScript()
804 bool existsExec=false;
806 std::vector<std::string> packages;
807 std::vector<int> boxes;
808 std::vector<int> connections;
809 std::vector<int> execBoxes;
811 std::map<int, GObjectController*>::iterator it;
813 for(it = _controllers.begin(); it != _controllers.end(); ++it)
815 GObjectController *desc = it->second;
816 int type = desc->getGObjectType();
820 GBlackBoxModel *mod = (GBlackBoxModel*)desc->getModel();
822 std::string pkg = mod->getBBTKPackage();
823 bool existsPkg = false;
824 for(int t = 0;t<packages.size() && existsPkg == false;t++)
833 packages.push_back(pkg);
837 boxes.push_back(it->first);
838 if(mod->isExecutable())
840 execBoxes.push_back(it->first);
844 else if(type==GCONNECTOR)
846 connections.push_back(it->first);
850 std::string script = "";
851 script+="# BBTK GEditor Script\n";
852 script+="# ----------------------\n";
856 for(i = 0; i<packages.size();i++)
863 script+="include std\n";
865 for(i = 0; i<boxes.size();i++)
869 GObjectController *control = _controllers[id];
870 GBlackBoxModel *model = (GBlackBoxModel*)control->getModel();
872 script+=model->getBBTKType();
874 script+=model->getBBTKName();
877 std::vector<GPortModel*> inputs = model->getInputPorts();
878 for(int j = 0; j<inputs.size();j++)
880 GPortModel* inputPort = inputs[j];
881 if(inputPort->isValueSet())
884 script+=model->getBBTKName();
886 script+=inputPort->getBBTKName();
888 script+=inputPort->getValue();
895 for(i = 0; i<connections.size();i++)
898 int id = connections[i];
899 GObjectController *control = _controllers[id];
900 GConnectorModel *model = (GConnectorModel*)control->getModel();
902 //Start Connection info
903 GPortModel *start = model->getStartPort();
904 script+=start->getParentBox()->getBBTKName();
906 script+=start->getBBTKName();
910 //End Connection info
911 GPortModel *end = model->getEndPort();
912 script+=end->getParentBox()->getBBTKName();
914 script+=end->getBBTKName();
919 for(i = 0; i<execBoxes.size();i++)
922 int id = execBoxes[i];
923 GObjectController *control = _controllers[id];
924 GBlackBoxModel *model = (GBlackBoxModel*)control->getModel();
926 script+=model->getBBTKName();
935 //=========================================================================
937 void wxVtkSceneManager::deleteAllBoxes()
939 std::map<int, GObjectController*>::iterator it;
940 for(it = _controllers.begin(); it != _controllers.end(); ++it)
942 GObjectController *cont = it->second;
943 cont->removeFromScene();
944 unregisterController((InteractorStyleMaracas*)cont);
946 _selectedObjects.clear();
947 _controllers.clear();
951 //=========================================================================
953 void wxVtkSceneManager::refreshScene()
955 _baseView->RefreshView();
958 //=========================================================================
960 void wxVtkSceneManager::centerView()
963 _baseView->GetRenderer()->GetActiveCamera()->GetFocalPoint(temp);
964 _baseView->GetRenderer()->GetActiveCamera()->SetFocalPoint(0,0,temp[2]);
965 _baseView->GetRenderer()->GetActiveCamera()->GetPosition(temp);
966 _baseView->GetRenderer()->GetActiveCamera()->SetPosition(0,0,temp[2]);
967 _baseView->RefreshView();
971 //=========================================================================
973 void wxVtkSceneManager::saveDiagram(std::string &content)
977 std::vector<int> boxes = getBoxes();
978 int bsize = boxes.size();
980 sprintf (buffer, "%d", bsize);
984 for(int i = 0;i<bsize;i++)
987 GObjectController *cont = _controllers[id];
988 cont->getModel()->save(content);
992 std::vector<int> connections = getConnections();
993 int csize = connections.size();
994 content+="CONNECTIONS:";
995 sprintf (buffer, "%d", csize);
999 for(int i = 0;i<csize;i++)
1001 int id = connections[i];
1002 GObjectController *cont = _controllers[id];
1003 cont->getModel()->save(content);
1008 //=========================================================================
1010 void wxVtkSceneManager::loadDiagram(ifstream &inputStream)
1013 std::string line="";
1014 char delims[] = ":";
1015 char *result = NULL;
1016 getline(inputStream,line);
1019 while ( !inputStream.eof() )
1021 if(line=="" || line[0]=='#')
1023 getline(inputStream,line);
1025 else if(line=="APP_START")
1035 getline(inputStream,line);//BOXES:num
1037 strcpy( boxes, line.c_str() );
1038 result = strtok( boxes, delims );
1039 result = strtok( NULL, delims );
1042 std::istringstream is(result);
1045 for(int i = 0;i<numBoxes;i++)
1048 getline(inputStream,line);//BOX
1049 getline(inputStream,line);//package:type:name
1051 strcpy( box, line.c_str() );
1052 result = strtok( box, delims );//package
1053 std::string package(result);
1054 result = strtok( NULL, delims );//type
1055 std::string type(result);
1056 result = strtok( NULL, delims );//name
1057 std::string name(result);
1059 getline(inputStream,line);//ISEXEC:TRUE|FALSE
1061 strcpy( exec, line.c_str() );
1062 result = strtok( exec, delims );//ISEXEC
1063 result = strtok( NULL, delims );//TRUE|FALSE
1064 std::string isExec(result);
1067 getline(inputStream,line);//xInic:yInic:zInic
1069 strcpy( coord, line.c_str() );
1070 result = strtok( coord, delims );//xInic
1071 std::string xInic(result);
1072 result = strtok( NULL, delims );//yInic
1073 std::string yInic(result);
1074 result = strtok( NULL, delims );//zInic
1075 std::string zInic(result);
1077 double xIn, yIn, zIn;
1078 std::istringstream xSt(xInic);
1080 std::istringstream ySt(yInic);
1082 std::istringstream zSt(zInic);
1086 getline(inputStream,line);//xEnd:yEnd:zEnd
1087 strcpy( coord, line.c_str() );
1088 result = strtok( coord, delims );//xEnd
1089 std::string xEnd(result);
1090 result = strtok( NULL, delims );//yEnd
1091 std::string yEnd(result);
1092 result = strtok( NULL, delims );//zEnd
1093 std::string zEnd(result);
1095 double xEn, yEn, zEn;
1096 std::istringstream xEt(xEnd);
1098 std::istringstream yEt(yEnd);
1100 std::istringstream zEt(zEnd);
1103 int idBox = createGBlackBox(0,0,package,type);
1104 GObjectController *cont = _controllers[idBox];
1105 GBlackBoxModel *bbmod = (GBlackBoxModel*)cont->getModel();
1106 bbmod->setBBTKName(name);
1107 bbmod->setInicPoint(xIn,yIn,zIn);
1108 bbmod->setFinalPoint(xEn,yEn,zEn);
1111 bbmod->setExecutable(true);
1113 else if(isExec=="FALSE")
1115 bbmod->setExecutable(false);
1119 getline(inputStream,line);//PORT o FIN_BOX
1120 std::string port=line.substr(0,4);
1123 getline(inputStream,line);//name:value
1125 strcpy( poort, line.c_str() );
1126 result = strtok( poort, delims );//name
1127 std::string name(result);
1128 result = strtok( NULL, delims );//value
1129 std::string value(result);
1131 bbmod->setValueToInput(name,value);
1133 getline(inputStream,line);//PORT o FIN_BOX
1134 port=line.substr(0,4);
1137 bbmod->notifyObservers(_idManager);
1142 getline(inputStream,line);//CONNECTIONS:num
1144 strcpy( conns, line.c_str() );
1145 result = strtok( conns, delims );
1146 result = strtok( NULL, delims );
1149 std::istringstream isCons(result);
1152 for(int i = 0;i<numConns;i++)
1155 getline(inputStream,line);//CONNECTION
1156 getline(inputStream,line);//Startbox.PortName:EndBox.PortName
1159 strcpy( connec, line.c_str() );
1160 result = strtok( connec, delims );
1161 std::string nameStartBox(result);
1162 result = strtok( NULL, delims );
1163 std::string nameStartPort(result);
1164 result = strtok( NULL, delims );
1165 std::string nameEndBox(result);
1166 result = strtok( NULL, delims );
1167 std::string nameEndPort(result);
1169 std::vector<int> lstB = getBoxes();
1171 GPortModel *startP=NULL;
1172 GPortModel *endP=NULL;
1173 for(int j = 0;j<lstB.size();j++)
1176 GBlackBoxModel *bbMod = (GBlackBoxModel*)_controllers[idB]->getModel();
1177 if(_controllers[idB]->getModel()->getBBTKName()==nameStartBox)
1179 startP = bbMod->getOutputPort(nameStartPort);
1181 else if(_controllers[idB]->getModel()->getBBTKName()==nameEndBox)
1183 endP = bbMod->getInputPort(nameEndPort);
1187 int idCon = createGConnector(startP);
1188 _worldState = NOTHING_HAPPENS;
1189 GConnectorController *tempp = (GConnectorController*)_controllers[idCon];
1191 GConnectorModel *conMod = (GConnectorModel*)tempp->getModel();
1192 vtkGConnectorView *conView = (vtkGConnectorView*)tempp->getView();
1193 tempp->endContourCreation();
1194 conMod->setEndPort(endP);
1195 conView->updateStartEndPoints();
1202 //=========================================================================
1204 std::vector<int> wxVtkSceneManager::getBoxes()
1206 std::vector<int> vect;
1207 std::map<int, GObjectController*>::iterator it;
1208 for(it = _controllers.begin(); it != _controllers.end(); ++it)
1210 GObjectController *cont = it->second;
1211 if(cont->getGObjectType()==GBLACKBOX)
1213 vect.push_back(cont->getId());
1219 //=========================================================================
1221 std::vector<int> wxVtkSceneManager::getConnections()
1223 std::vector<int> vect;
1224 std::map<int, GObjectController*>::iterator it;
1225 for(it = _controllers.begin(); it != _controllers.end(); ++it)
1227 GObjectController *cont = it->second;
1228 if(cont->getGObjectType()==GCONNECTOR)
1230 vect.push_back(cont->getId());
1236 //=========================================================================
1238 bool wxVtkSceneManager::isComplexBox()
1240 return _isComplexBox;
1243 //=========================================================================
1245 void wxVtkSceneManager::setComplexBox(bool val)
1250 //=========================================================================
1252 } // EO namespace bbtk