]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererPanel.cxx
bbbd73bb962a0e6492e5b717e83fd37a1daae82d
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasMultipleVolumeRendererPanel.cxx
1 #include "wxMaracasMultipleVolumeRendererPanel.h"
2 #include "wxMaracasMultipleVolumeRendererView.h"
3 #include "wxMaracasRendererView.h"
4
5 #include <wx/colordlg.h>
6
7 #include "vtkImageData.h"
8 #include "vtkRenderer.h"
9
10 #include <OpenImage.xpm>
11 #include <Add.xpm>
12 #include "Color.xpm"
13 //#include <vtkImageCast.h>
14 /**
15 **      Implementation of viewProp3D
16 **/
17
18 /**
19 ** Class constructor
20 **/
21 wxMaracasMultipleVolumeRendererPanel::wxMaracasMultipleVolumeRendererPanel(wxWindow* parent,int propid, vtkImageData* img, bool _isComplexBox)
22 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
23 {
24         _propid = propid;
25         isComplexBox = _isComplexBox;
26         
27         createControls(img);
28 }
29
30 /**
31 ** Class destructor
32 **/
33 wxMaracasMultipleVolumeRendererPanel::~wxMaracasMultipleVolumeRendererPanel(){  
34         
35         //if(isComplexBox)
36                 //((wxMaracasRenderTabbedPanel*)(wxMaracasRendererView::getInstance())->getTabbedPanel())->deleteVolume(_propid);
37         //else
38                 //wxMaracasMultipleVolumeRendererView::getInstance()->deleteVolume(_propid);
39         delete mwxwidget;
40 }
41
42 /**
43 ** Sets panel elements
44 **/
45 void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
46
47         wxFlexGridSizer* sizerirmprop = new wxFlexGridSizer(3);
48         
49         if(!isComplexBox)
50         {
51                 wxStaticText* label = new wxStaticText(this, -1, wxString(_T("")));     
52                 wxStaticText* label2 = new wxStaticText(this, -1, wxString(_T("")));
53                 checkbox = new  wxCheckBox(this,-1,wxString(_T("Show Actor")));
54                 Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange);     
55                 checkbox->SetValue(true);       
56
57                 sizerirmprop->Add(checkbox,wxFIXED_MINSIZE);
58                 sizerirmprop->Add(label,wxFIXED_MINSIZE);
59                 sizerirmprop->Add(label2,wxFIXED_MINSIZE);
60         }
61         //wxBitmap bitmap(Color_xpm);
62         //_colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30));  
63         //Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);                    
64
65         mwxwidget = new HistogramDialogComboBox(this);
66         mwxwidget->setImageData(img);
67     //mwxwidget->PushEventHandler(this);
68         Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
69         sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE);   
70
71         wxBitmap bitmap0(Add_xpm);
72         _viewimage = new wxBitmapButton(this, -1, bitmap0, wxDefaultPosition, wxSize(30,30));   
73         Connect(_viewimage->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onViewImage);                  
74         sizerirmprop->Add(_viewimage,wxFIXED_MINSIZE);  
75
76         //std::string iconsdir = wxMaracasMultipleVolumeRendererView::getInstance()->getPath();
77         //iconsdir+="/data/Icons/Add.xmp";
78         //wxBitmap* bitmap = new wxBitmap(wxString(iconsdir.c_str(),wxConvUTF8), wxBITMAP_TYPE_XPM);
79
80         this->SetSizer(sizerirmprop, true);             
81         this->SetAutoLayout( true );
82     
83         //_frame = new wxFrame(this, 10, _T("Configure Transfer Functions"));   
84
85         /*wxButton* button1 = new wxButton(_frame,20,_T("OK"));
86         Connect(button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onOK);                            
87         wxButton* button2 = new wxButton(_frame,30,_T("Cancel") );
88         Connect(button2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCancel);                                
89         wxButton* button3 = new wxButton(_frame,40,_T("Update"));
90         Connect(button3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onUpdate);                                */
91
92         /*mwxwidget->erasePointsTransferenceFunction();
93         double range[2];
94         img->GetScalarRange(range);
95         double max = range[1];
96
97         
98         //X
99         mwxwidget->addPointToTransferenceFunction(max * 0/2,0.0);
100         mwxwidget->addPointToTransferenceFunction(max * 1/2,100.0);
101         mwxwidget->addPointToTransferenceFunction(max * 2/2,100.0);
102
103         mwxwidget->addColorPoint(max*0/4,(int)(0.0*255),(int)(0.0*255),(int)(0.0*255));
104         mwxwidget->addColorPoint(max*1/4,(int)(1.0*255),(int)(0.0*255),(int)(0.0*255));
105         mwxwidget->addColorPoint(max*2/4,(int)(0.0*255),(int)(0.0*255),(int)(1.0*255));
106         mwxwidget->addColorPoint(max*3/4,(int)(0.0*255),(int)(1.0*255),(int)(0.0*255));
107         mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); */
108
109         /*wxBoxSizer* boxSizer0 = new wxBoxSizer(wxHORIZONTAL);
110         boxSizer0->Add(mwxwidget, 4, wxGROW);
111
112         wxBoxSizer* boxSizer = new wxBoxSizer(wxHORIZONTAL);
113         boxSizer->AddSpacer(40);
114         boxSizer->Add(button1, wxCENTER);
115         boxSizer->AddSpacer(40);
116         boxSizer->Add(button2, wxCENTER);
117         boxSizer->AddSpacer(40);
118         boxSizer->Add(button3, wxCENTER);
119
120         wxBoxSizer* boxsizer2 = new wxBoxSizer(wxVERTICAL);
121         boxsizer2->Add(boxSizer0,1,wxEXPAND);   
122         boxsizer2->Add(boxSizer,0,wxCENTER);    
123     
124         _frame->SetAutoLayout(true);
125
126
127     _frame->SetSizer(boxsizer2);
128
129         _frame->Refresh();
130         _frame->Update();*/     
131         //mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()),
132         //                                              wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId()));
133         mwxwidget->Refresh();   
134 }
135
136 /**
137 **
138 **/
139 void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){
140     updateVolume();
141         //_frame->Show(false);
142 }
143
144 /**
145 **
146 **/
147 void wxMaracasMultipleVolumeRendererPanel::onCancel(wxCommandEvent& event){
148         //_frame->Show(false);
149 }
150
151 /**
152 **
153 **/
154 void wxMaracasMultipleVolumeRendererPanel::onUpdate(wxCommandEvent& event){
155         updateVolume();    
156 }
157
158 /**
159 **
160 **/
161 void wxMaracasMultipleVolumeRendererPanel::updateVolume(){
162         std::vector<double> greylevelcolors;
163         std::vector<double> red;
164         std::vector<double> green;
165         std::vector<double> blue;
166
167         std::vector<double> greylevel;
168         std::vector<double> values;
169
170     mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue);
171         mwxwidget->GetValuesPointsFunction(greylevel, values);
172
173         if(this->isComplexBox)
174         {
175                 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesColorPointsFunction(this->_propid,greylevelcolors, red, green, blue);
176                 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesPointsFunction(this->_propid, greylevel, values);
177         }
178         else
179         {       
180                 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue);
181                 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values);
182         }
183 }
184
185 /**
186 ** Updates the volume visualization
187 **/
188 void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){        
189
190         //if(mwxwidget->ShowModal()==wxID_OK){
191         updateVolume();
192         //      mwxwidget->Show(false);
193         //}     
194 }
195
196 /**
197 **
198 **/
199 void wxMaracasMultipleVolumeRendererPanel::onViewImage(wxCommandEvent& event)
200 {       
201         printf("wxMaracasMultipleVolumeRendererPanel->onViewImage: Test View Image /n");
202         vtkImageData* img = (wxMaracasRendererView::getInstance())->getTabbedPanel(_propid)->getVolImage();
203         /*wxMaracasDialog_NViewers* dialog = new wxMaracasDialog_NViewers(this);
204
205         std::vector<int> type;
206         std::vector<int> point;
207
208         type.push_back(6);
209         dialog->SetImage(  );
210         dialog->SetType(type);
211
212         point.clear();
213         point.push_back((int)dialog->GetX());
214         point.push_back((int)dialog->GetY());
215         point.push_back((int)dialog->GetZ());
216
217         wxVtkBaseView *wvbv1 = dialog->GetwxVtkBaseView(1);
218         wxVtkBaseView *wvbv2 = dialog->GetwxVtkBaseView(2);
219         wxVtkBaseView *wvbv3 = dialog->GetwxVtkBaseView(3);
220         wxVtkBaseView *wvbv4 = dialog->GetwxVtkBaseView(4);*/
221 }
222
223 /**
224 **
225 **/
226 void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){     
227         if(this->isComplexBox)
228                 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->addRemoveActorV(this->getPropId(), checkbox->GetValue());
229         else
230                 wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue());    
231 }
232
233 /**
234 ** Gets the propId
235 **/
236 int wxMaracasMultipleVolumeRendererPanel::getPropId(){
237         return _propid;
238 }
239
240 /**
241 ** Carolina Perez: Recently added method
242 **/
243 HistogramDialogComboBox* wxMaracasMultipleVolumeRendererPanel::getMwxwidget()
244 {
245         return mwxwidget;
246 }