<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><DIV>Okay, thanks arnaud !</DIV>
<DIV>Cheers </DIV>
<DIV>Martine<BR><BR>--- En date de&nbsp;: <B>Mar 24.2.09, Arnaud Gelas <I>&lt;arnaud_gelas@hms.harvard.edu&gt;</I></B> a écrit&nbsp;:<BR></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(16,16,255) 2px solid">De: Arnaud Gelas &lt;arnaud_gelas@hms.harvard.edu&gt;<BR>Objet: Re: compilation error in DiscreteCurvatureEstimator<BR>À: "martine_lef@yahoo.fr" &lt;martine_lef@yahoo.fr&gt;<BR>Cc: "insight itk" &lt;insight-users@itk.org&gt;, "Luis Ibanez" &lt;luis.ibanez@kitware.com&gt;<BR>Date: Mardi 24 Février 2009, 16h18<BR><BR><PRE>you're right: sphere.vtk should be ok!
Like this, you can normally use any *.vtk file with some conditions: the file
must be a mesh surface without any point data or cell data, and must be written
in ascii (for now the reader can not handle binary vtk file).


Martine Lefevre wrote:
&gt;  Yes I have built itk with itk_use_Review on
&gt; the previous problem was due to the use of class
QEMeshScalarDataVTKPolyDataWriter. I replaced it by
QuadEdgeMeshScalarDataVTKPolyDataWriter and the problem was resolved.
&gt;  Another question regarding the sphere data in the folder data, this data
is a surface which can be use as input for curvature estimation. Am I right?
&gt; Thank you
&gt;    
&gt; 
&gt; --- En date de : *Mar 24.2.09, Arnaud Gelas
/&lt;arnaud_gelas@hms.harvard.edu&gt;/* a écrit :
&gt; 
&gt;     De: Arnaud Gelas &lt;arnaud_gelas@hms.harvard.edu&gt;
&gt;     Objet: Re: compilation error in DiscreteCurvatureEstimator
&gt;     À: "martine_lef@yahoo.fr" &lt;martine_lef@yahoo.fr&gt;
&gt;     Cc: "insight itk" &lt;insight-users@itk.org&gt;, "Luis
Ibanez"
&gt;     &lt;luis.ibanez@kitware.com&gt;
&gt;     Date: Mardi 24 Février 2009, 15h00
&gt; 
&gt;     Hi Martine,
&gt; 
&gt;     DiscreteCurvatureEstimators are now in Insight/Code/Review directory.
To be
&gt;     able to use it, you need to build itk with ITK_USE_REVIEW ON.
&gt;     Could you try to copy the code from
&gt;     Insight/Testing/Code/Review/itkQuadEdgeMeshGaussianCurvatureTest.cxx
into your
&gt;     project, please?
&gt;     You would only need to change itkQuadEdgeMeshGaussianCurvatureTest by
main,
&gt;     then it should normally work.
&gt;     If you face any problem, just let me know.
&gt; 
&gt;     Arnaud
&gt; 
&gt; 
&gt; 
&gt;     Martine Lefevre wrote:
&gt;     &gt; Hi Arnauld and thank you for your suggestions.
&gt;     &gt; I have followed what you have suggested, now I have no link
problem but I
&gt;     got a compilation error. I use your c++ code
DiscreteCurvatureEstimator Which I
&gt;     have download from the Insight journal link.
&gt;     &gt; A/s soon as I instantiate an object of the class
&gt;     /QEMeshScalarDataVTKPolyDataWriter(the line: WriterType::Pointer
writer =
&gt;     WriterType::New();)/ I get the following error:/
&gt;     &gt; / /
&gt;     &gt;     &gt; Compiling...
&gt;     &gt;     &gt; 1&gt;3Dfeatures.cxx
&gt;     &gt;     &gt;
&gt;    
1&gt;c:\mycodes\3dfeatures\itkQEMeshScalarDataVTKPolyDataWriter.h(115)
&gt;     : error C2440: 'initializing' : cannot convert from 'const
&gt;     itk::MapContainer&lt;TElementIdentifier,TElement&gt; *' to
&gt;     'itk::SmartPointer&lt;TObjectType&gt;'
&gt;     &gt;     &gt; 1&gt;        with
&gt;     &gt;     &gt; 1&gt;        [
&gt;     &gt;     &gt; 1&gt;              
TElementIdentifier=itk::QuadEdgeMeshExtendedTraits&lt;CoordType,3,2,CoordType,CoordType,CoordType,bool,bool&gt;::PointIdentifier,
&gt; 
&gt;     &gt;     &gt; 1&gt;            TElement=double
&gt;     &gt;     &gt; 1&gt;        ]
&gt;     &gt;     &gt; 1&gt;        and
&gt;     &gt;     &gt; 1&gt;        [
&gt;     &gt;     &gt; 1&gt;              
TObjectType=itk::MapContainer&lt;itk::QuadEdgeMeshExtendedTraits&lt;CoordType,3,2,CoordType,CoordType,CoordType,bool,bool&gt;::PointIdentifier,double&gt;
&gt; 
&gt;     &gt;     &gt; 1&gt;        ]
&gt;     &gt;     &gt; 1&gt;        No constructor could take the source type,
or constructor
&gt;     overload resolution was ambiguous
&gt;     &gt;     &gt; 1&gt;          
c:\mycodes\3dfeatures\itkQEMeshScalarDataVTKPolyDataWriter.h(114) :
&gt;     while compiling class template member function 'void
&gt;    
itk::QEMeshScalarDataVTKPolyDataWriter&lt;TMesh&gt;::WritePointData(void)'
&gt;     &gt;     &gt; 1&gt;        with
&gt;     &gt;     &gt; 1&gt;        [
&gt;     &gt;     &gt; 1&gt;            TMesh=MeshType
&gt;     &gt;     &gt; 1&gt;        ]
&gt;     &gt;     &gt; 1&gt;        ..\3Dfeatures.cxx(106) : see reference
to class template
&gt;     instantiation
'itk::QEMeshScalarDataVTKPolyDataWriter&lt;TMesh&gt;'
&gt;     being compiled
&gt;     &gt;     &gt; 1&gt;        with
&gt;     &gt;     &gt; 1&gt;        [
&gt;     &gt;     &gt; 1&gt;            TMesh=MeshType
&gt;     &gt;     &gt; 1&gt;        ]
&gt;     &gt;     &gt; 1&gt;Build log was saved at
&gt;    
"file://c:\mycodes\3DFeatures\Bin\3Dfeatures.dir\Debug\BuildLog.htm"
&gt;     &gt;     &gt; 1&gt;3Dfeatures - 1 error(s), 0 warning(s)
&gt;     &gt;     &gt; ========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0
skipped
&gt;     ==========
&gt;     &gt;     &gt;   Thank you for your time
&gt;     &gt;  Martine.
&gt;     &gt; I paste my code here
&gt;     &gt;     &gt;      &gt; //curvature estimation using
tkQEMeshDiscreteGaussianCurvatureEstimator
&gt;     &gt;     &gt;      &gt; #include "itkQuadEdgeMesh.h"
&gt;     &gt;     &gt; #include "itkVTKPolyDataReader.h"
&gt;     &gt;     &gt;      &gt; #include
"itkQuadEdgeMeshExtendedTraits.h"
&gt;     &gt;     &gt; #include
"itkQEMeshDiscreteGaussianCurvatureEstimator.h"
&gt;     &gt;     &gt; #include
"itkQEMeshDiscreteMeanCurvatureEstimator.h"
&gt;     &gt;     &gt; #include
"itkQEMeshDiscreteMinCurvatureEstimator.h"
&gt;     &gt;     &gt; #include
"itkQEMeshDiscreteMaxCurvatureEstimator.h"
&gt;     &gt;     &gt; #include
"itkQEMeshScalarDataVTKPolyDataWriter.h"
&gt;     &gt;     &gt;      &gt; int main( )
&gt;     &gt;     &gt; {
&gt;     &gt;     &gt;      &gt;       int Curv_choice=0;
&gt;     &gt;     &gt;       /*  std::cout &lt;&lt;"   * 0: Gaussian"
&gt;     &lt;&lt;std::endl;
&gt;     &gt;     &gt;         std::cout &lt;&lt;"   * 1: mean"
&lt;&lt;std::endl;
&gt;     &gt;     &gt;         std::cout &lt;&lt;"   * 2: min"
&lt;&lt;std::endl;
&gt;     &gt;     &gt;         std::cout &lt;&lt;"   * 3: max"
&lt;&lt;std::endl; */
&gt;     &gt;     &gt;      &gt;   const unsigned int Dimension = 3;
&gt;     &gt;     &gt;   typedef double CoordType;
&gt;     &gt;     &gt;      &gt;   typedef itk::QuadEdgeMeshExtendedTraits
&lt;CoordType, Dimension, 2,     CoordType,  CoordType,  CoordType,  bool, bool
&gt; Traits;
&gt;     &gt;     &gt;      &gt;   typedef itk::QuadEdgeMesh&lt; CoordType,
Dimension, Traits &gt;
&gt;     MeshType;
&gt;     &gt;     &gt;   typedef
&gt;     itk::QEMeshDiscreteGaussianCurvatureEstimator&lt;MeshType,MeshType&gt;
&gt;     GaussianCurvatureFilterType;
&gt;     &gt;     &gt;   typedef
&gt;     itk::QEMeshDiscreteMeanCurvatureEstimator&lt;MeshType,MeshType&gt;    
MeanCurvatureFilterType;
&gt;     &gt;     &gt;   typedef
&gt;     itk::QEMeshDiscreteMinCurvatureEstimator&lt;MeshType,MeshType&gt;    
MinCurvatureFilterType;
&gt;     &gt;     &gt;   typedef
&gt;     itk::QEMeshDiscreteMaxCurvatureEstimator&lt;MeshType,MeshType&gt;
&gt;     MaxCurvatureFilterType;
&gt;     &gt;     &gt;      &gt;   typedef itk::VTKPolyDataReader&lt; MeshType
&gt; ReaderType;       ReaderType::Pointer reader = ReaderType::New( );
&gt;     &gt;     &gt;      &gt;      &gt;   reader-&gt;SetFileName(
"C:/Images/sphere.vtk");
&gt;     &gt;     &gt;   try
&gt;     &gt;     &gt;     {
&gt;     &gt;     &gt;     reader-&gt;Update( );
&gt;     &gt;     &gt;     }
&gt;     &gt;     &gt;   catch( itk::ExceptionObject &amp; exp )
&gt;     &gt;     &gt;     {
&gt;     &gt;     &gt;     std::cerr &lt;&lt; "Exception thrown while
reading the input file
&gt;     " &lt;&lt; std::endl;
&gt;     &gt;     &gt;     std::cerr &lt;&lt; exp &lt;&lt; std::endl;
&gt;     &gt;     &gt;     return EXIT_FAILURE;
&gt;     &gt;     &gt;     }
&gt;     &gt;     &gt;      &gt;      &gt;      &gt;      &gt;  
MeshType::Pointer mesh = reader-&gt;GetOutput();
&gt;     &gt;     &gt;      &gt;   GaussianCurvatureFilterType::Pointer
gaussian_curvature =
&gt;     GaussianCurvatureFilterType::New();
&gt;     &gt;     &gt;   MeanCurvatureFilterType::Pointer mean_curvature =
&gt;     MeanCurvatureFilterType::New();
&gt;     &gt;     &gt;   MinCurvatureFilterType::Pointer  min_curvature =
&gt;     MinCurvatureFilterType::New();
&gt;     &gt;     &gt;   MaxCurvatureFilterType::Pointer max_curvature =
&gt;     MaxCurvatureFilterType::New();
&gt;     &gt;     &gt;      &gt;      &gt;   MeshType::Pointer output;
&gt;     &gt;     &gt;   std::string output_filename;
&gt;     &gt;     &gt;      &gt;   switch(Curv_choice)
&gt;     &gt;     &gt;   {
&gt;     &gt;     &gt;     case 0:
&gt;     &gt;     &gt;       gaussian_curvature-&gt;SetInput( mesh );
&gt;     &gt;     &gt;       gaussian_curvature-&gt;Update();
&gt;     &gt;     &gt;      &gt;       output =
gaussian_curvature-&gt;GetOutput();
&gt;     &gt;     &gt;       output_filename =
"gaussian_curvature..vtk";
&gt;     &gt;     &gt;       break;
&gt;     &gt;     &gt;     case 1:
&gt;     &gt;     &gt;       mean_curvature-&gt;SetInput( mesh );
&gt;     &gt;     &gt;       mean_curvature-&gt;Update();
&gt;     &gt;     &gt;      &gt;       output = mean_curvature-&gt;GetOutput();
&gt;     &gt;     &gt;       output_filename = "mean_curvature.vtk";
&gt;     &gt;     &gt;       break;
&gt;     &gt;     &gt;     case 2:
&gt;     &gt;     &gt;       min_curvature-&gt;SetInput( mesh );
&gt;     &gt;     &gt;       min_curvature-&gt;Update();
&gt;     &gt;     &gt;      &gt;       output = min_curvature-&gt;GetOutput();
&gt;     &gt;     &gt;       output_filename = "min_curvature.vtk";
&gt;     &gt;     &gt;       break;
&gt;     &gt;     &gt;     case 3:
&gt;     &gt;     &gt;       max_curvature-&gt;SetInput( mesh );
&gt;     &gt;     &gt;       max_curvature-&gt;Update();
&gt;     &gt;     &gt;      &gt;       output = max_curvature-&gt;GetOutput();
&gt;     &gt;     &gt;       output_filename = "max_curvature.vtk";
&gt;     &gt;     &gt;       break;
&gt;     &gt;     &gt;     default:
&gt;     &gt;     &gt;       std::cout &lt;&lt;"The second parameter
should be in between 0
&gt;     and 3"
&gt;     &gt;     &gt;         &lt;&lt;std::endl;
&gt;     &gt;     &gt;       return EXIT_FAILURE;
&gt;     &gt;     &gt;   }
&gt;     &gt;     &gt;      &gt;   typedef
itk::QEMeshScalarDataVTKPolyDataWriter&lt; MeshType &gt;
&gt;     WriterType;
&gt;     &gt;     &gt;   WriterType::Pointer writer = WriterType::New();
&gt;     &gt;     &gt;   writer-&gt;SetInput( output );
&gt;     &gt;     &gt;   writer-&gt;SetFileName( output_filename );
&gt;     &gt;     &gt;   writer-&gt;Update();
&gt;     &gt;     &gt;      &gt;   return EXIT_SUCCESS;
&gt;     &gt;     &gt; }
&gt;     &gt;     &gt;      &gt;     &gt; --- En date de : *Lun 23.2.09, Arnaud
Gelas
&gt;     /&lt;arnaud_gelas@hms.harvard.edu&gt;/* a écrit :
&gt;     &gt;     &gt;     De: Arnaud Gelas
&lt;arnaud_gelas@hms.harvard.edu&gt;
&gt;     &gt;     Objet: Re: [Insight-users] link error: cannot open file
&gt;     &gt;     'ITKReview.lib'
&gt;     &gt;     À: "martine_lef@yahoo.fr"
&lt;martine_lef@yahoo.fr&gt;
&gt;     &gt;     Cc: "insight itk" &lt;insight-users@itk.org&gt;,
"Luis
&gt;     Ibanez"
&gt;     &gt;     &lt;luis.ibanez@kitware.com&gt;
&gt;     &gt;     Date: Lundi 23 Février 2009, 14h51
&gt;     &gt;     &gt;     Dear Martine,
&gt;     &gt;     &gt;     There is no library for ITKReview (Note that you can
see all generated
&gt;     &gt;     libraries your BUILD_DIRECTORY/bin/ ), you should link
instead with
&gt;     &gt;     ITKQuadEdgeMesh since you want to use the
QuadEdgeMeshDataStructure.
&gt;     &gt;     Then, in your main you should use itk::QuadEdgeMesh instead
of
&gt;     itk::Mesh, if
&gt;     &gt;     you want to estimate curvatures...
&gt;     &gt;     &gt;     You can find examples/tests in Testing/Code/Review
directory:
&gt;     &gt;     &gt;        * itkQuadEdgeMeshGaussianCurvatureTest.cxx
&gt;     &gt;        * itkQuadEdgeMeshMeanCurvatureTest.cxx
&gt;     &gt;        * itkQuadEdgeMeshMaxCurvatureTest.cxx
&gt;     &gt;        * itkQuadEdgeMeshMinCurvatureTest.cxx
&gt;     &gt;     &gt;     Have a good day,
&gt;     &gt;     Arnaud
&gt;     &gt;     &gt;     Martine Lefevre wrote:
&gt;     &gt;     &gt; Dear Luis and itk users,
&gt;     &gt;     &gt;     &gt; I try to do some curvature estimation using the
filter
&gt;     proposed by Gelas
&gt;     &gt;     Arnauld which is based on a surface mesh data structure
&gt;     itk::QuadEdgeMesh. For
&gt;     &gt;     this reason I include the ITKReview in my CMakeLists file..   
 &gt;     In building the project I get the following link error:
&gt;     &gt;     &gt;     &gt; 1&gt;Linking...
&gt;     &gt;     &gt;     &gt; 1&gt;     LINK : fatal error LNK1104: cannot
open file
&gt;     &gt;     'ITKReview.lib'
&gt;     &gt;     &gt;     &gt;  Do you know the cause of this error?
&gt;     &gt;     &gt; Thank you in advance
&gt;     &gt;     &gt; Martine
&gt;     &gt;     &gt; I paste the code here and the CMakeLists file.
&gt;     &gt;     &gt;     &gt;      &gt;      &gt;      &gt; # This project is
designed
&gt;     to be built outside the Insight source tree..
&gt;     &gt;     &gt;     &gt;      &gt; PROJECT(Curvature)
&gt;     &gt;     &gt;     &gt;      &gt;      &gt; FIND_PACKAGE ( ITK)
&gt;     &gt;     &gt;     &gt; IF ( ITK_FOUND)
&gt;     &gt;     &gt;     &gt; INCLUDE( ${USE_ITK_FILE} )
&gt;     &gt;     &gt;     &gt; ENDIF( ITK_FOUND)
&gt;     &gt;     &gt;     &gt;      &gt; FIND_PACKAGE ( VTK)
&gt;     &gt;     &gt;     &gt; IF ( VTK_FOUND)
&gt;     &gt;     &gt;     &gt; INCLUDE( ${USE_VTK_FILE} )
&gt;     &gt;     &gt;     &gt; ENDIF( VTK_FOUND)
&gt;     &gt;     &gt;     &gt;      &gt; ADD_EXECUTABLE(Curvature
Curvature.cxx)
&gt;     &gt;     &gt;     &gt; TARGET_LINK_LIBRARIES(Curvature ITKBasicFilters
&gt;     ITKReview ITKSpatialObject
&gt;     &gt;     ITKNumerics ITKIO ITKCommon ITKAlgorithms vtkRendering
&gt;     vtkVolumeRendering vtkIO
&gt;     &gt;     vtkWidgets vtkGraphics vtkImaging vtkFiltering vtkCommon)
&gt;     &gt;     &gt;     &gt;      &gt;      &gt;      &gt;      &gt; //
surface
&gt;     extraction with itk: itkBinaryMask3DMeshSource
&gt;     &gt;     &gt;     &gt; // SurfaceExtraction.cxx
&gt;     &gt;     &gt;     &gt;      &gt; #include
"itkImageFileReader.h"
&gt;     &gt;     &gt;     &gt; #include
"itkBinaryMask3DMeshSource.h"
&gt;     &gt;     &gt;     &gt; #include "itkImage.h"
&gt;     &gt;     &gt;     &gt; #include "itkMesh.h"
&gt;     &gt;     &gt;     &gt;      &gt; //#include
"itkQuadEdgeMesh.h"
&gt;     &gt;     &gt;     &gt;      &gt; int main(void )
&gt;     &gt;     &gt;     &gt; {
&gt;     &gt;     &gt;     &gt;   const unsigned int Dimension = 3;
&gt;     &gt;     &gt;     &gt;   //typedef unsigned char  PixelType;
&gt;     &gt;     &gt;     &gt;   typedef float  PixelType;
&gt;     &gt;     &gt;     &gt;      &gt;   typedef itk::Image&lt; PixelType,
Dimension
&gt;     &gt;   ImageType;
&gt;     &gt;     &gt;     &gt;   typedef itk::ImageFileReader&lt; ImageType
&gt;       ReaderType;
&gt;     &gt;     &gt;     &gt;   ReaderType::Pointer reader =
ReaderType::New();
&gt;     &gt;     &gt;     &gt;     
reader-&gt;SetFileName("C:/Images/Volume.hdr");     &gt;      &gt;    
    &gt;   try
&gt;     &gt;     &gt;     &gt;     {
&gt;     &gt;     &gt;     &gt;     reader-&gt;Update();
&gt;     &gt;     &gt;     &gt;     }
&gt;     &gt;     &gt;     &gt;   catch( itk::ExceptionObject &amp; exp )
&gt;     &gt;     &gt;     &gt;     {
&gt;     &gt;     &gt;     &gt;     std::cerr &lt;&lt; "Exception thrown
while
&gt;     reading the input file
&gt;     &gt;     " &lt;&lt; std::endl;
&gt;     &gt;     &gt;     &gt;     std::cerr &lt;&lt; exp &lt;&lt; std::endl;
&gt;     &gt;     &gt;     &gt;     return EXIT_FAILURE;
&gt;     &gt;     &gt;     &gt;     }
&gt;     &gt;     &gt;     &gt;      &gt;      &gt;   typedef
itk::Mesh&lt;double&gt;                            MeshType;
&gt;     &gt;     &gt;     &gt;   typedef itk::BinaryMask3DMeshSource&lt;
ImageType,
&gt;     MeshType &gt;      MeshSourceType;
&gt;     &gt;     &gt;     &gt;   MeshSourceType::Pointer meshSource =
&gt;     MeshSourceType::New();
&gt;     &gt;     &gt;     &gt;      &gt;   const PixelType objectValue =
&gt;     static_cast&lt;PixelType&gt;( 255.0);
&gt;     &gt;     &gt;     &gt;      &gt;   meshSource-&gt;SetObjectValue(
objectValue
&gt;     );
&gt;     &gt;     &gt;     &gt;   meshSource-&gt;SetInput(
reader-&gt;GetOutput() );
&gt;     &gt;     &gt;     &gt;      &gt;   try
&gt;     &gt;     &gt;     &gt;     {
&gt;     &gt;     &gt;     &gt;     meshSource-&gt;Update();
&gt;     &gt;     &gt;     &gt;     }
&gt;     &gt;     &gt;     &gt;   catch( itk::ExceptionObject &amp; exp )
&gt;     &gt;     &gt;     &gt;     {
&gt;     &gt;     &gt;     &gt;     std::cerr &lt;&lt; "Exception thrown
during
&gt;     Update() "
&gt;     &gt;     &lt;&lt; std::endl;
&gt;     &gt;     &gt;     &gt;     std::cerr &lt;&lt; exp &lt;&lt; std::endl;
&gt;     &gt;     &gt;     &gt;     return EXIT_FAILURE;
&gt;     &gt;     &gt;     &gt;     }
&gt;     &gt;     &gt;     &gt;      &gt;   std::cout &lt;&lt; "Nodes =
"
&gt;     &lt;&lt;
&gt;     &gt;     meshSource-&gt;GetNumberOfNodes() &lt;&lt; std::endl;
&gt;     &gt;     &gt;     &gt;   std::cout &lt;&lt; "Cells = "
&lt;&lt;
&gt;     &gt;     meshSource-&gt;GetNumberOfCells() &lt;&lt; std::endl;
&gt;     &gt;     &gt;     &gt;   std::cout &lt;&lt; "Code end !"
&lt;&lt;
&gt;     std::endl;
&gt;     &gt;     &gt;     &gt;   std::cin.get();
&gt;     &gt;     &gt;     &gt;   return EXIT_SUCCESS;
&gt;     &gt;     &gt;     &gt; }
&gt;     &gt;     &gt;     &gt;      &gt;      &gt;     &gt;                  
&gt; 
&gt;               
&gt; 

</PRE></BLOCKQUOTE></td></tr></table><br>