#include "wxMaracasRenderImageManagementPanel.h" #include /** ** Class constructor **/ wxMaracasRenderImageManagementPanel::wxMaracasRenderImageManagementPanel(wxWindow* parent, wxMaracasMultipleVolumeRendererManager* _vol, wxMaracasSurfaceRenderingManager* _surface1, wxMaracasSurfaceRenderingManager* _surface2, wxMaracasSurfaceRenderingManager* _surface3, int id) : wxDialog(parent, -1, _T("Image Position Parameters"), wxDefaultPosition, wxDefaultSize, wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE) { vol = _vol; surface1 = _surface1; surface2 = _surface2; surface3 = _surface3; propID = id; transformV = vtkTransform::New(); //vtkMatrix4x4 *_matrixV = vtkMatrix4x4::New(); //_matrixV->Identity(); //transformV->SetMatrix(_matrixV); //transformV->SetInput(vol->getViewData(propID)->getProp3D()->GetUserTransform()); transformS1 = vtkTransform::New(); //vtkMatrix4x4 *_matrixS1 = vtkMatrix4x4::New(); //_matrixS1->Identity(); //transformS1->SetMatrix(_matrixS1); //transformS1->SetInput(surface1->getViewData(propID)->getProp3D()->GetUserTransform()); transformS2 = vtkTransform::New(); //vtkMatrix4x4 *_matrixS2 = vtkMatrix4x4::New(); //_matrixS2->Identity(); //transformS2->SetMatrix(_matrixS2); //transformS2->SetInput(surface2->getViewData(propID)->getProp3D()->GetUserTransform()); transformS3 = vtkTransform::New(); //vtkMatrix4x4 *_matrixS3 = vtkMatrix4x4::New(); //_matrixS3->Identity(); //transformS3->SetMatrix(_matrixS3); //transformS3->SetInput(surface3->getViewData(propID)->getProp3D()->GetUserTransform()); createControls(); } /** ** **/ void wxMaracasRenderImageManagementPanel::createControls() { wxFlexGridSizer* sizersliders = new wxFlexGridSizer(1); wxStaticText* tx = new wxStaticText(this, -1, wxString(_T(" Translate X "))); sliderTranslateX = new wxSlider(this, -1, 0, -200, 200, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderTranslateX->SetLineSize(1); Connect(sliderTranslateX->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Translate); sizersliders->Add(tx, wxFIXED_MINSIZE); sizersliders->Add(sliderTranslateX,wxSizerFlags().Expand().Center()); wxStaticText* ty = new wxStaticText(this, -1, wxString(_T(" Translate Y "))); sliderTranslateY = new wxSlider(this, -1, 0, -200, 200, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderTranslateY->SetLineSize(1); Connect(sliderTranslateY->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Translate); sizersliders->Add(ty, wxFIXED_MINSIZE); sizersliders->Add(sliderTranslateY,wxSizerFlags().Expand().Center()); wxStaticText* tz = new wxStaticText(this, -1, wxString(_T(" Translate Z "))); sliderTranslateZ = new wxSlider(this, -1, 0, -200, 200, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderTranslateZ->SetLineSize(1); Connect(sliderTranslateZ->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Translate); sizersliders->Add(tz, wxFIXED_MINSIZE); sizersliders->Add(sliderTranslateZ,wxSizerFlags().Expand().Center()); wxStaticText* rx = new wxStaticText(this, -1, wxString(_T(" Rotate X "))); sliderRotateX = new wxSlider(this, -1, 0, -360, 360, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderRotateX->SetLineSize(1); Connect(sliderRotateX->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Rotate); sizersliders->Add(rx, wxFIXED_MINSIZE); sizersliders->Add(sliderRotateX,wxSizerFlags().Expand().Center()); wxStaticText* ry = new wxStaticText(this, -1, wxString(_T(" Rotate Y "))); sliderRotateY = new wxSlider(this, -1, 0, -360, 360, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderRotateY->SetLineSize(1); Connect(sliderRotateY->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Rotate); sizersliders->Add(ry, wxFIXED_MINSIZE); sizersliders->Add(sliderRotateY,wxSizerFlags().Expand().Center()); wxStaticText* rz = new wxStaticText(this, -1, wxString(_T(" Rotate Z "))); sliderRotateZ = new wxSlider(this, -1, 0, -360, 360, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderRotateZ->SetLineSize(1); Connect(sliderRotateZ->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Rotate); sizersliders->Add(rz, wxFIXED_MINSIZE); sizersliders->Add(sliderRotateZ,wxSizerFlags().Expand().Center()); wxStaticText* sx = new wxStaticText(this, -1, wxString(_T(" Scale X "))); sliderScaleX = new wxSlider(this, -1, 0, -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderScaleX->SetLineSize(1); Connect(sliderScaleX->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Scale); sizersliders->Add(sx, wxFIXED_MINSIZE); sizersliders->Add(sliderScaleX,wxSizerFlags().Expand().Center()); wxStaticText* sy = new wxStaticText(this, -1, wxString(_T(" Scale Y "))); sliderScaleY = new wxSlider(this, -1, 0, -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); sliderScaleY->SetLineSize(1); Connect(sliderScaleY->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Scale); sizersliders->Add(sy, wxFIXED_MINSIZE); sizersliders->Add(sliderScaleY,wxSizerFlags().Expand().Center()); wxStaticText* sz = new wxStaticText(this, -1, wxString(_T(" Scale Z "))); sliderScaleZ = new wxSlider(this, -1, 0, -100, 100, wxDefaultPosition, this->GetSize(), wxSL_LABELS); sliderScaleZ->SetLineSize(1); Connect(sliderScaleZ->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&wxMaracasRenderImageManagementPanel::Scale); sizersliders->Add(sz, wxFIXED_MINSIZE); sizersliders->Add(sliderScaleZ,wxSizerFlags().Expand().Center()); //ATENTION!! A SUPRIMER LES LIGNES ON BAS SI ELES NE SONT PAS NECESSAIRES!! /* //wxString choices[2]; //choices[0] = wxString(_T("On")); //choices[1] = wxString(_T("Off")); checkboxSA = new wxCheckBox(this,-1,wxString(_T("Surface Rendering A"))); Connect(checkboxSA->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSAChange); checkboxSA->SetValue(true); sizercheck->Add(checkboxSA, wxFIXED_MINSIZE); //wxString choices[2]; //choices[0] = wxString(_T("On")); //choices[1] = wxString(_T("Off")); checkboxSB = new wxCheckBox(this,-1,wxString(_T("Surface Rendering B"))); Connect(checkboxSB->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSBChange); checkboxSB->SetValue(true); sizercheck->Add(checkboxSB, wxFIXED_MINSIZE); //wxString choices[2]; //choices[0] = wxString(_T("On")); //choices[1] = wxString(_T("Off")); checkboxSC = new wxCheckBox(this,-1,wxString(_T("Surface Rendering C"))); Connect(checkboxSC->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasRenderTabbedPanel::onCheckBoxSCChange); checkboxSC->SetValue(true); sizercheck->Add(checkboxSC, wxFIXED_MINSIZE); sizerrenderprop->Add(sizercheck, wxFIXED_MINSIZE);*/ this->SetSizer(sizersliders, true); this->SetAutoLayout(true); } /** ** Class destructor **/ wxMaracasRenderImageManagementPanel::~wxMaracasRenderImageManagementPanel() { } /** ** Transforms a volume by the given value for the X axis **/ void wxMaracasRenderImageManagementPanel::Translate(wxCommandEvent& event) { printf("silder translateX = %d \n", sliderTranslateX->GetValue()); transformV->Identity(); transformS1->Identity(); transformS2->Identity(); transformS3->Identity(); transformV->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue()); transformS1->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue()); transformS2->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue()); transformS3->Translate(sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue()); Refresh(); } /** ** Rotates a volume by the given degree for the X axis **/ void wxMaracasRenderImageManagementPanel::Rotate(wxCommandEvent& event) { printf("silder rotateX = %d \n", sliderRotateX->GetValue()); transformV->Identity(); transformS1->Identity(); transformS2->Identity(); transformS3->Identity(); transformS1->RotateX( sliderRotateX->GetValue() ); transformS2->RotateX( sliderRotateX->GetValue() ); transformS3->RotateX( sliderRotateX->GetValue() ); transformV->RotateY( sliderRotateY->GetValue() ); transformS1->RotateY( sliderRotateY->GetValue() ); transformS2->RotateY( sliderRotateY->GetValue() ); transformS3->RotateY( sliderRotateY->GetValue() ); transformV->RotateZ( sliderRotateZ->GetValue() ); transformS1->RotateZ( sliderRotateZ->GetValue() ); transformS2->RotateZ( sliderRotateZ->GetValue() ); transformS3->RotateZ( sliderRotateZ->GetValue() ); Refresh(); } /** ** Scales a volume by the given value for the X axis **/ void wxMaracasRenderImageManagementPanel::Scale(wxCommandEvent& event) { transformV->Identity(); transformS1->Identity(); transformS2->Identity(); transformS3->Identity(); transformV->Scale( sliderTranslateX->GetValue()/50, sliderTranslateY->GetValue()/50, sliderTranslateZ->GetValue()/50 ); transformS1->Scale( sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue() ); transformS2->Scale( sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue() ); transformS3->Scale( sliderTranslateX->GetValue(), sliderTranslateY->GetValue(), sliderTranslateZ->GetValue() ); Refresh(); } void wxMaracasRenderImageManagementPanel::Refresh() { try{ transformV->Update(); transformS1->Update(); transformS2->Update(); transformS3->Update(); vol->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix()); surface1->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix()); surface2->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix()); surface3->getViewData(propID)->getProp3D()->SetUserMatrix(transformV->GetMatrix()); } catch(char* str) { std::cout << "Exception : " << str << '\n'; wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); diag->ShowModal(); } }