- 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 1 8 /* 2 9 * TranslateAction.cpp … … 5 12 * Author: heber 6 13 */ 14 15 // include config.h 16 #ifdef HAVE_CONFIG_H 17 #include <config.h> 18 #endif 7 19 8 20 #include "Helpers/MemDebug.hpp" … … 32 44 class AtomTranslateState : public ActionState { 33 45 public: 34 AtomTranslateState( std::vector<atom*> _selectedAtoms, Vector &_v) :46 AtomTranslateState(const std::vector<atom*> &_selectedAtoms, const Vector &_v, const bool _periodic) : 35 47 selectedAtoms(_selectedAtoms), 36 v(_v) 48 v(_v), 49 periodic(_periodic) 37 50 {} 38 51 std::vector<atom*> selectedAtoms; 39 52 Vector v; 53 bool periodic; 40 54 }; 41 55 … … 49 63 {} 50 64 51 void AtomTranslate(Vector &x ) {65 void AtomTranslate(Vector &x, bool periodic = false) { 52 66 ValueStorage::getInstance().setCurrentValue(AtomTranslateAction::NAME, x); 67 ValueStorage::getInstance().setCurrentValue("periodic", periodic); 53 68 ActionRegistry::getInstance().getActionByName(AtomTranslateAction::NAME)->call(Action::NonInteractive); 54 69 }; … … 58 73 59 74 dialog->queryVector(NAME, false, ValueStorage::getInstance().getDescription(NAME)); 75 dialog->queryBoolean("periodic", ValueStorage::getInstance().getDescription("periodic")); 60 76 61 77 return dialog; … … 64 80 Action::state_ptr AtomTranslateAction::performCall() { 65 81 Vector v; 82 bool periodic = false; 83 Box &domain = World::getInstance().getDomain(); 66 84 std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms(); 67 85 68 86 ValueStorage::getInstance().queryCurrentValue(NAME, v); 87 if (!ValueStorage::getInstance().queryCurrentValue("periodic", periodic, true)) 88 periodic = false; 69 89 70 90 // TODO: use AtomSet::translate 71 91 for (std::vector<atom *>::iterator iter = selectedAtoms.begin(); iter != selectedAtoms.end(); ++iter) { 72 92 *(*iter) += v; 93 if (periodic) 94 (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition())); 73 95 } 74 return Action::state_ptr(new AtomTranslateState(selectedAtoms, v)); 96 97 return Action::state_ptr(new AtomTranslateState(selectedAtoms, v, periodic)); 75 98 } 76 99 77 100 Action::state_ptr AtomTranslateAction::performUndo(Action::state_ptr _state) { 78 101 AtomTranslateState *state = assert_cast<AtomTranslateState*>(_state.get()); 102 Box &domain = World::getInstance().getDomain(); 79 103 80 104 for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) { 81 105 *(*iter) -= state->v; 106 if (state->periodic) 107 (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition())); 82 108 } 83 109 84 return Action::state_ptr( new AtomTranslateState(state->selectedAtoms, state->v));110 return Action::state_ptr(_state); 85 111 } 86 112 87 113 Action::state_ptr AtomTranslateAction::performRedo(Action::state_ptr _state){ 88 114 AtomTranslateState *state = assert_cast<AtomTranslateState*>(_state.get()); 115 Box &domain = World::getInstance().getDomain(); 89 116 90 117 for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) { 91 118 *(*iter) += state->v; 119 if (state->periodic) 120 (*iter)->setPosition(domain.WrapPeriodically((*iter)->getPosition())); 92 121 } 93 122 94 return Action::state_ptr( new AtomTranslateState(state->selectedAtoms, state->v));123 return Action::state_ptr(_state); 95 124 } 96 125
Note:
See TracChangeset
for help on using the changeset viewer.