]> Creatis software - creaMaracasVisu.git/blobdiff - bbtk/src/bbcreaMaracasVisuTransformWidget2.cxx
#3533 Update Curent contour and actual point ShowNPoints in Undo Redo
[creaMaracasVisu.git] / bbtk / src / bbcreaMaracasVisuTransformWidget2.cxx
index aed6670333cdec8d69585f2f275feafa99599405..b632bc5ce813667d097345635641540653b42fbe 100644 (file)
@@ -38,6 +38,8 @@ public:
     void OnReset(wxCommandEvent& event);
     void OnMoveDown(wxCommandEvent& event);
     void OnMoveUp(wxCommandEvent& event);
+    void OnMemory(wxCommandEvent& event);
+    void OnMemoryGoBack(wxCommandEvent& event);
     void OnSliderGeneralTrack(wxScrollEvent& event);
     void OnSliderGeneralRelease(wxScrollEvent& event);
     
@@ -48,6 +50,8 @@ private:
     std::vector<double>     mPossiblePoint;
     std::vector<double>     mLastPossiblePoint_localReference;
     std::vector<double>     mActualPoint;
+    std::vector<double>     mMemoryPoint;
+    vtkMatrix4x4            *mMemoryMatrix;
     TransformWidget2        *mBox;
     
     // Type : Module A
