Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/Actions/AtomAction/TranslateAction.cpp

    r34c338 rbcf653  
     1/*
     2 * Project: MoleCuilder
     3 * Description: creates and alters molecular systems
     4 * Copyright (C)  2010 University of Bonn. All rights reserved.
     5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
     6 */
     7
    18/*
    29 * TranslateAction.cpp
     
    512 *      Author: heber
    613 */
     14
     15// include config.h
     16#ifdef HAVE_CONFIG_H
     17#include <config.h>
     18#endif
    719
    820#include "Helpers/MemDebug.hpp"
     
    3244class AtomTranslateState : public ActionState {
    3345public:
    34   AtomTranslateState(std::vector<atom*> _selectedAtoms, Vector &_v) :
     46  AtomTranslateState(const std::vector<atom*> &_selectedAtoms, const Vector &_v, const bool _periodic) :
    3547    selectedAtoms(_selectedAtoms),
    36     v(_v)
     48    v(_v),
     49    periodic(_periodic)
    3750  {}
    3851  std::vector<atom*> selectedAtoms;
    3952  Vector v;
     53  bool periodic;
    4054};
    4155
     
    4963{}
    5064
    51 void AtomTranslate(Vector &x) {
     65void AtomTranslate(Vector &x, bool periodic = false) {
    5266  ValueStorage::getInstance().setCurrentValue(AtomTranslateAction::NAME, x);
     67  ValueStorage::getInstance().setCurrentValue("periodic", periodic);
    5368  ActionRegistry::getInstance().getActionByName(AtomTranslateAction::NAME)->call(Action::NonInteractive);
    5469};
     
    5873
    5974  dialog->queryVector(NAME, false, ValueStorage::getInstance().getDescription(NAME));
     75  dialog->queryBoolean("periodic", ValueStorage::getInstance().getDescription("periodic"));
    6076
    6177  return dialog;
     
    6480Action::state_ptr AtomTranslateAction::performCall() {
    6581  Vector v;
     82  bool periodic = false;
     83  Box &domain = World::getInstance().getDomain();
    6684  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
    6785
    6886  ValueStorage::getInstance().queryCurrentValue(NAME, v);
     87  if (!ValueStorage::getInstance().queryCurrentValue("periodic", periodic, true))
     88    periodic = false;
    6989
    7090  // TODO: use AtomSet::translate
    7191  for (std::vector<atom *>::iterator iter = selectedAtoms.begin(); iter != selectedAtoms.end(); ++iter) {
    7292    *(*iter) += v;
     93    if (periodic)
     94      (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition()));
    7395  }
    74   return Action::state_ptr(new AtomTranslateState(selectedAtoms, v));
     96
     97  return Action::state_ptr(new AtomTranslateState(selectedAtoms, v, periodic));
    7598}
    7699
    77100Action::state_ptr AtomTranslateAction::performUndo(Action::state_ptr _state) {
    78101  AtomTranslateState *state = assert_cast<AtomTranslateState*>(_state.get());
     102  Box &domain = World::getInstance().getDomain();
    79103
    80104  for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
    81105    *(*iter) -= state->v;
     106    if (state->periodic)
     107      (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition()));
    82108  }
    83109
    84   return Action::state_ptr(new AtomTranslateState(state->selectedAtoms, state->v));
     110  return Action::state_ptr(_state);
    85111}
    86112
    87113Action::state_ptr AtomTranslateAction::performRedo(Action::state_ptr _state){
    88114  AtomTranslateState *state = assert_cast<AtomTranslateState*>(_state.get());
     115  Box &domain = World::getInstance().getDomain();
    89116
    90117  for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
    91118    *(*iter) += state->v;
     119    if (state->periodic)
     120      (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition()));
    92121  }
    93122
    94   return Action::state_ptr(new AtomTranslateState(state->selectedAtoms, state->v));
     123  return Action::state_ptr(_state);
    95124}
    96125
Note: See TracChangeset for help on using the changeset viewer.