Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/WorldAction/CenterInBoxAction.cpp

    r23526c rce7fdc  
    1818#endif
    1919
    20 // include headers that implement a archive in simple text format
    21 #include <boost/archive/text_oarchive.hpp>
    22 #include <boost/archive/text_iarchive.hpp>
    23 #include "boost/serialization/vector.hpp"
    24 
    2520#include "CodePatterns/MemDebug.hpp"
    26 
    27 #include <boost/shared_ptr.hpp>
    2821
    2922#include "Box.hpp"
    3023#include "CodePatterns/Log.hpp"
    31 #include "LinearAlgebra/MatrixContent.hpp"
    3224#include "LinearAlgebra/RealSpaceMatrix.hpp"
    3325#include "molecule.hpp"
     
    3628#include <iostream>
    3729#include <string>
    38 #include <vector>
    3930
    4031#include "Actions/WorldAction/CenterInBoxAction.hpp"
     
    5041  getParametersfromValueStorage();
    5142
    52   // create undo state
    53   std::stringstream undostream;
    54   boost::archive::text_oarchive oa(undostream);
    55   RealSpaceMatrix matrix(World::getInstance().getDomain().getM());
    56   oa << matrix;
    57   std::vector< boost::shared_ptr<Vector> > OldPositions;
    58   std::vector<molecule*> AllMolecules = World::getInstance().getAllMolecules();
    59   for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin();
    60       MolRunner != AllMolecules.end();
    61       ++MolRunner) {
    62     for(molecule::const_iterator AtomRunner = (*MolRunner)->begin();
    63         AtomRunner != (*MolRunner)->end();
    64         ++AtomRunner) {
    65       OldPositions.push_back(
    66           boost::shared_ptr<Vector>(new Vector(
    67               (*AtomRunner)->getPosition()
    68               ))
    69           );
    70     }
    71   }
    72 
    73   // set new domain
    7443  World::getInstance().setDomain(params.cell_size.getM());
    7544
    76   // center atoms
    77   for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin(); MolRunner != AllMolecules.end(); ++MolRunner) {
     45  // center
     46  vector<molecule *> AllMolecules = World::getInstance().getAllMolecules();
     47  for (vector<molecule*>::iterator MolRunner = AllMolecules.begin(); MolRunner != AllMolecules.end(); ++MolRunner) {
    7848    (*MolRunner)->CenterInBox();
    7949  }
     
    8252  LOG(0, "Box domain is now " << World::getInstance().getDomain().getM());
    8353
    84   // create undo state
    85   WorldCenterInBoxState *UndoState =
    86       new WorldCenterInBoxState(
    87           undostream.str(),
    88           OldPositions,
    89           params
    90           );
    91 
    92   return Action::state_ptr(UndoState);
     54  return Action::success;
    9355}
    9456
    9557Action::state_ptr WorldCenterInBoxAction::performUndo(Action::state_ptr _state) {
    96   WorldCenterInBoxState *state = assert_cast<WorldCenterInBoxState*>(_state.get());
     58//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
    9759
    98   // restore domain
    99   RealSpaceMatrix matrix;
    100   std::stringstream undostream(state->undostring);
    101   boost::archive::text_iarchive ia(undostream);
    102   ia >> matrix;
    103   World::getInstance().setDomain(matrix);
    104 
    105   // place atoms on old positions
    106   std::vector< boost::shared_ptr<Vector> >::const_iterator OldPositionsIter = state->OldPositions.begin();
    107   std::vector<molecule*> AllMolecules = World::getInstance().getAllMolecules();
    108   for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin();
    109       MolRunner != AllMolecules.end();
    110       ++MolRunner) {
    111     for(molecule::const_iterator AtomRunner = (*MolRunner)->begin();
    112         AtomRunner != (*MolRunner)->end();
    113         ++AtomRunner) {
    114       ASSERT(OldPositionsIter != state->OldPositions.end(),
    115           "WorldBoundInBoxAction::performUndo() - too few positions stored in UndoState.");
    116       (*AtomRunner)->setPosition(**(OldPositionsIter++));
    117     }
    118   }
    119 
    120   // give final box size
    121   LOG(0, "Box domain restored to " << World::getInstance().getDomain().getM());
    122 
    123   return Action::state_ptr(_state);
     60  return Action::failure;
     61//  string newName = state->mol->getName();
     62//  state->mol->setName(state->lastName);
     63//
     64//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
    12465}
    12566
    12667Action::state_ptr WorldCenterInBoxAction::performRedo(Action::state_ptr _state){
    127   WorldCenterInBoxState *state = assert_cast<WorldCenterInBoxState*>(_state.get());
    128 
    129   // set new domain
    130   World::getInstance().setDomain(state->params.cell_size.getM());
    131 
    132   // center atoms
    133   std::vector<molecule *> AllMolecules = World::getInstance().getAllMolecules();
    134   for (std::vector<molecule*>::iterator MolRunner = AllMolecules.begin(); MolRunner != AllMolecules.end(); ++MolRunner) {
    135     (*MolRunner)->CenterInBox();
    136   }
    137 
    138   // give final box size
    139   LOG(0, "Box domain is again " << World::getInstance().getDomain().getM());
    140 
    141   return Action::state_ptr(_state);
     68  return Action::failure;
    14269}
    14370
    14471bool WorldCenterInBoxAction::canUndo() {
    145   return true;
     72  return false;
    14673}
    14774
    14875bool WorldCenterInBoxAction::shouldUndo() {
    149   return true;
     76  return false;
    15077}
    15178/** =========== end of function ====================== */
Note: See TracChangeset for help on using the changeset viewer.