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