X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=plugins%2FIO%2FImageJSkeletonWriter.cxx;fp=plugins%2FIO%2FImageJSkeletonWriter.cxx;h=482000f31c9be1192535bc2cd4709914a5d207b4;hb=5e682cefc1d781eacc867d103891f77f79fb9bab;hp=0000000000000000000000000000000000000000;hpb=3c250e0e573d7f08276aefd93a5336f128e6b1a7;p=cpPlugins.git diff --git a/plugins/IO/ImageJSkeletonWriter.cxx b/plugins/IO/ImageJSkeletonWriter.cxx new file mode 100644 index 0000000..482000f --- /dev/null +++ b/plugins/IO/ImageJSkeletonWriter.cxx @@ -0,0 +1,104 @@ +#include +#include + +#include +#include +#include + +#ifdef cpPlugins_QT4 +# include +#endif // cpPlugins_QT4 + +// ------------------------------------------------------------------------- +QDialog* cpPluginsIO::ImageJSkeletonWriter:: +CreateQDialog( ) +{ +#ifdef cpPlugins_QT4 + cpPlugins::QT::SaveFileDialog* dlg = NULL; + if( QApplication::instance( ) != NULL ) + { + dlg = new cpPlugins::QT::SaveFileDialog( ); + dlg->SetParameters( &( this->m_Parameters ), "FileName" ); + + } // fi + return( dlg ); +#else // cpPlugins_QT4 + return( NULL ); +#endif // cpPlugins_QT4 +} + +// ------------------------------------------------------------------------- +cpPluginsIO::ImageJSkeletonWriter:: +ImageJSkeletonWriter( ) + : Superclass( ) +{ + typedef cpPluginsExtensions::Skeleton _TSkeleton; + this->_ConfigureInput< _TSkeleton >( "Input", true, false ); + + this->m_Parameters.ConfigureAsSaveFileName( "FileName", "" ); + this->m_Parameters.SetAcceptedFileExtensions( + "FileName", + "ImageJ files (*.txt)" + ); +} + +// ------------------------------------------------------------------------- +cpPluginsIO::ImageJSkeletonWriter:: +~ImageJSkeletonWriter( ) +{ +} + +// ------------------------------------------------------------------------- +void cpPluginsIO::ImageJSkeletonWriter:: +_GenerateData( ) +{ + auto o = this->GetInputData( "Input" ); + cpPlugins_Demangle_Skeleton_All_1( o, _GD0 ) + this->_Error( "Invalid input skeleton type." ); +} + +// ------------------------------------------------------------------------- +template< class _TSkeleton > +void cpPluginsIO::ImageJSkeletonWriter:: +_GD0( _TSkeleton* skeleton ) +{ + std::stringstream data; + unsigned long id = 1; + + auto mIt = skeleton->BeginEdgesRows( ); + for( ; mIt != skeleton->EndEdgesRows( ); ++mIt ) + { + auto rIt = mIt->second.begin( ); + for( ; rIt != mIt->second.end( ); ++rIt ) + { + auto eIt = rIt->second.begin( ); + for( ; eIt != rIt->second.end( ); ++eIt ) + { + auto path = *eIt; + auto p0 = path->GetSmoothPoint( 0 ); + auto p1 = path->GetSmoothPoint( 1 ); + double length = p1.EuclideanDistanceTo( p0 ); + data + << id << "\t1\t" << length << "\t" + << p0[ 0 ] << "\t" << p0[ 1 ] << "\t"<< p0[ 2 ] << "\t" + << p1[ 0 ] << "\t" << p1[ 1 ] << "\t"<< p1[ 2 ] << "\t" + << p1.EuclideanDistanceTo( p0 ) << std::endl; + id++; + + } // rof + + } // rof + + } // rof + + if( + !( + cpExtensions::Write( + data.str( ), this->m_Parameters.GetSaveFileName( "FileName" ) + ) + ) + ) + this->_Error( "Could not write on ImageJ file." ); +} + +// eof - $RCSfile$