- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/WorldAction/BoundInBoxAction.cpp
rce7fdc re670e4 20 20 #include "CodePatterns/MemDebug.hpp" 21 21 22 #include <boost/shared_ptr.hpp> 23 22 24 #include "CodePatterns/Log.hpp" 23 25 #include "molecule.hpp" … … 40 42 getParametersfromValueStorage(); 41 43 44 // create undo state 45 std::vector< boost::shared_ptr<Vector> > OldPositions; 46 std::vector<molecule*> AllMolecules = World::getInstance().getAllMolecules(); 47 for (vector<molecule*>::iterator MolRunner = AllMolecules.begin(); 48 MolRunner != AllMolecules.end(); 49 ++MolRunner) { 50 for(molecule::const_iterator AtomRunner = (*MolRunner)->begin(); 51 AtomRunner != (*MolRunner)->end(); 52 ++AtomRunner) { 53 OldPositions.push_back( 54 boost::shared_ptr<Vector>(new Vector( 55 (*AtomRunner)->getPosition() 56 )) 57 ); 58 } 59 } 60 WorldBoundInBoxState *undoState = new WorldBoundInBoxState(OldPositions, params); 61 42 62 // center 43 vector<molecule*> AllMolecules = World::getInstance().getAllMolecules(); 44 for (vector<molecule*>::iterator MolRunner = AllMolecules.begin(); MolRunner != AllMolecules.end(); ++MolRunner) { 63 for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin(); MolRunner != AllMolecules.end(); ++MolRunner) { 45 64 (*MolRunner)->BoundInBox(); 46 65 } 47 return Action::s uccess;66 return Action::state_ptr(undoState); 48 67 } 49 68 50 69 Action::state_ptr WorldBoundInBoxAction::performUndo(Action::state_ptr _state) { 51 // ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());70 WorldBoundInBoxState *state = assert_cast<WorldBoundInBoxState*>(_state.get()); 52 71 53 return Action::failure; 54 // string newName = state->mol->getName(); 55 // state->mol->setName(state->lastName); 56 // 57 // return Action::state_ptr(new ParserLoadXyzState(state->mol,newName)); 72 // place atoms on old positions 73 std::vector< boost::shared_ptr<Vector> >::const_iterator OldPositionsIter = state->OldPositions.begin(); 74 std::vector<molecule*> AllMolecules = World::getInstance().getAllMolecules(); 75 for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin(); 76 MolRunner != AllMolecules.end(); 77 ++MolRunner) { 78 for(molecule::const_iterator AtomRunner = (*MolRunner)->begin(); 79 AtomRunner != (*MolRunner)->end(); 80 ++AtomRunner) { 81 ASSERT(OldPositionsIter != state->OldPositions.end(), 82 "WorldBoundInBoxAction::performUndo() - too few positions stored in UndoState."); 83 (*AtomRunner)->setPosition(**(OldPositionsIter++)); 84 } 85 } 86 87 return Action::state_ptr(_state); 58 88 } 59 89 60 90 Action::state_ptr WorldBoundInBoxAction::performRedo(Action::state_ptr _state){ 61 return Action::failure; 91 // WorldBoundInBoxState *state = assert_cast<WorldBoundInBoxState*>(_state.get()); 92 93 // center 94 std::vector<molecule*> AllMolecules = World::getInstance().getAllMolecules(); 95 for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin(); 96 MolRunner != AllMolecules.end(); 97 ++MolRunner) { 98 (*MolRunner)->BoundInBox(); 99 } 100 101 return Action::state_ptr(_state); 62 102 } 63 103 64 104 bool WorldBoundInBoxAction::canUndo() { 65 return false;105 return true; 66 106 } 67 107 68 108 bool WorldBoundInBoxAction::shouldUndo() { 69 return false;109 return true; 70 110 } 71 111 /** =========== end of function ====================== */
Note:
See TracChangeset
for help on using the changeset viewer.