00001
00002
00003
00004
00005
00006 #include <vtkMetaImageReader.h>
00007 #include <vtkMetaImageWriter.h>
00008 #include <vtkPlaneSource.h>
00009 #include <vtkProbeFilter.h>
00010 #include <vtkDataSet.h>
00011 #include <vtkStructuredPoints.h>
00012 #include <vtkPointData.h>
00013 #include <vtkImageResample.h>
00014 #include <vtkJPEGWriter.h>
00015 #include <vtkBMPWriter.h>
00016
00017
00018
00019 #include "vtkActor.h"
00020 #include "vtkSphereSource.h"
00021 #include "vtkPolyDataMapper.h"
00022 #include "vtkImageData.h"
00023 #include "vtkImageCast.h"
00024
00025 #include "wxEmptyPanel_3_Widget.h"
00026
00027
00028
00029 #include <wx/splitter.h>
00030
00031
00032
00033
00034 BEGIN_EVENT_TABLE( wxEmptyPanel_3_Widget, wxPanel )
00035 EVT_MENU( 12121, wxEmptyPanel_3_Widget::OnRefreshView )
00036 END_EVENT_TABLE( );
00037
00038 wxEmptyPanel_3_Widget::wxEmptyPanel_3_Widget(wxWindow *parent)
00039 : wxPanel( parent, -1)
00040 {
00041 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL );
00042 wxSplitterWindow *pnlSplitter = new wxSplitterWindow( this , -1);
00043 wxPanel *viewPanel = CreateViewPanel(pnlSplitter);
00044 wxPanel *controlPanel = CreateControlPanel(pnlSplitter);
00045
00046 sizer -> Add( pnlSplitter ,1,wxGROW ,0);
00047 pnlSplitter -> SetMinimumPaneSize( 50 );
00048 pnlSplitter -> SplitVertically( viewPanel, controlPanel );
00049 this -> SetSizer(sizer);
00050
00051
00052 }
00053
00054 wxEmptyPanel_3_Widget::~wxEmptyPanel_3_Widget(){
00055 delete _imageviewer2D_1;
00056 }
00057
00058 wxPanel* wxEmptyPanel_3_Widget::CreateViewPanel(wxWindow *parent)
00059 {
00060 wxPanel *panel = new wxPanel(parent,-1);
00061 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00062
00063 _imageviewer2D_1 = new wxVtk2DBaseView(panel);
00064 wxVTKRenderWindowInteractor *iren = _imageviewer2D_1->GetWxVTKRenderWindowInteractor();
00065 sizer->Add(iren , 1, wxEXPAND, 0);
00066
00067
00068 panel->SetSizer(sizer);
00069 panel->SetAutoLayout(true);
00070 panel->SetSize(400,400);
00071 panel->Layout();
00072 return panel;
00073 }
00074
00075 wxPanel* wxEmptyPanel_3_Widget::CreateControlPanel(wxWindow *parent)
00076 {
00077 _parent=parent;
00078 wxPanel *panel = new wxPanel(parent,-1);
00079
00080 wxButton *btnContourA = new wxButton( panel, -1, _T("Active Contour A"));
00081 wxButton *btnContourB = new wxButton( panel, -1, _T("Active Contour B"));
00082 wxButton *btnContourAB = new wxButton( panel, -1, _T("Active Contour AB"));
00083
00084
00085 wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
00086 sizer->Add(new wxStaticText(panel,-1,_T(" ")));
00087 sizer->Add(new wxStaticText(panel,-1,_T(" ")));
00088 sizer->Add(btnContourA);
00089 sizer->Add(btnContourB);
00090 sizer->Add(btnContourAB);
00091
00092 panel->SetSizer(sizer);
00093 panel->SetAutoLayout(true);
00094 panel->SetSize(400,400);
00095 panel->Layout();
00096 Connect(btnContourA->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxEmptyPanel_3_Widget::OnContourA );
00097 Connect(btnContourB->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxEmptyPanel_3_Widget::OnContourB );
00098 Connect(btnContourAB->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxEmptyPanel_3_Widget::OnContourAB );
00099 return panel;
00100 }
00101
00102 void wxEmptyPanel_3_Widget::Refresh()
00103 {
00104 _imageviewer2D_1->Refresh();
00105 }
00106
00107 void wxEmptyPanel_3_Widget::OnRefreshView(wxCommandEvent & event)
00108 {
00109 Refresh();
00110 }
00111
00112
00113
00114
00115 void wxEmptyPanel_3_Widget::ConfigureVTK(marImageData *marimagedata)
00116 {
00117 wxBusyCursor wait;
00118 double spc[3];
00119
00120 vtkImageData *vtkimagedata = marimagedata->GetImageData();
00121 vtkimagedata->UpdateInformation();
00122 vtkimagedata->SetUpdateExtent(vtkimagedata->GetWholeExtent());
00123 vtkimagedata->Update();
00124 _data = vtkimagedata;
00125 _data->GetSpacing(spc);
00126 _vtkbasedata_1 = new vtkBaseData();
00127 _vtkbasedata_1->SetMarImageData(marimagedata);
00128 _imageviewer2D_1->SetVtkBaseData( _vtkbasedata_1 );
00129 _imageviewer2D_1->Configure();
00130
00131
00132
00133
00134 _manContourControl_1 = new manualContourControler();
00135 _mContourModel_1 = new manualContourModel();
00136 _mViewContour_1 = new manualViewContour();
00137 _mViewContour_1->SetModel( _mContourModel_1 );
00138 _mViewContour_1->SetWxVtkBaseView( _imageviewer2D_1 );
00139 _mViewContour_1->SetRange( 2 );
00140 _mViewContour_1->SetZ( 1000 );
00141
00142
00143
00144 _mViewContour_1->SetSpacing(spc);
00145
00146
00147
00148 _mViewContour_1->SetColorNormalContour(0, 0, 1);
00149 _mViewContour_1->SetColorEditContour(0, 0.5, 0.5);
00150
00151
00152 _manContourControl_1->SetModelView( _mContourModel_1 , _mViewContour_1 );
00153 _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_1 );
00154 _manContourControl_1->CreateNewManualContour();
00155 _manContourControl_1->SetActive(false);
00156 _mViewContour_1->RefreshContour();
00157
00158
00159 _manRoiControl = new manualRoiControler();
00160 _mContourModel = new manualContourModel();
00161 _mViewRoi = new manualViewRoi();
00162 _mViewRoi->SetModel( _mContourModel );
00163 _mViewRoi->SetWxVtkBaseView( _imageviewer2D_1 );
00164 _mViewRoi->SetRange( 2 );
00165 _mViewRoi->SetZ( 1000 );
00166
00167
00168 _mViewRoi->SetSpacing(spc);
00169
00170 _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
00171 _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manRoiControl );
00172 _manRoiControl->CreateNewManualContour();
00173 _manRoiControl->SetActive(true);
00174 _mViewRoi->RefreshContour();
00175
00176
00177 _manContourControl_2 = new manualContourControler();
00178 _mContourModel_2 = new manualContourModel();
00179 _mViewContour_2 = new manualViewContour();
00180 _mViewContour_2->SetModel( _mContourModel_2 );
00181 _mViewContour_2->SetWxVtkBaseView( _imageviewer2D_1 );
00182 _mViewContour_2->SetRange( 2 );
00183 _mViewContour_2->SetZ( 1000 );
00184
00185
00186 _mViewContour_2->SetSpacing(spc);
00187
00188
00189 _mViewContour_2->SetColorNormalContour(1, 1, 1);
00190 _mViewContour_2->SetColorEditContour(0.5, 0.5, 0.5);
00191
00192
00193 _manContourControl_2->SetModelView( _mContourModel_2 , _mViewContour_2 );
00194 _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_2 );
00195 _manContourControl_2->CreateNewManualContour();
00196 _manContourControl_2->SetActive(false);
00197 _mViewContour_2->RefreshContour();
00198
00199 CreateNewPoint( 0,0);
00200
00201 Refresh();
00202 }
00203
00204
00205
00206
00207 void wxEmptyPanel_3_Widget::CreateNewPoint(double x, double y)
00208 {
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242 vtkSphereSource *spheres = vtkSphereSource::New( );
00243 spheres->SetCenter( x,y,0 );
00244 spheres->SetRadius( 5 );
00245 vtkPolyDataMapper *spheresMapper = vtkPolyDataMapper::New( );
00246 spheresMapper ->ImmediateModeRenderingOn();
00247 spheresMapper -> SetInput( spheres->GetOutput( ) );
00248 vtkActor *spheresActor = vtkActor::New( );
00249 spheresActor -> SetMapper( spheresMapper );
00250 spheresActor ->GetProperty()->BackfaceCullingOff();
00251 spheresActor ->GetProperty()->SetColor(0, 1, 0);
00252 spheresActor ->ApplyProperties();
00253 _imageviewer2D_1 -> GetRenderer() -> AddActor( spheresActor );
00254
00255
00256 }
00257
00258
00259
00260
00261
00262 void wxEmptyPanel_3_Widget::OnContourA(wxCommandEvent& event)
00263 {
00264 _manRoiControl -> SetActive(false);
00265 _manContourControl_1 -> SetActive(true);
00266 _manContourControl_2 -> SetActive(false);
00267 }
00268
00269 void wxEmptyPanel_3_Widget::OnContourB(wxCommandEvent& event)
00270 {
00271 _manRoiControl -> SetActive(false);
00272 _manContourControl_1 -> SetActive(false);
00273 _manContourControl_2 -> SetActive(true);
00274 }
00275
00276 void wxEmptyPanel_3_Widget::OnContourAB(wxCommandEvent& event)
00277 {
00278 _manRoiControl -> SetActive(false);
00279 _manContourControl_1 -> SetActive(true);
00280 _manContourControl_2 -> SetActive(true);
00281 }
00282
00283