Changeset e670e4


Ignore:
Timestamp:
Oct 14, 2011, 10:37:32 AM (13 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
23526c
Parents:
9cd6bf
git-author:
Frederik Heber <heber@…> (09/14/11 15:25:14)
git-committer:
Frederik Heber <heber@…> (10/14/11 10:37:32)
Message:

Added Undo/Redo capabilities to BoundInBoxAction.

  • also added regression test.
Files:
4 added
4 edited

Legend:

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

    r9cd6bf re670e4  
    2020#include "CodePatterns/MemDebug.hpp"
    2121
     22#include <boost/shared_ptr.hpp>
     23
    2224#include "CodePatterns/Log.hpp"
    2325#include "molecule.hpp"
     
    4042  getParametersfromValueStorage();
    4143
     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
    4262  // 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) {
    4564    (*MolRunner)->BoundInBox();
    4665  }
    47   return Action::success;
     66  return Action::state_ptr(undoState);
    4867}
    4968
    5069Action::state_ptr WorldBoundInBoxAction::performUndo(Action::state_ptr _state) {
    51 //  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
     70  WorldBoundInBoxState *state = assert_cast<WorldBoundInBoxState*>(_state.get());
    5271
    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);
    5888}
    5989
    6090Action::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);
    62102}
    63103
    64104bool WorldBoundInBoxAction::canUndo() {
    65   return false;
     105  return true;
    66106}
    67107
    68108bool WorldBoundInBoxAction::shouldUndo() {
    69   return false;
     109  return true;
    70110}
    71111/** =========== end of function ====================== */
  • src/Actions/WorldAction/BoundInBoxAction.def

    r9cd6bf re670e4  
    77
    88// all includes and forward declarations necessary for non-integral types below
     9#include <boost/shared_ptr.hpp>
     10#include "LinearAlgebra/Vector.hpp"
    911
    1012
     
    1820#undef paramreferences
    1921
    20 #undef statetypes
    21 #undef statereferences
     22#define statetypes (std::vector< boost::shared_ptr<Vector> >)
     23#define statereferences (OldPositions)
    2224
    2325// some defines for all the names, you may use ACTION, STATE and PARAMS
  • tests/regression/Domain/testsuite-domain.at

    r9cd6bf re670e4  
    33# define box setting
    44m4_include([Domain/ChangeBox/testsuite-domain-change-box.at])
     5
     6# bound atoms in defined domain
     7m4_include([Domain/BoundInBox/testsuite-domain-bound-in-box.at])
    58
    69# center atoms in defined domain
  • tests/regression/Makefile.am

    r9cd6bf re670e4  
    4141        $(srcdir)/Analysis/AngularDipoleCorrelation-DiscreteAngles/testsuite-analysis-angular-dipole-correlation-discrete-angles.at \
    4242        $(srcdir)/Domain/testsuite-domain.at \
     43        $(srcdir)/Domain/BoundInBox/testsuite-domain-bound-in-box.at \
    4344        $(srcdir)/Domain/ChangeBox/testsuite-domain-change-box.at \
    4445        $(srcdir)/Domain/CenterInBox/testsuite-domain-center-in-box.at \
Note: See TracChangeset for help on using the changeset viewer.