]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/include/vtk2DQuantSliceWidget.cxx
Support #1768 CREATIS Licence insertion
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / include / vtk2DQuantSliceWidget.cxx
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4 #                        pour la Sant�)
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
8 #
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.
15 #
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
20 #  liability.
21 #
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 # ------------------------------------------------------------------------ */
25
26 /*=========================================================================
27
28   Program:   wxMaracas
29   Module:    $RCSfile: vtk2DQuantSliceWidget.cxx,v $
30   Language:  C++
31   Date:      $Date: 2012/11/15 14:15:18 $
32   Version:   $Revision: 1.2 $
33
34   Copyright: (c) 2002, 2003
35   License:
36   
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.
40
41 =========================================================================*/
42 #include "vtk2DQuantSliceWidget.h"
43 #include <vtkProperty.h>
44 #include <vtkRenderer.h>
45
46 /**
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:
50  *
51  * http://public.kitware.com/pipermail/vtkusers/2003-August/019548.html
52  * http://www.creatis.insa-lyon.fr/~malaterre/vtk/wheel.patch
53  */
54
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)
59 {
60         // Contour
61         _cntActor                                               = NULL;
62         _cntMapper                                              = NULL;
63
64         // Diameter Min
65         _diameterMinvtkActor                    = NULL;
66         _diameterMinvtkPolyLine                 = NULL;
67         _diameterMinvtkDataSetMapper    = NULL;
68         _diameterMinvtkUnstructuredGrid = NULL;
69
70         // Diameter Max
71         _diameterMaxvtkActor                    = NULL;
72         _diameterMaxvtkPolyLine                 = NULL;
73         _diameterMaxvtkDataSetMapper    = NULL;
74         _diameterMaxvtkUnstructuredGrid = NULL;
75 }
76
77
78 vtk2DQuantSliceWidget::~vtk2DQuantSliceWidget( )
79 {
80         // Contour
81         if( _cntActor )                                                 _cntActor->Delete();
82         if( _cntMapper )                                                _cntMapper->Delete();
83
84         // Diameter Min
85         if( _diameterMinvtkActor )                              _diameterMinvtkActor->Delete();
86         if( _diameterMinvtkPolyLine )                   _diameterMinvtkPolyLine->Delete();
87         if( _diameterMinvtkDataSetMapper )              _diameterMinvtkDataSetMapper->Delete();
88         if( _diameterMinvtkUnstructuredGrid )   _diameterMinvtkUnstructuredGrid->Delete();
89
90         // Diameter Max
91         if( _diameterMaxvtkActor )                              _diameterMaxvtkActor->Delete();
92         if( _diameterMaxvtkPolyLine )                   _diameterMaxvtkPolyLine->Delete();
93         if( _diameterMaxvtkDataSetMapper )              _diameterMaxvtkDataSetMapper->Delete();
94         if( _diameterMaxvtkUnstructuredGrid )   _diameterMaxvtkUnstructuredGrid->Delete();
95 }
96
97 //----------------------------------------------------------------------------
98
99 //void vtk2DQuantSliceWidget::SetContour( vtkUnstructuredGrid *cnt )
100 void vtk2DQuantSliceWidget::SetContour( vtkPolyData *cnt )
101 {
102 //  _cntMapper = vtkDataSetMapper::New( ); 
103 //  _cntMapper = vtkDataSetMapper::New( );
104   
105   _cnt = cnt;
106
107   if( !_cntMapper ) {
108     _cntMapper = vtkPolyDataMapper::New( );
109     _cntMapper->ScalarVisibilityOff( );
110     _cntMapper->ImmediateModeRenderingOn();
111   }
112   _cntMapper->SetInput( _cnt );
113 //  _cntMapper->SetInput( _cnt->GetOutput( ) );
114
115   if( !_cntActor ) {
116     _cntActor = vtkActor::New( );
117     _cntActor->SetMapper( _cntMapper );
118     (_cntActor->GetProperty( ))->SetColor( 0 , 1 , 0 );
119     (_cntActor->GetProperty( ))->SetLineWidth( 2 );
120     (_cntActor->GetProperty( ))->BackfaceCullingOff( );
121   }
122   else{
123     _imageViewer->GetRenderer()->RemoveActor( _cntActor );
124   }
125
126   _cntActor->SetPosition(0,0,100);
127   _imageViewer->GetRenderer()->AddActor( _cntActor );
128   _imageViewer->Render( );
129
130 }
131
132
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();
140
141         _diameterMinvtkActor                    =       vtkActor::New();
142         _diameterMinvtkPolyLine                 =       vtkPolyLine::New();
143         _diameterMinvtkDataSetMapper    =       vtkDataSetMapper::New();
144         _diameterMinvtkUnstructuredGrid =       vtkUnstructuredGrid::New();
145
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);
159         // add new actor
160         if (showActor==true) _imageViewer->GetRenderer()->AddActor( _diameterMinvtkActor );
161         // Refresh Widget
162         _imageViewer->Render( );
163 }
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();
171
172         _diameterMaxvtkActor                    =       vtkActor::New();
173         _diameterMaxvtkPolyLine                 =       vtkPolyLine::New();
174         _diameterMaxvtkDataSetMapper    =       vtkDataSetMapper::New();
175         _diameterMaxvtkUnstructuredGrid =       vtkUnstructuredGrid::New();
176
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);
190         // add new actor
191         if (showActor==true) _imageViewer->GetRenderer()->AddActor( _diameterMaxvtkActor );
192         // Refresh Widget
193         _imageViewer->Render( );
194 }
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( );
201 }
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( );
208 }
209
210 //----------------------------------------------------------------------------
211 /*BEGIN_EVENT_TABLE( vtk2DQuantSliceWidget, wxVTKRenderWindowInteractor )
212     EVT_LEFT_DCLICK( vtk2DQuantSliceWidget::OnLeftDClick )
213 END_EVENT_TABLE( );
214 */