manContourView->SetColorNormalContour(0, 0, 1);
manContourView->SetColorEditContour(0.5, 0.5, 0.5);
manContourView->SetColorSelectContour(1, 0.8, 0);
- manContourView->SetWidthLine(1);
+
+ /**
+ * JGRR AND CM
+ * Width increased from 2 to 5, it simplifies line handling and spline control :P
+ * @param WidthLine
+ */
+ manContourView->SetWidthLine( 5 ) ;
manContourView->SetShowText(false);
manContourControl->SetModelView(manContourModel, manContourView);
_selectedObjects.erase(_selectedObjects.begin() + index);
}
} else if (command == INIT_CREATION_CONTOUR) {
- _worldState = INIT_CREATION_CONTOUR;
+
+ // JGRR & CM WH
+ typedef std::map<int , GObjectController*>::iterator TIterator ;
+ TIterator iter ;
+ TIterator iter_end ;
+ // Find current item in the controller
+ iter = _controllers.find( idController ) ;
+ iter_end = _controllers.end( ) ;
+ // If item exist
+ if ( iter != iter_end ) {
+ GObjectController* gobjc = iter->second ;
+
+ std::string bbtkType = gobjc->getModel( )->getBBTKType( ) ;
+ // And if the item is a port
+ if ( gobjc->getModel( )->getGObjectType( ) == GPORT ) {
+ TIterator c_it = _controllers.begin( ) ;
+ // Go through all componets
+ for ( c_it ; c_it != iter_end ; c_it++ ) {
+ GObjectController* obc = c_it->second ;
+ int obc_type = obc->getModel( )->getGObjectType( ) ;
+ std::string obc_bbtkType = obc->getModel( )->getBBTKType( ) ;
+ // if the component is a port and the type is the same of that selected
+ if ( ( obc_type == GPORT ) && ( obc_bbtkType == bbtkType ) ) {
+ // Highliht element
+ obc->getView( )->setState( POSSIBLE_CONNECTION ) ;
+ //obc->getView( )->setState( HIGHLIGHTED ) ;
+ }
+ }
+ }
+ }
+
+ // EO JGRR & CM WH
+
+ _worldState = INIT_CREATION_CONTOUR;
GObjectController* cont = _controllers[idController];
GPortModel* startOutputPort = (GPortModel*) cont->getModel();
if (finPort->getGObjectType() == GPORT) {
GPortModel* modelPort = (GPortModel*) finPort->getModel();
modelContour->setEndPort(modelPort);
+
+ // JGRR CM
+ typedef std::map<int, GObjectController*>::iterator TIterator;
+ TIterator c_it = _controllers.begin();
+ TIterator iter_end = _controllers.end();
+ // Go through all componets
+ for (c_it; c_it != iter_end; c_it++) {
+ GObjectController* obc = c_it->second;
+ int obc_type = obc->getModel()->getGObjectType();
+ int obc_state = obc->getView()->getState();
+ // if the component is a port and the type is the same of that selected
+ if ((obc_type == GPORT) && (obc_state == POSSIBLE_CONNECTION)) {
+ // Return element to neutral state if not selected
+ obc->getView()->setState(NOTHING_HAPPENS);
+ }
+ if ((obc_type == GPORT) && (obc_state == SELECTED_POSSIBLE_CONNECTION)) {
+ // Change element to connected state
+ obc->getView()->setState(HIGHLIGHTED);
+
+ }
+
+ }
+ // EO JGRR CM
+
+ _parent->saveTempDiagram();
}
manualConnectorContourController
if (portmod->getPortType() == GINPUTPORT
&& portView->getState() == HIGHLIGHTED) {
isOverPort = true;
- } // if
- } // 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) {
CancelConnection();
UnSelectBlackBoxes();
} // isOverPort
+
} else { //_worldState
cont->getView()->setState(DRAG);
cont->getModel()->notifyObservers(_idManager);
} // for
-
+
} // if _selectedObjects.size
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() {
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) {
_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";
+ }
+ }
return true;
}
_controllers.erase(it);
}//if
}// for
+ _parent->saveTempDiagram();
}
//=========================================================================
//=========================================================================
-void wxVtkSceneManager::loadDiagram(ifstream &inputStream) {
+void wxVtkSceneManager::loadDiagram(stringstream &inputStream) {
std::string version = "<void>";
std::string line = "";
char delims[] = ":";
char *result = NULL;
+
getline(inputStream, line);
bool start = false;
return newId;
}
+//=========================================================================
+
+void wxVtkSceneManager::DuplicateObjects(std::map<int, GObjectController*> objectsMap) {
+
+ std::map<int, int> oldIdNewIdBoxes;
+ std::vector<int> connections;
+
+ std::vector<int> newBoxesID;
+
+ std::map<int, GObjectController*>::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() {
//=========================================================================
+void wxVtkSceneManager::printAll(int com , int sta ){
+
+ int tmpState = sta ;
+ if ( tmpState == NOTHING_HAPPENS ) {
+ std::cout << "CONTROLER STATE---->NOTHING_HAPPENS\n" ;
+ }
+ if ( tmpState == HIGHLIGHTED ) {
+ std::cout << "CONTROLER STATE---->HIGHLIGHTED\n" ;
+ }
+ if ( tmpState == POSSIBLE_CONNECTION ) {
+ std::cout << "CONTROLER STATE---->POSSIBLE_CONNECTION\n" ;
+ }
+ if ( tmpState == SELECTED_POSSIBLE_CONNECTION ) {
+ std::cout << "CONTROLER STATE---->SELECTED_POSSIBLE_CONNECTION\n" ;
+ }
+ if ( tmpState == CLICKED ) {
+ std::cout << "CONTROLER STATE---->CLICKED\n" ;
+ }
+ if ( tmpState == DRAG ) {
+ std::cout << "CONTROLER STATE---->DRAG\n" ;
+ }
+ if ( tmpState == SELECTED ) {
+ std::cout << "CONTROLER STATE---->SELECTED\n" ;
+ }
+ if ( tmpState == CREATING_CONTOUR ) {
+ std::cout << "CONTROLER STATE---->CREATING_CONTOUR\n" ;
+ }
+
+ // :P
+
+ int command = com ;
+ if ( command == INIT_CREATION_CONTOUR ) {
+ std::cout << "COMMAND ----> INIT_CREATION_CONTOUR \n" ;
+ }
+ if ( command == FIN_CREATION_CONTOUR ) {
+ std::cout << "COMMAND ----> FIN_CREATION_CONTOUR \n" ;
+ }
+ if ( command == ADD_TO_SELECTED ) {
+ std::cout << "COMMAND ----> ADD_TO_SELECTED \n" ;
+ }
+ if ( command == DRAG_OBJECTS ) {
+ std::cout << "COMMAND ----> DRAG_OBJECTS \n" ;
+ }
+ if ( command == EDIT_BLACKBOX ) {
+ std::cout << "COMMAND ----> EDIT_BLACKBOX \n" ;
+ }
+ if ( command == REMOVE_FROM_SELECTED ) {
+ std::cout << "COMMAND ----> REMOVE_FROM_SELECTED \n" ;
+ }
+
+ }
+
+
} // EO namespace bbtk
// EOF