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