OpenWalnut  1.5.0dev
WResampleByMaxPoints.cpp
1 //---------------------------------------------------------------------------
2 //
3 // Project: OpenWalnut ( http://www.openwalnut.org )
4 //
5 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
6 // For more information see http://www.openwalnut.org/copying
7 //
8 // This file is part of OpenWalnut.
9 //
10 // OpenWalnut is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // OpenWalnut is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public License
21 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
22 //
23 //---------------------------------------------------------------------------
24 
25 #include <vector>
26 #include <cmath>
27 
28 #include <osg/Vec3>
29 
30 #include <core/common/math/WMath.h>
31 
32 #include "WResampleByMaxPoints.h"
33 
35  : WObjectNDIP< WResampling_I >( "Maximal Points Resampling", "Each fiber has no more than the given number "
36  " of points and if a fiber has already lesser points, it is tested if additional segment length can be applied" )
37 {
38  m_numPoints = m_properties->addProperty( "Max. #Points", "Maximal number of points", 20 );
39  m_numPoints->setMin( 2 );
40  m_segLength = m_properties->addProperty( "Min. Length", "If fiber has less points it is also resampled to the given segment length", 0.0 );
41  m_segLength->setMin( 0.0 );
42 }
43 
45 {
46  if( static_cast< int >( fib.size() ) > m_numPoints->get( true ) )
47  {
48  fib.resampleByNumberOfPoints( m_numPoints->get( true ) );
49  }
50 
51  WFiber test( fib );
52  if( m_segLength->get( true ) != 0.0 )
53  {
54  test.resampleBySegmentLength( m_segLength->get( true ) );
55  }
56 
57  if( static_cast< int >( test.size() ) < m_numPoints->get( true ) && test.size() < fib.size() )
58  {
59  return test;
60  }
61  return fib;
62 }
Represents a neural pathway.
Definition: WFiber.h:40
void resampleByNumberOfPoints(size_t numPoints)
Resample this line so it has a number of given points afterwards.
Definition: WLine.cpp:78
void resampleBySegmentLength(double newSegementLength)
Resample this line so there are only segements of the given length.
Definition: WLine.cpp:147
size_type size() const
Wrapper around std::vector member function.
Definition: WMixinVector.h:267
This is a base class for everything which has a Name,Description,Icon and Properties (=NDIP).
Definition: WObjectNDIP.h:42
WProperties::SPtr m_properties
the properties of the object.
Definition: WObjectNDIP.h:99
WPropInt m_numPoints
Number of max sample points per fiber.
virtual WFiber resample(WFiber fib) const
The given fiber is resampled by segment length and a copy is returned.
WPropDouble m_segLength
Number of new sample points all tracts are resampled to.
WResampleByMaxPoints()
Constructor.
Interface for Resampling fibers.
Definition: WResampling_I.h:36