[Insight-developers] compilation errors in MapContainer, CellInterface and AutoPointer

Gaëtan Lehmann gaetan.lehmann at jouy.inra.fr
Sun Jun 28 14:36:46 EDT 2009


Dear developers,

I need some advices on the best way to fix the errors below!
I'm quite sure that the fix I would make by myself in that part of the  
toolkit wouldn't be good enough.

I've made a clean wrapping of the basic classes for QuadEdgeMesh. I  
just need to fix ITK before commiting that work to WrapITK, to avoid  
reporting the errors on the dashboard.

Thanks,

Gaëtan


Le 16 mai 09 à 12:30, Gaëtan Lehmann a écrit :

>
> Hi,
>
> Alex was in my lab last wednesday, and we began to wrap the  
> QuadEdgeMesh stuff in WrapITK. This is a quite complex set of  
> classes, which is highlighting some problems both in WrapITK and  
> ITK. I'm taking the WrapITK's problem — here are the other ones:
>
> * I get an error in the method void  
> itk::MapContainer::Reserve(ElementIdentifier):
>
>  /Users/glehmann/src/Insight/Code/Common/itkMapContainer.txx: In  
> member function ‘void itk::MapContainer<TElementIdentifier,  
> TElement>::Reserve(TElementIdentifier) [with TElementIdentifier =  
> itk::Mesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,  
> bool, float, float> >::BoundaryAssignmentIdentifier, TElement = long  
> unsigned int]’:
>  /Users/glehmann/src/contrib-itk/quadmesh/build/Wrapping/ 
> wrap_itkBinaryMask3DMeshSourcePython.cpp:22596:   instantiated from  
> here
>  /Users/glehmann/src/Insight/Code/Common/itkMapContainer.txx:248:  
> error: conversion from ‘long unsigned int’ to non-scalar type  
> ‘itk::Mesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,  
> bool, float, float> >::BoundaryAssignmentIdentifier’ requested
>
> The problematic code is:
>
>  template <typename TElementIdentifier, typename TElement>
>  void
>  MapContainer< TElementIdentifier , TElement >
>  ::Reserve(ElementIdentifier sz)
>  {
>    ElementIdentifier curSize = this->Size();
>    while ( curSize < sz )
>      {
>      this->CreateIndex(curSize);
>      curSize = this->Size();
>      }
>  }
>
> Either that code, which tries to convert a number to a class, or the  
> type used for TElementIdentifier (itk::Mesh<double, 3u,  
> itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float>  
> >::BoundaryAssignmentIdentifier), is wrong here.
> Any idea about how to fix that?
>
>
>
> * The macro itkCellCommonTypedefs( celltype ) in itkCellInterface.h  
> provides some common typedefs for the cell types, but also a New()  
> method, which makes swig generate invalid code.
>
>         SelfAutoPointer   New(void) {                 \
>                SelfAutoPointer ptr( new celltype );   \
>                ptr.TakeOwnership();                   \
>                return ptr;                            \
>                }                                      \
>
> This New() method looks quite strange to me, because it is not  
> static, and thus already require an object to be used. Also, I tried  
> to simply comment that method in the macro (and in  
> itkQuadEdgeMeshLineCell.h/txx), and it works - no code seems to use  
> it.
> So, is it a good fix to simply drop that method?
>
>
>
> * The method itk::AutoPointer::Print produce an error when built
>
>  /usr/local/include/InsightToolkit/Common/itkAutoPointer.h: In  
> member function ‘TObjectType*  
> itk::AutoPointer<TObjectType>::Print(std::ostream&) const [with  
> TObjectType = itk::CellInterface<double,  
> itk::QuadEdgeMeshCellTraitsInfo<3, float, float, long unsigned int,  
> long unsigned int, unsigned char, itk::QuadEdgeMeshPoint<float, 3u,  
> itk::GeometricalQuadEdge<long unsigned int, long unsigned int, bool,  
> bool, true> >, itk::MapContainer<long unsigned int,  
> itk::QuadEdgeMeshPoint<float, 3u, itk::GeometricalQuadEdge<long  
> unsigned int, long unsigned int, bool, bool, true> > >,  
> std::set<long unsigned int, std::less<long unsigned int>,  
> std::allocator<std::_Bit_type> >, itk::GeometricalQuadEdge<long  
> unsigned int, long unsigned int, bool, bool, true> > >]’:
>  /usr/local/include/InsightToolkit/Common/itkAutoPointer.h:189:  
> error: ‘class itk::CellInterface<double,  
> itk::QuadEdgeMeshCellTraitsInfo<3, float, float, long unsigned int,  
> long unsigned int, unsigned char, itk::QuadEdgeMeshPoint<float, 3u,  
> itk::GeometricalQuadEdge<long unsigned int, long unsigned int, bool,  
> bool, true> >, itk::MapContainer<long unsigned int,  
> itk::QuadEdgeMeshPoint<float, 3u, itk::GeometricalQuadEdge<long  
> unsigned int, long unsigned int, bool, bool, true> > >,  
> std::set<long unsigned int, std::less<long unsigned int>,  
> std::allocator<std::_Bit_type> >, itk::GeometricalQuadEdge<long  
> unsigned int, long unsigned int, bool, bool, true> > >’ has no  
> member named ‘Print’
>
>  ObjectType *Print (std::ostream& os) const
>    {
>    // This prints the object pointed to by the pointer
>    (*m_Pointer).Print(os);
>    os << "Owner: " << m_IsOwner << std::endl;
>    return m_Pointer;
>    }
>
> the itk::CellInterface class doesn't define a Print method, so the  
> Print method in AutoPointer seems to be wrong. What is the better  
> fix - drop the Print method in itk::AutoPointer, or adding a Print  
> method in all the cell classes?
>
> * The template are very complex to instantiate. There is a lot of  
> template parameters to give. It would be great to simplify the  
> instantiation by providing good enough default values.
>
> Thanks again Alex for your presentation. My colleagues were very  
> impressed by your project and your work :-)
>
> Gaëtan
>
>
> -- 
> Gaëtan Lehmann
> Biologie du Développement et de la Reproduction
> INRA de Jouy-en-Josas (France)
> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
> http://voxel.jouy.inra.fr  http://www.mandriva.org
> http://www.itk.org  http://www.clavier-dvorak.org
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the ITK FAQ at: http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers

-- 
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
http://voxel.jouy.inra.fr  http://www.itk.org
http://www.mandriva.org  http://www.bepo.fr

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 203 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20090628/8eb5bb6b/attachment.pgp>


More information about the Insight-developers mailing list