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