wxMPRWidget.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   wxMaracas
00004   Module:    $RCSfile: wxMPRWidget.cxx,v $
00005   Language:  C++
00006   Date:      $Date: 2010/03/17 16:52:51 $
00007   Version:   $Revision: 1.16 $
00008 
00009   Copyright: (c) 2002, 2003
00010   License:
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014      PURPOSE.  See the above copyright notice for more information.
00015 
00016 =========================================================================*/
00017 
00018 
00019 #include <vtkObjectFactory.h>
00020 #include <vtkInteractorStyleSwitch.h>
00021 #include <vtkCamera.h>
00022 #include <vtkImageActor.h>
00023 #include <vtkRenderer.h>
00024 #include <vtkRenderWindowInteractor.h>
00025 #include <vtkRenderWindow.h>
00026 
00027 #include <vtkRenderer.h>
00028 #include <vtkImageViewer2.h> 
00029 #include <vtkInteractorStyleImage.h> 
00030 
00031 #include <vtkProperty.h> 
00032 #include <vtkPolyData.h> 
00033 #include <vtkDataSet.h> 
00034 #include <vtkStripper.h>
00035 #include <vtkCellArray.h> 
00036 #include <vtkPointData.h> 
00037 #include <vtkInteractorStyleTrackballCamera.h>
00038 
00039 #include <vtkPlanes.h>
00040 #include <vtkProbeFilter.h>
00041 #include <vtkPlane.h>
00042 #include <vtkPointPicker.h>
00043 
00044 
00045 #include "vtkClosePolyData.h"
00046 #include <vtkTriangleFilter.h>
00047 #include <vtkSTLWriter.h>
00048 #include <vtkPolyDataConnectivityFilter.h>
00049 
00050 // EED 25 Janvier 2007  -  TestLoic
00051 #include <vtkCutter.h>
00052 #include <vtkWindowLevelLookupTable.h>
00053 #include <vtkLookupTable.h>
00054 #include <vtkMetaImageWriter.h>
00055 
00056 
00057 
00058 #include "wxMPRWidget.h"
00059 #include "wxVTKRenderWindowInteractor.h"
00060 #include "UtilVtk3DGeometriSelection.h"
00061 #include "../kernel/marDicomBase.h"
00062 
00063 
00064 #include <wx/wx.h>
00065 #include <wx/notebook.h>
00066 #include <wx/colordlg.h>
00067 
00068 #include "matrix.h"
00069 #include <string>
00070 #include <stdio.h>
00071 
00072 
00073 
00074 #include "pPlotter/HistogramDialog.h"
00075 
00076 #include "vtkInteractorStyle3DView.h"
00077 
00078 //-------------------------------------------------------------------
00079 //-------------------------------------------------------------------
00080 //-------------------------------------------------------------------
00081 
00082 
00083 
00084 //-------------------------------------------------------------------
00085 //-------------------------------------------------------------------
00086 //-------------------------------------------------------------------
00087 
00088 BEGIN_EVENT_TABLE( wxMPRWidget, wxPanel )
00089         EVT_MENU( 12121, wxMPRWidget::OnRefreshView )
00090         EVT_MENU( 12122, wxMPRWidget::OnDClickLeft  )
00091 END_EVENT_TABLE( );
00092 
00093 
00094 
00095 wxMPRWidget::wxMPRWidget( wxWindow* parent,
00096                           marImageData *marimageData , double voxelSize)
00097 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
00098 {
00099 
00100         _vtkmpr2Dview[0]                                = NULL;
00101         _vtkmpr2Dview[1]                                = NULL;
00102         _vtkmpr2Dview[2]                                = NULL;
00103         _vtkplane2Dview                                 = NULL;
00104         _widgetMesure                                   = NULL;
00105         _wxsphereview                                   = NULL;
00106         _wxvtk3Dbaseview_MPRClipping3D  = NULL;
00107         _wxvtkmpr3Dview                                 = NULL;
00108         _wxvtkclipping3Dview                    = NULL;
00109         _vtkplane2Dview_B                               = NULL;
00110         _widgetMesure_B                                 = NULL;
00111 
00112         _vtkmpr2Dview_B[0]                              = NULL;
00113         _vtkmpr2Dview_B[1]                              = NULL;
00114         _vtkmpr2Dview_B[2]                              = NULL;
00115         _vtkplane2Dview_B                               = NULL;
00116         _widgetMesure_B                                 = NULL;
00117         _wxsphereview_B                                 = NULL;
00118         _wxvtk3Dbaseview_MPR3D_B                = NULL;
00119         _wxvtkmpr3Dview_B                               = NULL;
00120         _wxvtk3Dbaseview_Clipping3D_BB  = NULL;
00121         _wxvtkmpr3Dview_BB                              = NULL;
00122         _wxvtkclipping3Dview_BB                 = NULL;
00123 
00124         _vtkmprbasedata                                 = NULL;
00125 
00126 
00127         
00128         _framePanelCutting                              = NULL; 
00129         _panelCutting                                   = NULL;
00130 
00131 
00132         wxBoxSizer                      *sizer          = new wxBoxSizer(wxVERTICAL  );
00133         _marImageData=NULL;
00134 
00135         if(marimageData!=NULL){
00136                 _marImageData                                   = marimageData;
00137                 _voxelSize                                              = voxelSize;
00138                 _vtkmprbasedata                                 = new vtkMPRBaseData(); 
00139                 _vtkmprbasedata->SetMarImageData(_marImageData);
00140                 
00141                 
00142                 
00143 
00144                 wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
00145                 pnlSplitter     -> SetMinimumPaneSize( 2 );
00146 
00147                 wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
00148                 wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);      
00149                 pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
00150 
00151                 sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
00152 
00153         }          
00154 
00155         //int ww,hh;
00156         //wxWindow *pp=this;
00157         //while (pp->GetParent()!=NULL) pp=pp->GetParent();
00158         //pp->GetSize(&ww,&hh);
00159         
00160         this            -> SetAutoLayout( true );
00161         this            -> SetSizer(sizer);
00162 //      sizer           ->      Fit( this );
00163         _refreshAPage=0;
00164         _refreshBPage=0;
00165 
00166 }
00167 void wxMPRWidget::setImageData(vtkImageData * img, double voxelsize){
00168 
00169         if(_marImageData!=NULL){
00170                 _marImageData->removeImageData(0);
00171                 _marImageData->AddImageData(img);               
00172         }else{
00173                 _marImageData = new marImageData(img);
00174         }
00175         
00176         _voxelSize                                              = voxelsize;
00177 
00178         if(_vtkmprbasedata==NULL){
00179                 _vtkmprbasedata                                 = new vtkMPRBaseData(); 
00180                 _vtkmprbasedata->SetMarImageData(_marImageData);        
00181 
00182                 wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
00183                 pnlSplitter     -> SetMinimumPaneSize( 2 );
00184 
00185                 wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
00186                 wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);      
00187                 pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
00188 
00189                 this->GetSizer()                -> Add( pnlSplitter ,1,wxGROW  ,0);
00190         }       
00191         
00192 
00193         
00194 }
00195 //----------------------------------------------------------------------------
00196 
00197 wxMPRWidget::~wxMPRWidget( )
00198 {
00199 //EEDxx2.4 DELETE
00200         if (_framePanelCutting!=NULL)
00201         {
00202                 _framePanelCutting->Close();
00203         }
00204 
00205         if (_vtkmpr2Dview[0]!=NULL)                                     { delete _vtkmpr2Dview[0]; }
00206         if (_vtkmpr2Dview[1]!=NULL)                                     { delete _vtkmpr2Dview[1]; }
00207         if (_vtkmpr2Dview[2]!=NULL)                                     { delete _vtkmpr2Dview[2]; }
00208 
00209         if (_vtkmpr2Dview_B[0]!=NULL)                           { delete _vtkmpr2Dview_B[0]; }
00210 
00211         if (_vtkmpr2Dview_B[1]!=NULL)                           { delete _vtkmpr2Dview_B[1]; }
00212         if (_vtkmpr2Dview_B[2]!=NULL)                           { delete _vtkmpr2Dview_B[2]; }
00213 
00214         if (_vtkmprbasedata!=NULL)                                      { delete _vtkmprbasedata; }
00215         if (_vtkplane2Dview!=NULL)                                      { delete _vtkplane2Dview; }
00216         if (_wxsphereview!=NULL)                                        { delete _wxsphereview; }
00217         if (_wxvtk3Dbaseview_MPRClipping3D!=NULL)       { delete _wxvtk3Dbaseview_MPRClipping3D; }
00218         if (_wxvtkmpr3Dview!=NULL)                                      { delete _wxvtkmpr3Dview; }
00219         if (_wxvtkclipping3Dview!=NULL)                         { delete _wxvtkclipping3Dview; }
00220 
00221         if (_vtkplane2Dview_B!=NULL)                            { delete _vtkplane2Dview_B; }
00222         if (_wxsphereview_B!=NULL)                                      { delete _wxsphereview_B; }
00223 
00224         if (_wxvtk3Dbaseview_MPR3D_B!=NULL)                     { delete _wxvtk3Dbaseview_MPR3D_B; }
00225         if (_wxvtkmpr3Dview_B!=NULL)                            { delete _wxvtkmpr3Dview_B; }
00226 
00227         if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)       { delete _wxvtk3Dbaseview_Clipping3D_BB; }
00228         if (_wxvtkmpr3Dview_BB!=NULL)                           { delete _wxvtkmpr3Dview_BB; }
00229         if (_wxvtkclipping3Dview_BB!=NULL)                      { delete _wxvtkclipping3Dview_BB; }
00230 }
00231 
00232 //----------------------------------------------------------------------------
00233 
00234 wxPanel* wxMPRWidget::CreateControlPanel(wxWindow *parent)
00235 {
00236 
00237         wxPanel *panel=new wxPanel(parent,-1);
00238 
00239 //EEDxx2.4
00240 //      wxStaticText *tmpText = new wxStaticText(panel,-1,""); 
00241 
00242         wxStaticText *help0Text = new wxStaticText(panel,-1,_T("General: \n  middle click : contrast\n  ctrl + middle click : rotate image\n  shift + middle click: translate image\n  ctrl + right click: zoom")); 
00243 
00244         wxStaticText *help1Text = new wxStaticText(panel,-1,_T("mpr2D: \n  double click : choose a point\n  mouse right : change perpendicular slice\n  drag axis: change slice")); 
00245         
00246         wxStaticText *help2Text = new wxStaticText(panel,-1,_T("Plane: \n  drag mouse: rotate\n  ctrl + drag mouse : fix axis rotation\n  \n mouse right: change perpendicular slice \n  see split control \n     - Active/Desactivet plane tool\n     - Center market\n     - Rotation axis market\n     - 2D messure tool (open/close contour)")); 
00247 
00248         wxStaticText *help3Text = new wxStaticText(panel,-1,
00249 _T("Sphere: \n  drag mouse: rotation\n  mouse right: change radio \n  click: 3D point selection in MPR 2D \n  double clicks in MPR: show surface sphere")); 
00250         
00251         wxStaticText *help4Text = new wxStaticText(panel,-1,_T("MPR3D:\n  see split control")); 
00252 
00253         wxString text=_T("");
00254         text=text+_T("Clipping: \n");
00255         text=text+_T(" see split control \n");
00256         text=text+_T(" 4 MarchingCubes:  \n");
00257         text=text+_T("    color, isovalue, opacity \n");
00258         text=text+_T(" Box:\n");
00259         text=text+_T("    mouse left drag (box): rotation\n");
00260         text=text+_T("    mouse left drag (sphere): size,position\n");
00261         text=text+_T("    mouse right drag (box): box size");
00262         text=text+_T(" Axis: 3D\n");
00263         text=text+_T("    mouse drag: translate\n");
00264         text=text+_T("    shift + mouse drag: translate 2 axis\n");
00265         text=text+_T("    mouse right: scale\n");
00266         text=text+_T(" Plane 3D:\n");
00267         text=text+_T("    mouse drag perpendicular axis: rotate plane\n");
00268         text=text+_T("    mouse drag spheres: size plane\n");
00269         text=text+_T("    ctrl +mouse right over the plane: size plane\n");
00270         text=text+_T("    mouse drag plane: translate\n");
00271         text=text+_T("    middle click perpendicular axis: translate\n");
00272         wxStaticText *help5Text = new wxStaticText(panel,-1, text );
00273 
00274 
00275     wxFlexGridSizer *sizer  = new wxFlexGridSizer(1);
00276         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00277         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00278         sizer->Add( help0Text   );
00279 
00280         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00281         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00282         sizer->Add( help1Text   );
00283 
00284         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00285         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00286         sizer->Add( help2Text   );
00287 
00288         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00289         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00290         sizer->Add( help3Text   );
00291 
00292         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00293         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00294         sizer->Add( help4Text   );
00295 
00296         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00297         sizer->Add( new wxStaticText(panel,-1,_T(""))   );
00298         sizer->Add( help5Text   );
00299         
00300         panel->SetSizer(sizer);
00301         panel->SetAutoLayout(true);
00302         panel->SetSize(350,500);
00303 
00304     return panel;
00305 }
00306 
00307 //----------------------------------------------------------------------------
00308 
00309 void wxMPRWidget::OnPageAChanged(wxNotebookEvent & event)
00310 {
00311         _refreshAPage=event.GetSelection();
00312         Refresh();
00313         RefreshView(true);
00314 }
00315 
00316 //----------------------------------------------------------------------------
00317 
00318 void wxMPRWidget::OnPageBChanged(wxNotebookEvent & event)
00319 {
00320         _refreshBPage=event.GetSelection();
00321 //      Refresh(false);
00322 //      RefreshView();
00323 }
00324 
00325 
00326 //----------------------------------------------------------------------------
00327 
00328 wxPanel* wxMPRWidget::CreateView(int type,wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00329 {
00330         wxWindow *wxwindow;
00331         wxPanel *panel=new wxPanel(parent,-1);
00332 
00333         if (type==0)
00334         {
00335                 _vtkmpr2Dview_B[0] = new wxVtkMPR2DView(panel,0);
00336                 _vtkmpr2Dview_B[0]->SetVtkBaseData(vtkmprbasedata);
00337                 wxwindow=_vtkmpr2Dview_B[0]->GetWxVTKRenderWindowInteractor();
00338         }
00339         if (type==1)
00340         {
00341                 _vtkmpr2Dview_B[1] = new wxVtkMPR2DView(panel,1);
00342                 _vtkmpr2Dview_B[1]->SetVtkBaseData(vtkmprbasedata);
00343                 wxwindow=_vtkmpr2Dview_B[1]->GetWxVTKRenderWindowInteractor();
00344         }
00345         if (type==2)
00346         {
00347                 _vtkmpr2Dview_B[2] = new wxVtkMPR2DView(panel,2);
00348                 _vtkmpr2Dview_B[2]->SetVtkBaseData(vtkmprbasedata);
00349                 wxwindow=_vtkmpr2Dview_B[2]->GetWxVTKRenderWindowInteractor();
00350         }
00351         if (type==3)
00352         {
00353                 _widgetMesure_B         = new wxWidgetMesure2D_Plane_in_MPR(panel);
00354                 _vtkplane2Dview_B       = new vtkPlane2DView( _widgetMesure_B->GetWindow2());
00355                 _widgetMesure_B->SetVtkPlane2DView( _vtkplane2Dview_B );
00356                 _vtkplane2Dview_B->SetImgSize( 200 );
00357                 _vtkplane2Dview_B->SetVtkBaseData(vtkmprbasedata);
00358                 wxwindow                        = _widgetMesure_B;
00359         }
00360         if (type==4)
00361         {
00362                 _wxsphereview_B         = new wxSphereView( panel , vtkmprbasedata, vtkmprbasedata->GetImageData() );
00363                 wxwindow=_wxsphereview_B->GetWxVTKRenderWindowInteractor();
00364         }
00365 
00366         if (type==5)
00367         {
00368                 wxSplitterWindow *panelMPR3D    = new wxSplitterWindow( panel , -1);
00369                 _wxvtk3Dbaseview_MPR3D_B                = new wxVtk3DBaseView( panelMPR3D );
00370 
00371                 _wxvtkmpr3Dview_B                               = new wxVtkMPR3DView(_wxvtk3Dbaseview_MPR3D_B);
00372                 vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer(); 
00373                 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00374                 vtkmpr3Ddataviewer->Configure();
00375                 _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00376 
00377                 wxWindow        *window3D                       = _wxvtk3Dbaseview_MPR3D_B->GetWxVTKRenderWindowInteractor();
00378                 wxPanel         *controlPanel3D         = _wxvtkmpr3Dview_B->CreateControlPanel(panelMPR3D, false);
00379 
00380 //EEDxx2.4
00381                 panelMPR3D      -> SetMinimumPaneSize( 5 );
00382                 panelMPR3D      -> SplitHorizontally( controlPanel3D,window3D,600  );
00383 
00384                 wxwindow=panelMPR3D;
00385         }
00386 
00387         if (type==6)
00388         {
00389                 wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
00390                 _wxvtk3Dbaseview_Clipping3D_BB                  = new wxVtk3DBaseView( panelClipping3D );
00391 
00392                 _wxvtkclipping3Dview_BB                                 = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D_BB);
00393                 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
00394                 vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00395                 vtkclipping3Ddataviewer->Configure();
00396                 _wxvtkclipping3Dview_BB->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
00397 
00398                 _wxvtkmpr3Dview_BB                                              = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D_BB );
00399                 vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer(); 
00400                 vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00401                 vtkmpr3Ddataviewer->Configure();
00402                 _wxvtkmpr3Dview_BB->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00403 
00404                 wxWindow        *window3D                                       = _wxvtk3Dbaseview_Clipping3D_BB->GetWxVTKRenderWindowInteractor();
00405 
00406                 wxPanel                 *panelControl                   = new wxPanel(panelClipping3D,-1);      
00407                 wxPanel                 *controlPanelMPR3D              = _wxvtkmpr3Dview_BB->CreateControlPanel(panelControl, false);
00408                 wxPanel                 *controlPanelClipping3D = _wxvtkclipping3Dview_BB->CreateSurfControlPanel(panelControl);
00409                                  _btnCutImageData               = new wxCheckBox(panelControl,-1,_T("Cut Module"));
00410                 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
00411 
00412                 wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
00413                 sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
00414                 sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
00415                 sizerCtrol->Add( _btnCutImageData               , 1, wxALL, 2);
00416 
00417                 panelControl->SetAutoLayout(true);
00418                 panelControl->SetSizer(sizerCtrol);
00419                 panelControl->SetSize(400,350);
00420                 panelControl->Layout();
00421 //EEDxx2.4
00422 //              panelControl->FitInside();
00423 
00424 //EEDxx2.4
00425                 panelClipping3D -> SetMinimumPaneSize( 5 );
00426                 panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
00427                 wxwindow=panelClipping3D;
00428         }
00429 
00430     wxBoxSizer *sizerH1                                                 = new wxBoxSizer(wxHORIZONTAL);
00431         sizerH1->Add(wxwindow , 1, wxALL|wxGROW, 0);
00432         panel->SetAutoLayout(true);
00433         panel->SetSizer(sizerH1);
00434         panel->SetSize(400,400);
00435         panel->Layout();
00436 
00437         return panel;
00438 }
00439 
00440 //----------------------------------------------------------------------------
00441 
00442 wxPanel* wxMPRWidget::CreateMPRPanel(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00443 {
00444         wxPanel *panel=new wxPanel(parent,-1);
00445 
00446         wxNotebook *notebook = new wxNotebook( panel, -1 );
00447 
00448         notebook->AddPage( CreateMPRPanel4View( notebook ,vtkmprbasedata), _T("4-View") );
00449         notebook->AddPage( CreateView(0,notebook,vtkmprbasedata) , _T("Axial")          );
00450         notebook->AddPage( CreateView(1,notebook,vtkmprbasedata) , _T("Sagital")        );
00451         notebook->AddPage( CreateView(2,notebook,vtkmprbasedata) , _T("Coronal")        );
00452         notebook->AddPage( CreateView(3,notebook,vtkmprbasedata) , _T("Plane")          );
00453         notebook->AddPage( CreateView(4,notebook,vtkmprbasedata) , _T("Sphere")         );
00454         notebook->AddPage( CreateView(5,notebook,vtkmprbasedata) , _T("MPR 3D")         );
00455         notebook->AddPage( CreateView(6,notebook,vtkmprbasedata) , _T("Clipping")       );
00456         Connect(notebook->GetId()       , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED  , (wxObjectEventFunction) &wxMPRWidget::OnPageAChanged   );
00457 
00458         wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00459         sizer->Add(notebook , 1, wxALL|wxGROW, 2);
00460         panel->SetAutoLayout(true);
00461         panel->SetSizer(sizer);
00462         panel->SetSize(400,400);
00463         panel->Layout();
00464 
00465 //EEDxx2.4
00466 //      panel->FitInside();
00467 
00468         panel->Refresh();
00469         return panel;
00470 }
00471 
00472 //----------------------------------------------------------------------------
00473 
00474 wxPanel* wxMPRWidget::CreateMPRPanel4View(wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
00475 {
00476         wxPanel *panel=new wxPanel(parent,-1);
00477 
00478         // view 0
00479         _vtkmpr2Dview[0] = new wxVtkMPR2DView(panel,0);
00480         _vtkmpr2Dview[0]->SetVtkBaseData(vtkmprbasedata);
00481         wxVTKRenderWindowInteractor *iren0 = _vtkmpr2Dview[0]->GetWxVTKRenderWindowInteractor();        
00482 
00483         // view 1
00484         _vtkmpr2Dview[1] = new wxVtkMPR2DView(panel,1);
00485         _vtkmpr2Dview[1]->SetVtkBaseData(vtkmprbasedata);
00486         wxVTKRenderWindowInteractor *iren1 = _vtkmpr2Dview[1]->GetWxVTKRenderWindowInteractor();        
00487 
00488         // view 2
00489         _vtkmpr2Dview[2] = new wxVtkMPR2DView(panel,2);
00490         _vtkmpr2Dview[2]->SetVtkBaseData(vtkmprbasedata);
00491         wxVTKRenderWindowInteractor *iren2 = _vtkmpr2Dview[2]->GetWxVTKRenderWindowInteractor();        
00492 
00493         // view 3
00494         wxNotebook *notebook = new wxNotebook( panel, -1 );
00495         notebook->SetSize(400,400);
00496 
00497 // EED 27 Oct 2007
00498          // view 3.0
00499         _widgetMesure   = new wxWidgetMesure2D_Plane_in_MPR(notebook);
00500         _vtkplane2Dview = new vtkPlane2DView( _widgetMesure->GetWindow2() );
00501         _widgetMesure->SetVtkPlane2DView( _vtkplane2Dview );
00502         _vtkplane2Dview->SetImgSize( 200 );
00503         _vtkplane2Dview->SetVtkBaseData(vtkmprbasedata);
00504         notebook->AddPage( _widgetMesure, _T("Plane") );
00505 
00506          // view 3.1
00507         _wxsphereview = new wxSphereView( notebook , vtkmprbasedata, vtkmprbasedata->GetImageData());
00508         wxVTKRenderWindowInteractor *iren3B = _wxsphereview->GetWxVTKRenderWindowInteractor();  
00509         notebook->AddPage( iren3B, _T("Sphere") );
00510 
00511 
00512          // view 3.2
00513         wxSplitterWindow *panelMPR3D    = new wxSplitterWindow( notebook , -1);
00514         _wxvtk3Dbaseview_MPRClipping3D  = new wxVtk3DBaseView( panelMPR3D );
00515 
00516         _wxvtkmpr3Dview = new wxVtkMPR3DView( _wxvtk3Dbaseview_MPRClipping3D );
00517         vtkMPR3DDataViewer *vtkmpr3Ddataviewer = new vtkMPR3DDataViewer(); 
00518         vtkmpr3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00519         vtkmpr3Ddataviewer->Configure();
00520         _wxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
00521 
00522 
00523         _wxvtkclipping3Dview = new wxVtkClipping3DView( _wxvtk3Dbaseview_MPRClipping3D );
00524         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer(); 
00525         vtkclipping3Ddataviewer->SetVtkMPRBaseData(vtkmprbasedata);
00526         vtkclipping3Ddataviewer->Configure();
00527         _wxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
00528 
00529 
00530         wxWindow        *window3D                               = _wxvtk3Dbaseview_MPRClipping3D->GetWxVTKRenderWindowInteractor();
00531 
00532         wxPanel         *panelControl                   = new wxPanel(panelMPR3D,-1);
00533         wxPanel         *controlPanelMPR3D              = _wxvtkmpr3Dview->CreateControlPanel(panelControl, false);
00534         wxPanel         *controlPanelClipping3D = _wxvtkclipping3Dview->CreateSurfControlPanel(panelControl);
00535 
00536 
00537 
00538 
00539 //    wxBoxSizer         *sizerCtrol             = new wxBoxSizer(wxVERTICAL);
00540         wxFlexGridSizer  *sizerCtrol             = new wxFlexGridSizer(1);
00541         sizerCtrol->Add(controlPanelMPR3D               , 1, wxALL|wxEXPAND, 2);
00542         sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
00543 
00544 
00545         panelControl->SetAutoLayout(true);
00546         panelControl->SetSizer(sizerCtrol);
00547         panelControl->SetSize(400,150);
00548         panelControl->Layout();
00549 
00550 //EEDxx2.4
00551         panelMPR3D      -> SetMinimumPaneSize( 5 );
00552 
00553         panelMPR3D      -> SplitHorizontally( panelControl,window3D,200  );
00554 
00555         notebook->AddPage( panelMPR3D, _T("MPR 3D - Clipping") );
00556 
00557 
00558         Connect(notebook->GetId()       , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED  , (wxObjectEventFunction) &wxMPRWidget::OnPageBChanged   );
00559 
00560         wxBoxSizer *sizerV = new wxBoxSizer(wxVERTICAL);
00561         wxBoxSizer *sizerH1= new wxBoxSizer(wxHORIZONTAL);
00562         wxBoxSizer *sizerH2= new wxBoxSizer(wxHORIZONTAL);
00563         sizerH1->Add(iren2 , 1, wxALL|wxEXPAND, 2);
00564         sizerH1->Add(iren0 , 1, wxALL|wxEXPAND, 2);
00565         sizerH2->Add(iren1 , 1, wxALL|wxEXPAND, 2);
00566 //      sizerH2->Add(iren3 , 1, wxALL|wxEXPAND, 2);
00567         sizerH2->Add(notebook , 1, wxALL|wxEXPAND, 2);
00568 
00569         sizerV->Add(sizerH1, 1, wxALL|wxEXPAND, 0);
00570         sizerV->Add(sizerH2, 1, wxALL|wxEXPAND, 0);
00571 
00572         panel->SetAutoLayout(true);
00573         panel->SetSizer(sizerV);
00574         panel->SetSize(400,400);
00575         panel->Layout();
00576         return panel;
00577 }
00578 
00579 //----------------------------------------------------------------------------
00580 void wxMPRWidget::OnCutImagaData(wxCommandEvent &event) 
00581 {
00582         if (_btnCutImageData->GetValue()==true){                
00583        
00584                 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
00585                 
00586                 _framePanelCutting->SetSize(550,400);
00587 
00588                 _panelCutting   = new wxPanelCuttingImageData(_framePanelCutting);              
00589                 if(_wxvtk3Dbaseview_Clipping3D_BB!=NULL){
00590                         _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D_BB  );
00591                 }
00592                 _panelCutting->SetVtkMPRBaseData( GetVtkMPRBaseData() );
00593                 _panelCutting->SetVtkClipping3DDataViewer( this->_wxvtkclipping3Dview_BB->GetVtkClipping3DDataViewer() );
00594                 _panelCutting->Configure( );
00595 /*
00596                 wxBoxSizer *topsizer            = new wxBoxSizer(wxHORIZONTAL  );
00597                 topsizer -> Add( _panelCutting ,1,wxALL  ,0);
00598                 _framePanelCutting->SetAutoLayout(true);
00599                 _framePanelCutting->SetSizer( topsizer );      // use the sizer for layout
00600                 _framePanelCutting->Layout(); 
00601 //EEDxx2.4
00602 //              _framePanelCutting->FitInside();
00603 */
00604                 _framePanelCutting->Show();
00605 
00606                 
00607         } else {
00608                 if (_framePanelCutting!=NULL){
00609                         _panelCutting->RemoveActors();                  
00610                         _framePanelCutting->Destroy();
00611                         _framePanelCutting=NULL;
00612                         _panelCutting=NULL;
00613                 }
00614         }
00615 }
00616 
00617 //----------------------------------------------------------------------------
00618 void wxMPRWidget::ConfigureVTK(){
00619         int x=0,y=0,z=0;
00620 
00621         if (_vtkmprbasedata!=NULL)
00622         {
00623                 _vtkmprbasedata->Configure();
00624                 x=_vtkmprbasedata                       ->      GetMaxPositionX()/2;
00625                 y=_vtkmprbasedata                       ->      GetMaxPositionY()/2;
00626                 z=_vtkmprbasedata                       ->      GetMaxPositionZ()/2;    
00627                 _vtkmprbasedata->SetX( x );
00628                 _vtkmprbasedata->SetY( y );
00629                 _vtkmprbasedata->SetZ( z );
00630         
00631         }
00632 
00633         if(_vtkmpr2Dview[0]!=NULL) {_vtkmpr2Dview[0]                            ->      Configure();}
00634         if(_vtkmpr2Dview[1]!=NULL) {_vtkmpr2Dview[1]                            ->      Configure();}
00635         if(_vtkmpr2Dview[2]!=NULL) {_vtkmpr2Dview[2]                            ->      Configure();}
00636 
00637 
00638         if (_vtkmpr2Dview_B[0]!=NULL) { _vtkmpr2Dview_B[0]                              ->      Configure(); }
00639         if (_vtkmpr2Dview_B[1]!=NULL) { _vtkmpr2Dview_B[1]                              ->      Configure(); }
00640         if (_vtkmpr2Dview_B[2]!=NULL) { _vtkmpr2Dview_B[2]                              ->      Configure(); }
00641 
00642 
00643         
00644 
00645         if (_vtkplane2Dview!=NULL){_vtkplane2Dview                              ->      Configure();}
00646         if (_widgetMesure!=NULL){_widgetMesure                                  ->      ConfigureA(_vtkplane2Dview);}
00647         if (_widgetMesure!=NULL){_widgetMesure                                  ->      SetActiveLink(true);}
00648         if (_widgetMesure!=NULL){_widgetMesure                                  ->      SetMesureScale( _voxelSize );}
00649         if (_wxsphereview!=NULL){_wxsphereview                                  ->      Configure();}
00650 
00651         if (_wxvtk3Dbaseview_MPRClipping3D!=NULL){_wxvtk3Dbaseview_MPRClipping3D        ->  Configure();}
00652         if (_wxvtkmpr3Dview!=NULL){
00653                 _wxvtkmpr3Dview                                 ->      Configure();
00654         }
00655         if (_wxvtkclipping3Dview!=NULL){_wxvtkclipping3Dview            ->      Configure();}
00656 
00657         if (_vtkplane2Dview_B!=NULL){   _vtkplane2Dview_B                       ->      Configure(); }
00658         if (_widgetMesure_B!=NULL){             _widgetMesure_B                         ->      ConfigureA( _vtkplane2Dview_B ); }
00659         if (_widgetMesure_B!=NULL){             _widgetMesure_B                         ->      SetActiveLink(true); }
00660 
00661 //EEDx3
00662 //      double spc[3];
00663 //      vtkImageData *imageData = _vtkmprbasedata->GetImageData();
00664 //      imageData->Update();
00665 //      imageData->GetSpacing(spc);
00666 //      _widgetMesure_B->SetMesureScale(spc[0]);
00667 
00668         if (_widgetMesure_B!=NULL)                                      {_widgetMesure_B->SetMesureScale( _voxelSize );}
00669 
00670 
00671         if (_wxsphereview_B!=NULL)                                      {_wxsphereview_B                                ->      Configure();}
00672 
00673         if (_wxvtk3Dbaseview_MPR3D_B!=NULL)                     {_wxvtk3Dbaseview_MPR3D_B               ->  Configure();}
00674         if (_wxvtkmpr3Dview_B!=NULL)                            {_wxvtkmpr3Dview_B                              ->      Configure();}
00675 
00676         if ( _wxvtk3Dbaseview_Clipping3D_BB!=NULL)      {_wxvtk3Dbaseview_Clipping3D_BB ->  Configure(); }
00677         if ( _wxvtkmpr3Dview_BB!=NULL)                          {_wxvtkmpr3Dview_BB                             ->      Configure(); }
00678         if ( _wxvtkclipping3Dview_BB!=NULL)                     {_wxvtkclipping3Dview_BB                ->      Configure(); }
00679 
00680 
00681         vtkInteractorStyle3DView *vtkinteractorstyle3Dview;
00682         if (_wxvtkmpr3Dview_BB!=NULL)
00683         {
00684                 vtkinteractorstyle3Dview        = new vtkInteractorStyle3DView();
00685                 vtkinteractorstyle3Dview->SetWxVtkMPR3DView(_wxvtkmpr3Dview_BB);
00686                 vtkinteractorstyle3Dview->SetWxVtkClipping3DView(_wxvtkclipping3Dview_BB);
00687         }
00688 
00689         if (_wxvtk3Dbaseview_Clipping3D_BB!=NULL)
00690         {
00691                 ((vtkInteractorStyleBaseView*)_wxvtk3Dbaseview_Clipping3D_BB->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( vtkinteractorstyle3Dview );
00692         }
00693         
00694 //EED 29Mars2009
00695 //      RefreshView(true);
00696         
00697 }
00698 
00699 //----------------------------------------------------------------------------
00700 
00701 void wxMPRWidget::OnRefreshView(wxCommandEvent & event)
00702 {
00703         RefreshView();
00704 }
00705 //----------------------------------------------------------------------------
00706 void wxMPRWidget::OnDClickLeft(wxCommandEvent & event)
00707 {
00708         if (_wxsphereview!=NULL) {
00709                 _wxsphereview   -> RefreshPoint();
00710         }
00711         if (_wxsphereview_B!=NULL) {
00712                 _wxsphereview_B -> RefreshPoint();
00713         }
00714 }
00715 //----------------------------------------------------------------------------
00716 void wxMPRWidget::RefreshView(bool firsttime){
00717 
00718         if (_refreshAPage == 0 )
00719         {
00720 
00721                 if ((_vtkmpr2Dview[0]!=NULL) && (_vtkmpr2Dview[1]!=NULL) && (_vtkmpr2Dview[2]!=NULL) )
00722                 {
00723                         _vtkmpr2Dview[2] -> Refresh();
00724                         _vtkmpr2Dview[1] -> Refresh();
00725                         _vtkmpr2Dview[0] -> Refresh();
00726 
00727                         if (firsttime==false)
00728                         {
00729                                 _vtkmpr2Dview[2] -> RefreshView();
00730                                 _vtkmpr2Dview[1] -> RefreshView();
00731                                 _vtkmpr2Dview[0] -> RefreshView();
00732                         }
00733 
00734                         if (_refreshBPage == 0 )
00735                         {
00736                                 if (_vtkplane2Dview!=NULL)
00737                                 {
00738                                         _vtkplane2Dview -> Refresh();           
00739                                         if (firsttime==false)
00740                                         {
00741                                                 _vtkplane2Dview -> RefreshView();
00742                                         }
00743 //                                      _wxvtk3Dbaseview_MPR3D_B -> Refresh();
00744                                 }
00745                         }
00746                         if (_refreshBPage == 1 )
00747                         {
00748                                 //sphere
00749                         }
00750                         if (_refreshBPage == 2 )
00751                         {
00752                                 if ((_wxvtkmpr3Dview!=NULL)  && (_wxvtk3Dbaseview_MPRClipping3D!=NULL) && (_wxvtkclipping3Dview!=NULL) )
00753                                 {
00754                                         _wxvtkmpr3Dview                 -> RefreshView();
00755                                         _wxvtk3Dbaseview_MPRClipping3D  -> Refresh();
00756                                         _wxvtkclipping3Dview            -> Refresh();
00757                                 }
00758                         }
00759                 }
00760         }
00761 
00762         if (_refreshAPage == 1 )
00763         {
00764                 if (_vtkmpr2Dview_B[0] !=NULL){
00765                         _vtkmpr2Dview_B[0] -> Refresh();
00766                 }
00767         }
00768         if (_refreshAPage == 2 )
00769         {
00770                 if (_vtkmpr2Dview_B[1] !=NULL){
00771                         _vtkmpr2Dview_B[1] -> Refresh();
00772                 }
00773         }
00774         if (_refreshAPage == 3 )
00775         {
00776                 if (_vtkmpr2Dview_B[2] !=NULL){
00777                         _vtkmpr2Dview_B[2] -> Refresh();
00778                 }
00779         }
00780         if (_refreshAPage == 4 )
00781         {
00782                 if (_vtkplane2Dview_B!=NULL){
00783                         _vtkplane2Dview_B -> Refresh();
00784                         if (firsttime==false)
00785                         {
00786                                 _vtkplane2Dview_B -> RefreshView();
00787                         }
00788                 }
00789         }
00790 
00791         if (_refreshAPage == 5 )
00792         {
00793                 // sphere
00794         }
00795         if (_refreshAPage == 6 )
00796         {
00797                 if (_wxvtkmpr3Dview_B!=NULL){
00798                         _wxvtkmpr3Dview_B               -> Refresh();
00799                         _wxvtk3Dbaseview_MPR3D_B        -> Refresh();
00800                 }
00801         }
00802         if (_refreshAPage == 7 )
00803         {
00804                 if (_wxvtkmpr3Dview_BB!=NULL){
00805                         _wxvtkmpr3Dview_BB              -> RefreshView();
00806                         _wxvtkclipping3Dview_BB         -> Refresh();
00807                         _wxvtk3Dbaseview_Clipping3D_BB  -> Refresh();
00808                         if (_panelCutting!=NULL)
00809                         {
00810                                 _panelCutting->RefreshView();
00811                         }
00812                 }
00813         }
00814 
00815 }
00816 //----------------------------------------------------------------------------
00817 vtkMPRBaseData  *wxMPRWidget::GetVtkMPRBaseData(){      
00818         return _vtkmprbasedata;
00819 }
00820 //----------------------------------------------------------------------------
00821 vtkPlane2DView *wxMPRWidget::GetVtkPlane2DView()
00822 {
00823         return _vtkplane2Dview;
00824 }
00825 //----------------------------------------------------------------------------
00826 wxVtkMPR3DView  *wxMPRWidget::GetWxvtkmpr3Dview_BB()
00827 {
00828         return _wxvtkmpr3Dview_BB;
00829 }
00830 //----------------------------------------------------------------------------
00831 wxVtkBaseView *wxMPRWidget::GetWxVtkBaseView(int page, int id)
00832 {
00833         wxVtkBaseView *result=NULL;
00834         if (page==0)
00835         {       
00836                 if ((id>=0) &&(id<=3)){
00837                         result=_vtkmpr2Dview[id];
00838                 }
00839                 if (id==3)
00840                 {
00841                         result=_vtkplane2Dview;
00842                 }
00843         }
00844         return result;
00845 }
00846 //----------------------------------------------------------------------------
00847 wxVtkMPR2DView *wxMPRWidget::GetWxvtkMPR2Dview(int direction)
00848 {
00849         return _vtkmpr2Dview[direction];
00850 }
00851 
00852 
00853 
00854 //----------------------------------------------------------------------------
00855 
00856 
00857 //----------------------------------------------------------------------------
00858 //----------------------------------------------------------------------------
00859 //----------------------------------------------------------------------------
00860 
00861 
00862 
00863 // EOF - wxMPRWidget.cxx
00864 
00865 
00866 
00867 

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1