From f4dd416d1d3a91b9d684f55a14d78c6b54f2725a Mon Sep 17 00:00:00 2001 From: guzman <> Date: Wed, 23 May 2012 15:22:52 +0000 Subject: [PATCH] #feature 1359 #feature 1348 --- .../wxVtkSceneManager.cxx | 134 +++++++++++++++++- .../bbsWxGUIEditorGraphic/wxVtkSceneManager.h | 4 + 2 files changed, 137 insertions(+), 1 deletion(-) diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx index 645d959..ab0ef4e 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.cxx @@ -902,6 +902,26 @@ bool wxVtkSceneManager::OnRightButtonUp() { return true; } + ///JLGR 21-05-2012 + +bool wxVtkSceneManager::OnMiddleButtonDown() { + + + this->_vtkInteractorStyleBaseView->StartPan(); + + return true; + } + +bool wxVtkSceneManager::OnMiddleButtonUp() { + + + this->_vtkInteractorStyleBaseView->EndPan(); + + + return true; + } + + //========================================================================= GObjectController *wxVtkSceneManager::GetGBlackBoxControlerPointedByMouse() { @@ -992,7 +1012,8 @@ bool wxVtkSceneManager::OnLeftDClick() { bool wxVtkSceneManager::OnChar() { char keyCode = _vtkInteractorStyleBaseView->GetInteractor()-> GetKeyCode(); - + int ctrlkey = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey(); + // KeyCode 127 : Delete Key // KeyCode 8 : Backspace Key if (keyCode == 8 || keyCode == 127) { @@ -1008,6 +1029,19 @@ bool wxVtkSceneManager::OnChar() { _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"; + } + } return true; } @@ -2187,6 +2221,104 @@ int wxVtkSceneManager::addObjectController(GObjectController* objController) { return newId; } +//========================================================================= + +void wxVtkSceneManager::DuplicateObjects(std::map objectsMap) { + + std::map oldIdNewIdBoxes; + std::vector connections; + + std::vector newBoxesID; + + std::map::iterator it; + for (it = objectsMap.begin(); it != objectsMap.end(); ++it) { + GObjectController *cont = it->second; + int type = cont->getGObjectType(); + + if (type == GBLACKBOX) { + // Copy black box + double xInic, yInic, zInic; + GBlackBoxModel* copyBox = (GBlackBoxModel*) cont->getModel(); + copyBox->getInicPoint(xInic, yInic, zInic); + int idBox = createGBlackBox(0, 0, copyBox->getBBTKPackage(), + copyBox->getBBTKType()); + + int idcB = copyBox->getObjectId(); + oldIdNewIdBoxes[idcB] = idBox; + cont = _controllers[idBox]; + GBlackBoxModel* newbox = (GBlackBoxModel*) cont->getModel(); + newbox->setInicPoint(xInic, yInic, zInic); + int num = newbox->getNumInputPorts(); + for (int j = 0; j < num; j++) { + newbox->setValueToInputPort(j, copyBox->getValueInputPort(j)); + } + newbox->move(xInic + 20, yInic + 20, zInic); + newbox->notifyObservers(_idManager); + newBoxesID.push_back(newbox->getObjectId()); + + } else if (type == GCONNECTOR) { + int idCon = cont->getId(); + connections.push_back(idCon); + } + + } + + for (int i = 0; i < (int) connections.size(); i++) { + int objId = connections[i]; + GObjectController *cont = objectsMap[objId]; + GConnectorModel* connectModel = (GConnectorModel*) cont->getModel(); + + GPortModel* startPort = connectModel->getStartPort(); + int startPortIndex = startPort->getPosInBox(); + GPortModel* endPort = connectModel->getEndPort(); + int endPortIndex = endPort->getPosInBox(); + + GBlackBoxModel* startPortParentBox = + (GBlackBoxModel*) startPort->getParentBox(); + GBlackBoxModel* endPortParentBox = + (GBlackBoxModel*) endPort->getParentBox(); + + int idNewStartBox = oldIdNewIdBoxes[startPortParentBox->getObjectId()]; + int idNewEndBox = oldIdNewIdBoxes[endPortParentBox->getObjectId()]; + + GBlackBoxModel* newStartBox = + (GBlackBoxModel*) _controllers[idNewStartBox]->getModel(); + GBlackBoxModel* newEndBox = + (GBlackBoxModel*) _controllers[idNewEndBox]->getModel(); + + GPortModel* newStartPort = newStartBox->getOutputPort(startPortIndex); + GPortModel* newEndPort = newEndBox->getInputPort(endPortIndex); + + // Creates connection + int idCon = createGConnector(newStartPort); + GConnectorController *tempp = + (GConnectorController*) _controllers[idCon]; + GConnectorModel *conMod = (GConnectorModel*) tempp->getModel(); + vtkGConnectorView *conView = (vtkGConnectorView*) tempp->getView(); + tempp->endContourCreation(); + conMod->setEndPort(newEndPort); + conView->updateStartEndPoints(); + } + + /// the new selected boxes are the duplicate ones + + UnSelectBlackBoxes(); + for (int i = 0; i < newBoxesID.size(); i++) { + _selectedObjects.push_back(newBoxesID.at(i)); + } + + for (int i = 0; i < (int) _selectedObjects.size(); i++) { + int id = _selectedObjects[i]; + GObjectController* cont = _controllers[id]; + + cont->getView()->setState(SELECTED); + cont->getModel()->notifyObservers(_idManager); + + } + refreshScene(); + } + + //========================================================================= int wxVtkSceneManager::getNumSelectedObjects() { diff --git a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h index 3fb4c0b..fe5889c 100644 --- a/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h +++ b/lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxVtkSceneManager.h @@ -109,6 +109,8 @@ namespace bbtk virtual bool OnLeftButtonUp(); virtual bool OnRightButtonUp(); virtual bool OnLeftDClick(); + virtual bool OnMiddleButtonDown(); ///JLGR 21-05-2012 + virtual bool OnMiddleButtonUp(); ///JLGR 21-05-2012 //------- int createGBlackBox(int x, int y, std::string packageName, std::string boxType ); @@ -161,6 +163,8 @@ namespace bbtk //Add a map of object controllers void addObjects(std::map objectsMap); + /// Duplicates Objects to current a diagram + void DuplicateObjects(std::map objectsMap);///JLGR 21-05-2012 //------- // Makes a BlackBox Executable -- 2.45.0