]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbcreaMaracasVisuTransformWidget2.cxx
11f32060a8de680a8af909c9b5fcbf965d24df6c
[creaMaracasVisu.git] / bbtk / src / bbcreaMaracasVisuTransformWidget2.cxx
1 //===== 
2 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
3 //===== 
4 #include "bbcreaMaracasVisuTransformWidget2.h"
5 #include "bbcreaMaracasVisuPackage.h"
6 namespace bbcreaMaracasVisu
7 {
8
9
10 // The widget created by the box
11 class TransformWidgetPanel : public wxPanel
12 {
13 public:
14     TransformWidgetPanel(TransformWidget2* box, wxWindow *parent);
15     ~TransformWidgetPanel();
16     void OnSliderTrackX(wxScrollEvent& event);
17     void OnSliderTrackY(wxScrollEvent& event);
18     void OnSliderTrackZ(wxScrollEvent& event);
19     void OnSliderReleaseX(wxScrollEvent& event);
20     void OnSliderReleaseY(wxScrollEvent& event);
21     void OnSliderReleaseZ(wxScrollEvent& event);
22     void Release( wxSlider * slider );
23     void Track( wxSlider * slider ,int idVector);
24
25 private:
26     TransformWidget2 *mBox;
27     wxSlider        *mSliderRotationX;
28     wxSlider        *mSliderRotationY;
29     wxSlider        *mSliderRotationZ;
30     vtkTransform *t;
31     vtkTransform *tt;
32 };
33 //------------------------------------------------------------------------
34 //------------------------------------------------------------------------
35 //------------------------------------------------------------------------
36
37 TransformWidgetPanel::TransformWidgetPanel(TransformWidget2* box, wxWindow *parent)
38   : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
39   mBox(box)
40 {
41     t   = vtkTransform::New();
42     tt  = NULL;
43     wxSize  sizeSliderWidget(25,25);
44     mSliderRotationX = new wxSlider( this, -1, 0 , -180, 180 , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL, wxDefaultValidator);
45     mSliderRotationY = new wxSlider( this, -1, 0 , -180, 180 , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL, wxDefaultValidator);
46     mSliderRotationZ = new wxSlider( this, -1, 0 , -180, 180 , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL, wxDefaultValidator);
47 //    mSliderRotationX = new wxSlider( this, -1, 0 , -180, 180 , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
48 //    mSliderRotationY = new wxSlider( this, -1, 0 , -180, 180 , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
49 //    mSliderRotationZ = new wxSlider( this, -1, 0 , -180, 180 , wxDefaultPosition,sizeSliderWidget, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
50
51     Connect( mSliderRotationX->GetId(),wxEVT_SCROLL_THUMBRELEASE,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderReleaseX );
52     Connect( mSliderRotationX->GetId(),wxEVT_SCROLL_THUMBTRACK  ,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackX   );
53     Connect( mSliderRotationX->GetId(),wxEVT_SCROLL_CHANGED     ,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackX   );
54     Connect( mSliderRotationY->GetId(),wxEVT_SCROLL_THUMBRELEASE,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderReleaseY );
55     Connect( mSliderRotationY->GetId(),wxEVT_SCROLL_THUMBTRACK  ,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackY   );
56     Connect( mSliderRotationY->GetId(),wxEVT_SCROLL_CHANGED     ,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackY   );
57     Connect( mSliderRotationZ->GetId(),wxEVT_SCROLL_THUMBRELEASE,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderReleaseZ );
58     Connect( mSliderRotationZ->GetId(),wxEVT_SCROLL_THUMBTRACK  ,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackZ   );
59     Connect( mSliderRotationZ->GetId(),wxEVT_SCROLL_CHANGED     ,(wxObjectEventFunction)(void (wxPanel::*)(wxScrollEvent&)) &TransformWidgetPanel::OnSliderTrackZ   );
60     wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
61     sizer->Add( mSliderRotationX,1 );
62     sizer->Add( mSliderRotationY,1 );
63     sizer->Add( mSliderRotationZ,1 );
64     SetSizer(sizer);
65 }
66
67 TransformWidgetPanel::~TransformWidgetPanel()
68 {
69 }
70
71 void TransformWidgetPanel::Release( wxSlider * slider )
72 {
73     slider->SetValue(0);
74     // t = t*tt
75     t->PostMultiply();
76     t->Concatenate ( tt->GetMatrix() );    t->Update();
77     tt->GetMatrix()->Identity();  tt->Update();
78     mBox->bbSetOutputOut( t );
79     mBox->bbSignalOutputModification(std::string("Out"));
80 }
81
82 void TransformWidgetPanel::OnSliderReleaseX(wxScrollEvent& event)
83 {
84     Release( mSliderRotationX );
85 }
86
87 void TransformWidgetPanel::OnSliderReleaseY(wxScrollEvent& event)
88 {
89     Release( mSliderRotationY );
90 }
91
92 void TransformWidgetPanel::OnSliderReleaseZ(wxScrollEvent& event)
93 {
94     Release( mSliderRotationZ );
95 }
96
97 void TransformWidgetPanel::Track( wxSlider *slider, int idVector)
98 {
99     // out = t*tt
100     if (tt!=NULL)
101     {
102         tt->Delete();
103     }
104     vtkMatrix4x4    *tm     = t->GetMatrix();
105     double          tvx    = tm->GetElement(0,idVector);
106     double          tvy    = tm->GetElement(1,idVector);
107     double          tvz    = tm->GetElement(2,idVector);
108     tt = vtkTransform::New();
109     tt->PostMultiply();
110
111     double angle = slider->GetValue()/2;
112     tt->RotateWXYZ( angle , tvx,tvy,tvz);  tt->Update();
113     vtkTransform *result=vtkTransform::New();
114     result->PostMultiply();
115     result->Concatenate ( t->GetMatrix() );    result->Update();
116     result->Concatenate ( tt->GetMatrix() );   result->Update();
117     mBox->bbSetOutputOut( result );
118     mBox->bbSignalOutputModification(std::string("Out"));
119 }
120
121 void TransformWidgetPanel::OnSliderTrackX(wxScrollEvent& event)
122 {
123     Track(mSliderRotationX ,0);
124 }
125
126 void TransformWidgetPanel::OnSliderTrackY(wxScrollEvent& event)
127 {
128     Track(mSliderRotationY ,1);
129 }
130
131 void TransformWidgetPanel::OnSliderTrackZ(wxScrollEvent& event)
132 {
133     Track(mSliderRotationZ ,2);
134 }
135
136
137 //------------------------------------------------------------------------
138 //------------------------------------------------------------------------
139 //------------------------------------------------------------------------
140
141 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,TransformWidget2)
142 BBTK_BLACK_BOX_IMPLEMENTATION(TransformWidget2,bbtk::WxBlackBox);
143 //===== 
144 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
145 //===== 
146 void TransformWidget2::Process()
147 {
148     
149 }
150
151 //===== 
152 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
153 //===== 
154 void TransformWidget2::CreateWidget(wxWindow* parent)
155 {
156    TransformWidgetPanel *w =  new TransformWidgetPanel(this,parent);
157    bbSetOutputWidget( w );
158 }
159
160 //===== 
161 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
162 //===== 
163 void TransformWidget2::bbUserSetDefaultValues()
164 {
165     bbSetInputType(0);
166 }
167
168 //===== 
169 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
170 //===== 
171 void TransformWidget2::bbUserInitializeProcessing()
172 {
173 }
174
175 //===== 
176 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
177 //===== 
178 void TransformWidget2::bbUserFinalizeProcessing()
179 {
180 }
181
182 }// EO namespace bbcreaMaracasVisu
183
184