Index: trunk/lib/FlairCore/src/OneAxisRotation.cpp
===================================================================
--- trunk/lib/FlairCore/src/OneAxisRotation.cpp	(revision 186)
+++ trunk/lib/FlairCore/src/OneAxisRotation.cpp	(revision 187)
@@ -34,8 +34,7 @@
 template void OneAxisRotation::ComputeRotation(core::Vector3D<double> &) const;
   
-OneAxisRotation::OneAxisRotation(const gui::LayoutPosition *position,
-                                 string name)
+OneAxisRotation::OneAxisRotation(const gui::LayoutPosition *position,string name,RotationType_t rotationType)
     : gui::GroupBox(position, name) {
-  pimpl_ = new OneAxisRotation_impl(this);
+  pimpl_ = new OneAxisRotation_impl(this,(int)rotationType);
 }
 
Index: trunk/lib/FlairCore/src/OneAxisRotation.h
===================================================================
--- trunk/lib/FlairCore/src/OneAxisRotation.h	(revision 186)
+++ trunk/lib/FlairCore/src/OneAxisRotation.h	(revision 187)
@@ -37,5 +37,13 @@
 */
 class OneAxisRotation : public gui::GroupBox {
-public:
+  public:
+  /*!
+  \enum RotationType_t
+  \brief rotation type
+  */
+  enum RotationType_t {
+    PreRotation,//rotation
+    PostRotation//frame change
+  };
   /*!
   * \brief Constructor
@@ -46,5 +54,5 @@
   * \param name name
   */
-  OneAxisRotation(const gui::LayoutPosition *position, std::string namel);
+  OneAxisRotation(const gui::LayoutPosition *position, std::string name,RotationType_t rotationType);
 
   /*!
Index: trunk/lib/FlairCore/src/OneAxisRotation_impl.cpp
===================================================================
--- trunk/lib/FlairCore/src/OneAxisRotation_impl.cpp	(revision 186)
+++ trunk/lib/FlairCore/src/OneAxisRotation_impl.cpp	(revision 187)
@@ -17,4 +17,5 @@
 
 #include "OneAxisRotation_impl.h"
+#include "OneAxisRotation.h"
 #include "GroupBox.h"
 #include "ComboBox.h"
@@ -31,5 +32,5 @@
 template void OneAxisRotation_impl::ComputeRotation(Vector3D<double>&) const;
 
-OneAxisRotation_impl::OneAxisRotation_impl(GroupBox *box) {
+OneAxisRotation_impl::OneAxisRotation_impl(GroupBox *box,int rotationType) {
   rot_value =
       new DoubleSpinBox(box->NewRow(), "value", " deg", -180., 180., 10., 1);
@@ -38,4 +39,5 @@
   rot_axe->AddItem("y");
   rot_axe->AddItem("z");
+  this->rotationType=rotationType;
 }
 
@@ -45,15 +47,19 @@
   Quaternion rot;
   switch (rot_axe->CurrentIndex()) {
-    case 0:
-      rot=Quaternion(cosf(Euler::ToRadian(rot_value->Value()/2)),sinf(Euler::ToRadian(rot_value->Value()/2)), 0,0);
+    case 0://x
+      rot=Quaternion(cosf(Euler::ToRadian(-rot_value->Value()/2)),sinf(Euler::ToRadian(-rot_value->Value()/2)),0,0);
       break;
-    case 1:
-      rot=Quaternion(cosf(Euler::ToRadian(rot_value->Value()/2)),0,sinf(Euler::ToRadian(rot_value->Value()/2)),0);
+    case 1://y
+      rot=Quaternion(cosf(Euler::ToRadian(-rot_value->Value()/2)),0,sinf(Euler::ToRadian(-rot_value->Value()/2)),0);
       break;
-    case 2:
-      rot=Quaternion(cosf(Euler::ToRadian(rot_value->Value()/2)),0,0,sinf(Euler::ToRadian(rot_value->Value()/2)));
+    case 2://z
+      rot=Quaternion(cosf(Euler::ToRadian(-rot_value->Value()/2)),0,0,sinf(Euler::ToRadian(-rot_value->Value()/2)));
       break;
   }
-  quat=quat*rot;
+  if(rotationType==OneAxisRotation::RotationType_t::PreRotation) {
+    quat=rot*quat;
+  } else { //post rotation
+    quat=quat*rot;
+  }
 }
 
Index: trunk/lib/FlairCore/src/unexported/OneAxisRotation_impl.h
===================================================================
--- trunk/lib/FlairCore/src/unexported/OneAxisRotation_impl.h	(revision 186)
+++ trunk/lib/FlairCore/src/unexported/OneAxisRotation_impl.h	(revision 187)
@@ -35,5 +35,5 @@
 class OneAxisRotation_impl {
 public:
-  OneAxisRotation_impl(flair::gui::GroupBox *box);
+  OneAxisRotation_impl(flair::gui::GroupBox *box,int rotationType);
   ~OneAxisRotation_impl();
   template <typename T> void ComputeRotation(flair::core::Vector3D<T> &point) const;
@@ -47,4 +47,5 @@
   flair::gui::ComboBox *rot_axe;
   flair::gui::DoubleSpinBox *rot_value;
+  int rotationType;
 };
 
