[Insight-users] compilation error in DiscreteCurvatureEstimator
Martine Lefevre
martine_lef at yahoo.fr
Tue Feb 24 06:09:41 EST 2009
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.
As 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 at hms.harvard.edu> a écrit :
De: Arnaud Gelas <arnaud_gelas at hms.harvard.edu>
Objet: Re: [Insight-users] link error: cannot open file 'ITKReview.lib'
À: "martine_lef at yahoo.fr" <martine_lef at yahoo.fr>
Cc: "insight itk" <insight-users at itk.org>, "Luis Ibanez" <luis.ibanez at 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;
>
> }
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090224/c3d02489/attachment-0001.htm>
More information about the Insight-users
mailing list