1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 # This software is governed by the CeCILL-B license under French law and
10 # abiding by the rules of distribution of free software. You can use,
11 # modify and/ or redistribute the software under the terms of the CeCILL-B
12 # license as circulated by CEA, CNRS and INRIA at the following URL
13 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 # or in the file LICENSE.txt.
16 # As a counterpart to the access to the source code and rights to copy,
17 # modify and redistribute granted by the license, users are provided only
18 # with a limited warranty and the software's author, the holder of the
19 # economic rights, and the successive licensors have only limited
22 # The fact that you are presently reading this means that you have had
23 # knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
26 #include "wxMaracasMultipleVolumeRendererPanel.h"
27 #include "wxMaracasMultipleVolumeRendererView.h"
28 #include "wxMaracas_N_ViewersWidget.h"
29 #include "wxMaracasDialog_NViewers.h"
30 #include "wxMaracasRendererView.h"
32 #include <wx/colordlg.h>
34 #include "vtkImageData.h"
35 #include "vtkRenderer.h"
37 #include <OpenImage.xpm>
41 //#include <vtkImageCast.h>
43 ** Implementation of viewProp3D
49 wxMaracasMultipleVolumeRendererPanel::wxMaracasMultipleVolumeRendererPanel(wxWindow* parent,int propid, vtkImageData* img, bool _isComplexBox)
50 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
53 isComplexBox = _isComplexBox;
61 wxMaracasMultipleVolumeRendererPanel::~wxMaracasMultipleVolumeRendererPanel(){
64 //((wxMaracasRenderTabbedPanel*)(wxMaracasRendererView::getInstance())->getTabbedPanel())->deleteVolume(_propid);
66 //wxMaracasMultipleVolumeRendererView::getInstance()->deleteVolume(_propid);
71 ** Sets panel elements
73 void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
75 wxFlexGridSizer* sizerirmprop = new wxFlexGridSizer(3);
79 // wxStaticText* label = new wxStaticText(this, -1, wxString(_T("")));
80 // wxStaticText* label2 = new wxStaticText(this, -1, wxString(_T("")));
83 checkbox = new wxCheckBox(this,-1,wxString(_T("Show Actor")));
84 Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange);
85 checkbox->SetValue(true);
87 wxString choices[] = {_T("Composite"), _T("MIP")};
88 _radiobox = new wxRadioBox(this, -1, wxString(_T("Function")), wxDefaultPosition, wxDefaultSize, 2, choices);
89 Connect(_radiobox->GetId(), wxEVT_COMMAND_RADIOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction);
91 sizerirmprop->Add(checkbox,wxFIXED_MINSIZE);
92 sizerirmprop->AddSpacer(5);
93 sizerirmprop->Add(_radiobox,wxFIXED_MINSIZE);
94 //sizerirmprop->Add(label2,wxFIXED_MINSIZE);
96 //wxBitmap bitmap(Color_xpm);
97 //_colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30));
98 //Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
100 mwxwidget = new HistogramDialogComboBox(this);
101 mwxwidget->setImageData(img);
102 //mwxwidget->PushEventHandler(this);
103 Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
104 sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE);
106 wxBitmap bitmap0(Add_xpm);
107 _viewimage = new wxBitmapButton(this, -1, bitmap0, wxDefaultPosition, wxSize(30,30));
108 Connect(_viewimage->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onViewImage);
109 sizerirmprop->Add(_viewimage,wxFIXED_MINSIZE);
111 //std::string iconsdir = wxMaracasMultipleVolumeRendererView::getInstance()->getPath();
112 //iconsdir+="/data/Icons/Add.xmp";
113 //wxBitmap* bitmap = new wxBitmap(wxString(iconsdir.c_str(),wxConvUTF8), wxBITMAP_TYPE_XPM);
115 this->SetSizer(sizerirmprop, true);
116 this->SetAutoLayout( true );
118 //_frame = new wxFrame(this, 10, _T("Configure Transfer Functions"));
120 /*wxButton* button1 = new wxButton(_frame,20,_T("OK"));
121 Connect(button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onOK);
122 wxButton* button2 = new wxButton(_frame,30,_T("Cancel") );
123 Connect(button2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCancel);
124 wxButton* button3 = new wxButton(_frame,40,_T("Update"));
125 Connect(button3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onUpdate); */
127 /*mwxwidget->erasePointsTransferenceFunction();
129 img->GetScalarRange(range);
130 double max = range[1];
134 mwxwidget->addPointToTransferenceFunction(max * 0/2,0.0);
135 mwxwidget->addPointToTransferenceFunction(max * 1/2,100.0);
136 mwxwidget->addPointToTransferenceFunction(max * 2/2,100.0);
138 mwxwidget->addColorPoint(max*0/4,(int)(0.0*255),(int)(0.0*255),(int)(0.0*255));
139 mwxwidget->addColorPoint(max*1/4,(int)(1.0*255),(int)(0.0*255),(int)(0.0*255));
140 mwxwidget->addColorPoint(max*2/4,(int)(0.0*255),(int)(0.0*255),(int)(1.0*255));
141 mwxwidget->addColorPoint(max*3/4,(int)(0.0*255),(int)(1.0*255),(int)(0.0*255));
142 mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); */
144 /*wxBoxSizer* boxSizer0 = new wxBoxSizer(wxHORIZONTAL);
145 boxSizer0->Add(mwxwidget, 4, wxGROW);
147 wxBoxSizer* boxSizer = new wxBoxSizer(wxHORIZONTAL);
148 boxSizer->AddSpacer(40);
149 boxSizer->Add(button1, wxCENTER);
150 boxSizer->AddSpacer(40);
151 boxSizer->Add(button2, wxCENTER);
152 boxSizer->AddSpacer(40);
153 boxSizer->Add(button3, wxCENTER);
155 wxBoxSizer* boxsizer2 = new wxBoxSizer(wxVERTICAL);
156 boxsizer2->Add(boxSizer0,1,wxEXPAND);
157 boxsizer2->Add(boxSizer,0,wxCENTER);
159 _frame->SetAutoLayout(true);
162 _frame->SetSizer(boxsizer2);
166 //mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()),
167 // wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId()));
168 mwxwidget->Refresh();
174 void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){
176 //_frame->Show(false);
182 void wxMaracasMultipleVolumeRendererPanel::onCancel(wxCommandEvent& event){
183 //_frame->Show(false);
189 void wxMaracasMultipleVolumeRendererPanel::onUpdate(wxCommandEvent& event){
196 void wxMaracasMultipleVolumeRendererPanel::updateVolume(){
197 std::vector<double> greylevelcolors;
198 std::vector<double> red;
199 std::vector<double> green;
200 std::vector<double> blue;
202 std::vector<double> greylevel;
203 std::vector<double> values;
205 mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue);
206 mwxwidget->GetValuesPointsFunction(greylevel, values);
208 if(this->isComplexBox)
210 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesColorPointsFunction(this->_propid,greylevelcolors, red, green, blue);
211 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesPointsFunction(this->_propid, greylevel, values);
215 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue);
216 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values);
221 ** Updates the volume visualization
223 void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){
225 //if(mwxwidget->ShowModal()==wxID_OK){
227 // mwxwidget->Show(false);
234 void wxMaracasMultipleVolumeRendererPanel::onViewImage(wxCommandEvent& event)
237 std::vector<int> type;
240 wxFrame* frame = new wxFrame(this, -1, wxString(_T("Volume Visualization")));
241 frame->SetSize(wxDefaultSize);
243 if(this->isComplexBox)
245 img = (wxMaracasRendererView::getInstance())->getTabbedPanel(_propid)->getVolImage();
249 img = wxMaracasMultipleVolumeRendererView::getInstance()->getVolumeRenderManager()->getImageData();
252 // wxMaracas_N_ViewersWidget* viewer = new wxMaracas_N_ViewersWidget(frame, img, &type);
253 new wxMaracas_N_ViewersWidget(frame, img, &type);
260 void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){
261 if(this->isComplexBox)
262 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->addRemoveActorV(this->getPropId(), checkbox->GetValue());
264 wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue());
270 int wxMaracasMultipleVolumeRendererPanel::getPropId(){
274 void wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction(wxCommandEvent& event){
276 wxMaracasMultipleVolumeRendererView::getInstance()->changeCompositeMIPFunction(this->getPropId(), _radiobox->GetSelection());
280 ** Carolina Perez: Recently added method
282 HistogramDialogComboBox* wxMaracasMultipleVolumeRendererPanel::getMwxwidget()