1 #include <IO/ImageJSkeletonWriter.h>
2 #include <cpPlugins/DataObjects/Skeleton.h>
3 #include <cpPlugins/DataObjects/Skeleton_Demanglers.h>
4 #include <cpPlugins/QT/SaveFileDialog.h>
6 #include <cpExtensions/DataStructures/Skeleton.h>
7 #include <cpExtensions/Utility.h>
10 # include <QApplication>
11 #endif // cpPlugins_QT4
13 // -------------------------------------------------------------------------
14 QDialog* cpPluginsIO::ImageJSkeletonWriter::
18 cpPlugins::QT::SaveFileDialog* dlg = NULL;
19 if( QApplication::instance( ) != NULL )
21 dlg = new cpPlugins::QT::SaveFileDialog( );
22 dlg->SetParameters( &( this->m_Parameters ), "FileName" );
26 #else // cpPlugins_QT4
28 #endif // cpPlugins_QT4
31 // -------------------------------------------------------------------------
32 cpPluginsIO::ImageJSkeletonWriter::
33 ImageJSkeletonWriter( )
36 this->_ConfigureInput< cpPlugins::DataObjects::Skeleton >( "Input", true, false );
37 this->m_Parameters.ConfigureAsSaveFileName( "FileName", "" );
38 this->m_Parameters.SetAcceptedFileExtensions(
40 "ImageJ files (*.txt)"
44 // -------------------------------------------------------------------------
45 cpPluginsIO::ImageJSkeletonWriter::
46 ~ImageJSkeletonWriter( )
50 // -------------------------------------------------------------------------
51 void cpPluginsIO::ImageJSkeletonWriter::
54 auto o = this->GetInputData( "Input" );
55 cpPlugins_Demangle_Skeleton_All_1( o, _GD0 )
56 this->_Error( "Invalid input skeleton type." );
59 // -------------------------------------------------------------------------
60 template< class _TSkeleton >
61 void cpPluginsIO::ImageJSkeletonWriter::
62 _GD0( _TSkeleton* skeleton )
64 std::stringstream data;
67 auto mIt = skeleton->BeginEdgesRows( );
68 for( ; mIt != skeleton->EndEdgesRows( ); ++mIt )
70 auto rIt = mIt->second.begin( );
71 for( ; rIt != mIt->second.end( ); ++rIt )
73 auto eIt = rIt->second.begin( );
74 for( ; eIt != rIt->second.end( ); ++eIt )
77 auto p0 = path->GetSmoothPoint( 0 );
78 auto p1 = path->GetSmoothPoint( 1 );
79 double length = p1.EuclideanDistanceTo( p0 );
81 << id << "\t1\t" << length << "\t"
82 << p0[ 0 ] << "\t" << p0[ 1 ] << "\t"<< p0[ 2 ] << "\t"
83 << p1[ 0 ] << "\t" << p1[ 1 ] << "\t"<< p1[ 2 ] << "\t"
84 << p1.EuclideanDistanceTo( p0 ) << std::endl;
96 data.str( ), this->m_Parameters.GetSaveFileName( "FileName" )
100 this->_Error( "Could not write on ImageJ file." );