Add isManifold and IsCLosed methods to AIF/AIFMesh datastructure
Start to implement FindConsistentFaceOrientation
Merge branch 'master' of github.com:MEPP-team/Gharial
Add a mechanism to generate unique Id for each filter in the BaseFilter thanks to the use of the constructor with zero argument by derived classes.

Add 2 methods to the pipeline : Get and IsPresent
Pipeline improvement : 2 new methods :
 - Get(std::string FilterInstanceName)
 - IsPresent(std::string FilterInstanceName)

use :
Mepp::BaseFilter::PtrSelfType Res = p.Get( readerFilter->ToString() ) ;

The method ToString is now available for each Filter type and give a unique string for each filter. This string can then be used to retrieve
the corresponding filter in the pipeline.

The current implementation is linear in the number of filters, but later
an std::map could be used to speed up the process.

Each filter class now have the 2 following methods :
static std::string GetClassName() {  return std::string("MeshFilter") ; }
std::string GetClassNameNonStatic() const { return GetClassName() ; }

The first one is a static method to be given to FunctorNew(){ Mepp::ObjectFactory::GetInstance()
        ->Register(GetClassName(), this); }

The second method is the instance version of the first one, with a polymorphism mechanism to allow the method ToString to work properly.
Did the modifications asked by Martial
Pipeline easier for use :
now the Add method is no more templated and it accepts any kind of BaseFilter boost shared pointer.
Therefore now, we can have something like that :
Mepp::BaseFilter::PtrSelfType smoothingMeshFilter
    = Mepp::ObjectFactory::GetInstance()
    ->CreateObject<Remeshing::LaplacianSmoothingMeshFilter_OpenMesh>("LaplacianSmoothingMeshFilter_OpenMesh");

p.Add(smoothingMeshFilter);
Pipeline : add the following templated method :
 template < typename TProcessingFilter >
  typename ObjectFactory::Wrap<TProcessingFilter>::PtrObjectType
	  AddProcessingFilter()

This method allows to replace :
typedef Remeshing::LaplacianSmoothingMeshFilter_OpenMesh ProcessingFilterType ;
Mepp::BaseFilter::PtrSelfType smoothingMeshFilter
    = Mepp::ObjectFactory::GetInstance()->CreateObject<ProcessingFilterType>(ProcessingFilterType::GetClassName());
  p.Add(smoothingMeshFilter);

By

typedef Remeshing::LaplacianSmoothingMeshFilter_OpenMesh ProcessingFilterType ;
ProcessingFilterType::PtrSelfType smoothingMeshFilter = p.AddProcessingFilter<ProcessingFilterType>() ;
Pipeline : add the following method :
template < typename TWriterAdapter >
  void AddWriterFilter( std::string FileName ) ;

Now to write a mesh file using the OpenMesh writer adapter, simply do :
typedef Adapters::OpenMesh_WriterAdapter WriterAdapterType ;
  p.AddWriterFilter<WriterAdapterType>( "aircraft_smoothed.off" ) ;

or

p.AddWriterFilter<dapters::OpenMesh_WriterAdapter>( "aircraft_smoothed.off" ) ;
solve current error for AddWriterFilter method by adding an extra template parameter for the MeshWriterFilterType (I cannot get it via exportation).
Pipeline : add the following method :
template < typename TReaderAdapter, typename TMeshReaderFilter>
  void AddReaderFilter( std::string FileName ) ;

Now file reading can be done by :
typedef Adapters::OpenMesh_ReaderAdapter MeshReaderAdapterType ;
  p.AddReaderFilter<MeshReaderAdapterType, MeshReaderFilterType> ( std::string(TEST_DATA_DIRECTORY)+"/Manifold/aircraft.off" ) ;

or

p.AddReaderFilter<Adapters::OpenMesh_ReaderAdapter, MeshReaderFilterType> ( std::string(TEST_DATA_DIRECTORY)+"/Manifold/aircraft.off" ) ;
Minor modifications : check up that
- all classes which inherit from Mepp::MeshReaderInterface have a class name finishing by "Adapter"
- all classes which inherit from Mepp::MeshWriterInterface have a class name finishing by "Adapter"
Minor modification : pipeline : use a std::list instead of a std::vector
Add return type for AddReaderFilter and AddWriterFilter
Merge pull request #54 from vvidal/master

Modifications done to be able to retrieve a filter from a unique std::string