X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpExtensions%2FAlgorithms%2FSkeletonWriter.hxx;fp=lib%2FcpExtensions%2FAlgorithms%2FSkeletonWriter.hxx;h=15093f66301660e4b3999864814c293eed9bbf21;hb=42de9bd72fb773eb94d03b36a08c404cd82769a1;hp=76e05c117bdba8e356660d74c04ad7d37656d76a;hpb=1e17bee074cb6a3f17fa60c5d9b67f9f58723d4a;p=cpPlugins.git diff --git a/lib/cpExtensions/Algorithms/SkeletonWriter.hxx b/lib/cpExtensions/Algorithms/SkeletonWriter.hxx index 76e05c1..15093f6 100644 --- a/lib/cpExtensions/Algorithms/SkeletonWriter.hxx +++ b/lib/cpExtensions/Algorithms/SkeletonWriter.hxx @@ -5,6 +5,8 @@ #ifndef __cpExtensions__Algorithms__SkeletonWriter__hxx__ #define __cpExtensions__Algorithms__SkeletonWriter__hxx__ +#include + // ------------------------------------------------------------------------- template< class _TSkeleton > const _TSkeleton* cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >:: @@ -66,11 +68,53 @@ void cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >:: GenerateData( ) { const TSkeleton* sk = this->GetInput( ); - std::stringstream out; - out << TSkeleton::Dimension << std::endl; - - // Write auto mIt = sk->BeginEdgesRows( ); + auto rIt = mIt->second.begin( ); + auto eIt = rIt->second.begin( ); + auto path = *eIt; + + // Write base information + std::stringstream out1, out2; + out1 << TSkeleton::Dimension << std::endl; + auto spa = path->GetSpacing( ); + for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) + out1 << spa[ d ] << " "; + out1 << std::endl; + auto dir = path->GetDirection( ); + for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) + for( unsigned int e = 0; e < TSkeleton::Dimension; ++e ) + out1 << dir[ d ][ e ] << " "; + out1 << std::endl; + auto ori = path->GetOrigin( ); + for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) + out1 << ori[ d ] << " "; + out1 << std::endl; + + // End points + auto end_points = sk->GetEndPoints( ); + out1 << end_points.size( ) << std::endl; + for( auto point : end_points ) + { + for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) + out1 << point[ d ] << " "; + out1 << std::endl; + + } // rof + + // Bifurcations + auto bifurcations = sk->GetBifurcations( ); + out1 << bifurcations.size( ) << std::endl; + for( auto point : bifurcations ) + { + for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) + out1 << point[ d ] << " "; + out1 << std::endl; + + } // rof + + // Write paths + unsigned long pathCount = 0; + mIt = sk->BeginEdgesRows( ); for( ; mIt != sk->EndEdgesRows( ); ++mIt ) { auto rIt = mIt->second.begin( ); @@ -80,46 +124,34 @@ GenerateData( ) for( ; eIt != rIt->second.end( ); ++eIt ) { auto path = *eIt; + pathCount++; unsigned int size = path->GetSize( ); - auto spa = path->GetSpacing( ); - auto ori = path->GetOrigin( ); - auto dir = path->GetDirection( ); - out << size << std::endl; - for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) - out << spa[ d ] << " "; - out << std::endl; - for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) - out << ori[ d ] << " "; - out << std::endl; - for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) - for( unsigned int e = 0; e < TSkeleton::Dimension; ++e ) - out << dir[ d ][ e ] << " "; - out << std::endl; - + out2 << size << std::endl; for( unsigned int i = 0; i < path->GetSize( ); ++i ) { auto v = path->GetVertex( i ); for( unsigned int d = 0; d < TSkeleton::Dimension; ++d ) - out << v[ d ] << " "; + out2 << v[ d ] << " "; } // rof - out << std::endl; + out2 << std::endl; } // rof } // rof } // rof - out << "0" << std::endl; - - /* TODO - if( !( cpExtensions::Write( out.str( ), this->m_FileName ) ) ) - itkExceptionMacro( - << "Unable to write skeleton to \"" - << this->m_FileName - << "\"" - ); - */ + out1 << pathCount << std::endl << out2.str( ); + + // Real write + std::ofstream file_stream( this->m_FileName.c_str( ), std::ofstream::binary ); + if( !file_stream ) + itkExceptionMacro( + << "Unable to write skeleton to \"" + << this->m_FileName + << "\"" + ); + file_stream.write( out1.str( ).c_str( ), out1.str( ).size( ) ); } #endif // __cpExtensions__Algorithms__SkeletonWriter__hxx__