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 /*=========================================================================
29 Module: $RCSfile: vtk2DQuantSliceWidget.cxx,v $
31 Date: $Date: 2012/11/15 14:15:18 $
32 Version: $Revision: 1.2 $
34 Copyright: (c) 2002, 2003
37 This software is distributed WITHOUT ANY WARRANTY; without even
38 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
39 PURPOSE. See the above copyright notice for more information.
41 =========================================================================*/
42 #include "vtk2DQuantSliceWidget.h"
43 #include <vtkProperty.h>
44 #include <vtkRenderer.h>
47 * Again wxVTK is an hybrid class, double click was done using wxWindows, simply
48 * because VTK doesn't provide such facility (as opposed to wheel support that is
49 * supposed to be merged in VTK trunk sooner or later:
51 * http://public.kitware.com/pipermail/vtkusers/2003-August/019548.html
52 * http://www.creatis.insa-lyon.fr/~malaterre/vtk/wheel.patch
55 vtk2DQuantSliceWidget::vtk2DQuantSliceWidget( wxWindow* parent, wxWindowID id,
56 const wxPoint& pos, const wxSize& size,
57 long style, const wxString& name)
58 : wxImageViewerWidget( parent, id, pos, size, style, name)
65 _diameterMinvtkActor = NULL;
66 _diameterMinvtkPolyLine = NULL;
67 _diameterMinvtkDataSetMapper = NULL;
68 _diameterMinvtkUnstructuredGrid = NULL;
71 _diameterMaxvtkActor = NULL;
72 _diameterMaxvtkPolyLine = NULL;
73 _diameterMaxvtkDataSetMapper = NULL;
74 _diameterMaxvtkUnstructuredGrid = NULL;
78 vtk2DQuantSliceWidget::~vtk2DQuantSliceWidget( )
81 if( _cntActor ) _cntActor->Delete();
82 if( _cntMapper ) _cntMapper->Delete();
85 if( _diameterMinvtkActor ) _diameterMinvtkActor->Delete();
86 if( _diameterMinvtkPolyLine ) _diameterMinvtkPolyLine->Delete();
87 if( _diameterMinvtkDataSetMapper ) _diameterMinvtkDataSetMapper->Delete();
88 if( _diameterMinvtkUnstructuredGrid ) _diameterMinvtkUnstructuredGrid->Delete();
91 if( _diameterMaxvtkActor ) _diameterMaxvtkActor->Delete();
92 if( _diameterMaxvtkPolyLine ) _diameterMaxvtkPolyLine->Delete();
93 if( _diameterMaxvtkDataSetMapper ) _diameterMaxvtkDataSetMapper->Delete();
94 if( _diameterMaxvtkUnstructuredGrid ) _diameterMaxvtkUnstructuredGrid->Delete();
97 //----------------------------------------------------------------------------
99 //void vtk2DQuantSliceWidget::SetContour( vtkUnstructuredGrid *cnt )
100 void vtk2DQuantSliceWidget::SetContour( vtkPolyData *cnt )
102 // _cntMapper = vtkDataSetMapper::New( );
103 // _cntMapper = vtkDataSetMapper::New( );
108 _cntMapper = vtkPolyDataMapper::New( );
109 _cntMapper->ScalarVisibilityOff( );
110 _cntMapper->ImmediateModeRenderingOn();
112 _cntMapper->SetInput( _cnt );
113 // _cntMapper->SetInput( _cnt->GetOutput( ) );
116 _cntActor = vtkActor::New( );
117 _cntActor->SetMapper( _cntMapper );
118 (_cntActor->GetProperty( ))->SetColor( 0 , 1 , 0 );
119 (_cntActor->GetProperty( ))->SetLineWidth( 2 );
120 (_cntActor->GetProperty( ))->BackfaceCullingOff( );
123 _imageViewer->GetRenderer()->RemoveActor( _cntActor );
126 _cntActor->SetPosition(0,0,100);
127 _imageViewer->GetRenderer()->AddActor( _cntActor );
128 _imageViewer->Render( );
133 //----------------------------------------------------------------------------
134 void vtk2DQuantSliceWidget::SetDiameterMin(vtkPoints *diameterMin, bool showActor){
135 if (_diameterMinvtkActor!=NULL) _imageViewer->GetRenderer()->RemoveActor( _diameterMinvtkActor );
136 if (_diameterMinvtkActor!=NULL) _diameterMinvtkActor->Delete();
137 if (_diameterMinvtkPolyLine!=NULL) _diameterMinvtkPolyLine->Delete();
138 if (_diameterMinvtkDataSetMapper!=NULL) _diameterMinvtkDataSetMapper->Delete();
139 if (_diameterMinvtkUnstructuredGrid!=NULL) _diameterMinvtkUnstructuredGrid->Delete();
141 _diameterMinvtkActor = vtkActor::New();
142 _diameterMinvtkPolyLine = vtkPolyLine::New();
143 _diameterMinvtkDataSetMapper = vtkDataSetMapper::New();
144 _diameterMinvtkUnstructuredGrid = vtkUnstructuredGrid::New();
146 // generate new actor
147 (_diameterMinvtkPolyLine->GetPointIds() )->SetNumberOfIds(2);
148 ( _diameterMinvtkPolyLine->GetPointIds() )->SetId(0,0);
149 ( _diameterMinvtkPolyLine->GetPointIds() )->SetId(1,1);
150 _diameterMinvtkUnstructuredGrid->Allocate(1,1);
151 _diameterMinvtkUnstructuredGrid->InsertNextCell(_diameterMinvtkPolyLine->GetCellType() ,
152 _diameterMinvtkPolyLine->GetPointIds() );
153 _diameterMinvtkUnstructuredGrid->SetPoints( diameterMin );
154 _diameterMinvtkDataSetMapper->SetInput(_diameterMinvtkUnstructuredGrid);
155 _diameterMinvtkDataSetMapper->ImmediateModeRenderingOn();
156 _diameterMinvtkActor->SetMapper(_diameterMinvtkDataSetMapper);
157 _diameterMinvtkActor->GetProperty()->BackfaceCullingOn();
158 _diameterMinvtkActor->GetProperty()->SetDiffuseColor(1,0,0);
160 if (showActor==true) _imageViewer->GetRenderer()->AddActor( _diameterMinvtkActor );
162 _imageViewer->Render( );
164 //----------------------------------------------------------------------------
165 void vtk2DQuantSliceWidget::SetDiameterMax(vtkPoints *diameterMax, bool showActor){
166 if (_diameterMaxvtkActor!=NULL) _imageViewer->GetRenderer()->RemoveActor( _diameterMaxvtkActor );
167 if (_diameterMaxvtkActor!=NULL) _diameterMaxvtkActor->Delete();
168 if (_diameterMaxvtkPolyLine!=NULL) _diameterMaxvtkPolyLine->Delete();
169 if (_diameterMaxvtkDataSetMapper!=NULL) _diameterMaxvtkDataSetMapper->Delete();
170 if (_diameterMaxvtkUnstructuredGrid!=NULL) _diameterMaxvtkUnstructuredGrid->Delete();
172 _diameterMaxvtkActor = vtkActor::New();
173 _diameterMaxvtkPolyLine = vtkPolyLine::New();
174 _diameterMaxvtkDataSetMapper = vtkDataSetMapper::New();
175 _diameterMaxvtkUnstructuredGrid = vtkUnstructuredGrid::New();
177 // generate new actor
178 (_diameterMaxvtkPolyLine->GetPointIds() )->SetNumberOfIds(2);
179 ( _diameterMaxvtkPolyLine->GetPointIds() )->SetId(0,0);
180 ( _diameterMaxvtkPolyLine->GetPointIds() )->SetId(1,1);
181 _diameterMaxvtkUnstructuredGrid->Allocate(1,1);
182 _diameterMaxvtkUnstructuredGrid->InsertNextCell(_diameterMaxvtkPolyLine->GetCellType() ,
183 _diameterMaxvtkPolyLine->GetPointIds() );
184 _diameterMaxvtkUnstructuredGrid->SetPoints( diameterMax );
185 _diameterMaxvtkDataSetMapper->SetInput(_diameterMaxvtkUnstructuredGrid);
186 _diameterMaxvtkDataSetMapper->ImmediateModeRenderingOn();
187 _diameterMaxvtkActor->SetMapper(_diameterMaxvtkDataSetMapper);
188 _diameterMaxvtkActor->GetProperty()->BackfaceCullingOn();
189 _diameterMaxvtkActor->GetProperty()->SetDiffuseColor(0,0,1);
191 if (showActor==true) _imageViewer->GetRenderer()->AddActor( _diameterMaxvtkActor );
193 _imageViewer->Render( );
195 //----------------------------------------------------------------------------
196 void vtk2DQuantSliceWidget::Show2DContourDiameters( ){
197 if (_cntActor!=NULL) _imageViewer->GetRenderer()->AddActor( _cntActor );
198 if (_diameterMinvtkActor!=NULL) _imageViewer->GetRenderer()->AddActor( _diameterMinvtkActor );
199 if (_diameterMaxvtkActor!=NULL) _imageViewer->GetRenderer()->AddActor( _diameterMaxvtkActor );
200 _imageViewer->Render( );
202 //----------------------------------------------------------------------------
203 void vtk2DQuantSliceWidget::Hide2DContourDiameters( ){
204 if ( _cntActor != NULL ) { _imageViewer->GetRenderer()->RemoveActor( _cntActor ); }
205 if ( _diameterMinvtkActor != NULL ) { _imageViewer->GetRenderer()->RemoveActor( _diameterMinvtkActor ); }
206 if ( _diameterMaxvtkActor != NULL ) { _imageViewer->GetRenderer()->RemoveActor( _diameterMaxvtkActor ); }
207 _imageViewer->Render( );
210 //----------------------------------------------------------------------------
211 /*BEGIN_EVENT_TABLE( vtk2DQuantSliceWidget, wxVTKRenderWindowInteractor )
212 EVT_LEFT_DCLICK( vtk2DQuantSliceWidget::OnLeftDClick )