@@ -68,8 +72,9 @@ TransformWidgetPanel::TransformWidgetPanel(TransformWidget2* box, wxWindow *pare
   : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
   mBox(box)
 {
-    t                       = vtkTransform::New();
-    tt                      = vtkTransform::New();
+    t                       = vtkTransform::New();   // Transoform activa
+    tt                      = vtkTransform::New();   // Transform temporal para el slider
+    mMemoryMatrix           = vtkMatrix4x4::New();
     mttActualPoint.push_back(0);
     mttActualPoint.push_back(0);
     mttActualPoint.push_back(0);
@@ -113,28 +118,32 @@ TransformWidgetPanel::TransformWidgetPanel(TransformWidget2* box, wxWindow *pare
     
     if (mBox->bbGetInputType()==1)
     {
-        sizeSliderWidget.Set(250,-1    );
-        sizeButton.Set( 45 , -1 );
-        wxRadioButton *rBtnX    = new wxRadioButton( this, -1, _T("ri")         , wxDefaultPosition    , wxDefaultSize , wxRB_GROUP);
-        wxRadioButton *rBtnY    = new wxRadioButton( this, -1, _T("rj")         , wxDefaultPosition    , wxDefaultSize , 0);
-        wxRadioButton *rBtnZ    = new wxRadioButton( this, -1, _T("rk")         , wxDefaultPosition    , wxDefaultSize , 0);
-        wxRadioButton *rBtnC    = new wxRadioButton( this, -1, _T("Cen")        , wxDefaultPosition   , wxDefaultSize , 0);
+        sizeSliderWidget.Set( 160 , -1 );
+        sizeButton.Set( 20 , -1 );
+        wxRadioButton *rBtnX     = new wxRadioButton( this, -1, _T("ri")         , wxDefaultPosition  , wxDefaultSize , wxRB_GROUP   );
+        wxRadioButton *rBtnY     = new wxRadioButton( this, -1, _T("rj")         , wxDefaultPosition  , wxDefaultSize , 0            );
+        wxRadioButton *rBtnZ     = new wxRadioButton( this, -1, _T("rk")         , wxDefaultPosition  , wxDefaultSize , 0            );
+        wxRadioButton *rBtnC     = new wxRadioButton( this, -1, _T("Cen")        , wxDefaultPosition  , wxDefaultSize , 0)           ;
         rBtnC->SetValue(true);        mTool = 3;
-        mSliderGeneral          = new wxSlider     ( this, -1, 0 , -180, 180    , wxDefaultPosition,sizeSliderWidget ,wxSL_HORIZONTAL, wxDefaultValidator                                   );
-        cbLocalReference        = new wxCheckBox   ( this,-1, _T("Loc Ref")     , wxDefaultPosition,wxDefaultSize    ,wxCHK_2STATE | wxALIGN_RIGHT                                          );
-        wxButton *mBtnMoveDown  = new wxButton     ( this, -1, _T("-")          , wxDefaultPosition, sizeButton                                                                             );
-        wxButton *mBtnMoveUp    = new wxButton     ( this, -1, _T("+")          , wxDefaultPosition, sizeButton                                                                             );
-        wxButton *mBtnReset     = new wxButton     ( this, -1, _T("Reset")      , wxDefaultPosition, sizeButton                                                                             );
-        Connect( rBtnX->GetId()         , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonX                );
-        Connect( rBtnY->GetId()         , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonY                );
-        Connect( rBtnZ->GetId()         , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonZ                );
-        Connect( rBtnC->GetId()         , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonN                );
-        Connect(mBtnReset->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnReset                 );
-        Connect(mBtnMoveDown->GetId()   , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMoveDown              );
-        Connect(mBtnMoveUp->GetId()     , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMoveUp                );
-        Connect( mSliderGeneral->GetId(), wxEVT_SCROLL_THUMBRELEASE             , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralRelease  );
-        Connect( mSliderGeneral->GetId(), wxEVT_SCROLL_THUMBTRACK               , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralTrack    );
-        Connect( mSliderGeneral->GetId(), wxEVT_SCROLL_CHANGED                  , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralTrack    );
+        mSliderGeneral           = new wxSlider     ( this, -1, 0 , -180, 180    , wxDefaultPosition,sizeSliderWidget ,wxSL_HORIZONTAL, wxDefaultValidator                                   );
+        cbLocalReference         = new wxCheckBox   ( this,-1, _T("Loc Ref")     , wxDefaultPosition,wxDefaultSize    ,wxCHK_2STATE | wxALIGN_RIGHT                                          );
+        wxButton *BtnMoveDown    = new wxButton     ( this, -1, _T("-")          , wxDefaultPosition, sizeButton                                                                             );
+        wxButton *BtnMoveUp      = new wxButton     ( this, -1, _T("+")          , wxDefaultPosition, sizeButton                                                                             );
+        wxButton *BtnReset       = new wxButton     ( this, -1, _T("Init")      , wxDefaultPosition, sizeButton                                                                             );
+        wxButton *BtnMemory      = new wxButton     ( this, -1, _T("Set")       , wxDefaultPosition, sizeButton                                                                             );
+        wxButton *BtnMemoryGoBack= new wxButton     ( this, -1, _T("Reset")       , wxDefaultPosition, sizeButton                                                                             );
+        Connect( rBtnX->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonX                );
+        Connect( rBtnY->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonY                );
+        Connect( rBtnZ->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonZ                );
+        Connect( rBtnC->GetId()          , wxEVT_COMMAND_RADIOBUTTON_SELECTED    , (wxObjectEventFunction)(void (wxPanel::*)(wxEvent&)) &TransformWidgetPanel::OnRadioButtonN                );
+        Connect( BtnReset->GetId()       , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnReset                 );
+        Connect( BtnMoveDown->GetId()    , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMoveDown              );
+        Connect( BtnMoveUp->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMoveUp                );
+        Connect( BtnMemory->GetId()      , wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMemory                );
+        Connect( BtnMemoryGoBack->GetId(), wxEVT_COMMAND_BUTTON_CLICKED          , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnMemoryGoBack          );
+        Connect( mSliderGeneral->GetId() , wxEVT_SCROLL_THUMBRELEASE             , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralRelease  );
+        Connect( mSliderGeneral->GetId() , wxEVT_SCROLL_THUMBTRACK               , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralTrack    );
+        Connect( mSliderGeneral->GetId() , wxEVT_SCROLL_CHANGED                  , (wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderGeneralTrack    );
         
         wxBoxSizer *sizerA = new wxBoxSizer(wxHORIZONTAL);
         sizerA->Add( rBtnC              , 1 );
@@ -142,12 +151,14 @@ TransformWidgetPanel::TransformWidgetPanel(TransformWidget2* box, wxWindow *pare
         sizerA->Add( rBtnY              , 1 );
         sizerA->Add( rBtnZ              , 1 );
         wxBoxSizer *sizerB = new wxBoxSizer(wxHORIZONTAL);
-        sizerB->Add( mSliderGeneral     , 0 );
+        sizerB->Add( mSliderGeneral     , 1 );
+        sizerB->Add( BtnMoveDown        , 0 );
+        sizerB->Add( BtnMoveUp          , 0 );
         wxBoxSizer *sizerC = new wxBoxSizer(wxHORIZONTAL);
         sizerC->Add( cbLocalReference   , 1 );
-        sizerC->Add( mBtnReset          , 1 );
-        sizerC->Add( mBtnMoveDown       , 1 );
-        sizerC->Add( mBtnMoveUp         , 1 );
+        sizerC->Add( BtnReset           , 1 );
+        sizerC->Add( BtnMemory          , 1 );
+        sizerC->Add( BtnMemoryGoBack    , 1 );
         wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
         sizer->Add( sizerA              , 0 );
         sizer->Add( sizerB              , 0 );
@@ -374,6 +385,27 @@ void TransformWidgetPanel::OnMoveUp(wxCommandEvent& event)
     } // if mTool == 3
 }
 
+void TransformWidgetPanel::OnMemory(wxCommandEvent& event)
+{
+    mMemoryPoint            = mActualPoint;
+    mMemoryMatrix->DeepCopy( t->GetMatrix() );
+}
+
+void TransformWidgetPanel::OnMemoryGoBack(wxCommandEvent& event)
+{
+    mActualPoint = mMemoryPoint;
+    t->GetMatrix()->Identity();
+    vtkMatrix4x4 *m = vtkMatrix4x4::New();
+    m->DeepCopy( mMemoryMatrix );
+    t->SetMatrix( m );
+    mBox->bbSetOutputActualPoint( mActualPoint );
+    mBox->bbSignalOutputModification(std::string("ActualPoint"));
+    mBox->bbSetOutputOut( t );
+    mBox->bbSignalOutputModification(std::string("Out"));
+}
+
+
+
 void TransformWidgetPanel::OnSliderGeneralRelease(wxScrollEvent& event)
 {
     if ((mTool>=0) && (mTool<=2))