00001 #include "wxMaracasMultipleVolumeRendererPanel.h"
00002 #include "wxMaracasMultipleVolumeRendererView.h"
00003 #include "wxMaracas_N_ViewersWidget.h"
00004 #include "wxMaracasDialog_NViewers.h"
00005 #include "wxMaracasRendererView.h"
00006
00007 #include <wx/colordlg.h>
00008
00009 #include "vtkImageData.h"
00010 #include "vtkRenderer.h"
00011
00012 #include <OpenImage.xpm>
00013 #include <Add.xpm>
00014 #include "Color.xpm"
00015 #include <vector>
00016
00024 wxMaracasMultipleVolumeRendererPanel::wxMaracasMultipleVolumeRendererPanel(wxWindow* parent,int propid, vtkImageData* img, bool _isComplexBox)
00025 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
00026 {
00027 _propid = propid;
00028 isComplexBox = _isComplexBox;
00029
00030 createControls(img);
00031 }
00032
00036 wxMaracasMultipleVolumeRendererPanel::~wxMaracasMultipleVolumeRendererPanel(){
00037
00038
00039
00040
00041
00042 delete mwxwidget;
00043 }
00044
00048 void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
00049
00050 wxFlexGridSizer* sizerirmprop = new wxFlexGridSizer(3);
00051
00052 if(!isComplexBox)
00053 {
00054 wxStaticText* label = new wxStaticText(this, -1, wxString(_T("")));
00055 wxStaticText* label2 = new wxStaticText(this, -1, wxString(_T("")));
00056
00057
00058 checkbox = new wxCheckBox(this,-1,wxString(_T("Show Actor")));
00059 Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange);
00060 checkbox->SetValue(true);
00061
00062 wxString choices[] = {_T("Composite"), _T("MIP")};
00063 _radiobox = new wxRadioBox(this, -1, wxString(_T("Function")), wxDefaultPosition, wxDefaultSize, 2, choices);
00064 Connect(_radiobox->GetId(), wxEVT_COMMAND_RADIOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction);
00065
00066 sizerirmprop->Add(checkbox,wxFIXED_MINSIZE);
00067 sizerirmprop->AddSpacer(5);
00068 sizerirmprop->Add(_radiobox,wxFIXED_MINSIZE);
00069
00070 }
00071
00072
00073
00074
00075 mwxwidget = new HistogramDialogComboBox(this);
00076 mwxwidget->setImageData(img);
00077
00078 Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
00079 sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE);
00080
00081 wxBitmap bitmap0(Add_xpm);
00082 _viewimage = new wxBitmapButton(this, -1, bitmap0, wxDefaultPosition, wxSize(30,30));
00083 Connect(_viewimage->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onViewImage);
00084 sizerirmprop->Add(_viewimage,wxFIXED_MINSIZE);
00085
00086
00087
00088
00089
00090 this->SetSizer(sizerirmprop, true);
00091 this->SetAutoLayout( true );
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 mwxwidget->Refresh();
00144 }
00145
00149 void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){
00150 updateVolume();
00151
00152 }
00153
00157 void wxMaracasMultipleVolumeRendererPanel::onCancel(wxCommandEvent& event){
00158
00159 }
00160
00164 void wxMaracasMultipleVolumeRendererPanel::onUpdate(wxCommandEvent& event){
00165 updateVolume();
00166 }
00167
00171 void wxMaracasMultipleVolumeRendererPanel::updateVolume(){
00172 std::vector<double> greylevelcolors;
00173 std::vector<double> red;
00174 std::vector<double> green;
00175 std::vector<double> blue;
00176
00177 std::vector<double> greylevel;
00178 std::vector<double> values;
00179
00180 mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue);
00181 mwxwidget->GetValuesPointsFunction(greylevel, values);
00182
00183 if(this->isComplexBox)
00184 {
00185 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesColorPointsFunction(this->_propid,greylevelcolors, red, green, blue);
00186 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesPointsFunction(this->_propid, greylevel, values);
00187 }
00188 else
00189 {
00190 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue);
00191 wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values);
00192 }
00193 }
00194
00198 void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){
00199
00200
00201 updateVolume();
00202
00203
00204 }
00205
00209 void wxMaracasMultipleVolumeRendererPanel::onViewImage(wxCommandEvent& event)
00210 {
00211 vtkImageData* img;
00212 std::vector<int> type;
00213 type.push_back(6);
00214
00215 wxFrame* frame = new wxFrame(this, -1, wxString(_T("Volume Visualization")));
00216 frame->SetSize(wxDefaultSize);
00217
00218 if(this->isComplexBox)
00219 {
00220 img = (wxMaracasRendererView::getInstance())->getTabbedPanel(_propid)->getVolImage();
00221 }
00222 else
00223 {
00224 img = wxMaracasMultipleVolumeRendererView::getInstance()->getVolumeRenderManager()->getImageData();
00225 }
00226
00227 wxMaracas_N_ViewersWidget* viewer = new wxMaracas_N_ViewersWidget(frame, img, &type);
00228 frame->Show();
00229 }
00230
00234 void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){
00235 if(this->isComplexBox)
00236 ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->addRemoveActorV(this->getPropId(), checkbox->GetValue());
00237 else
00238 wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue());
00239 }
00240
00244 int wxMaracasMultipleVolumeRendererPanel::getPropId(){
00245 return _propid;
00246 }
00247
00248 void wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction(wxCommandEvent& event){
00249
00250 wxMaracasMultipleVolumeRendererView::getInstance()->changeCompositeMIPFunction(this->getPropId(), _radiobox->GetSelection());
00251 }
00252
00256 HistogramDialogComboBox* wxMaracasMultipleVolumeRendererPanel::getMwxwidget()
00257 {
00258 return mwxwidget;
00259 }
00260