1 #include <IO/ImageJSkeletonWriter.h>
2 #include <cpPlugins/QT/SaveFileDialog.h>
4 #include <cpPluginsExtensions/Skeleton.h>
5 #include <cpExtensions/DataStructures/Skeleton.h>
6 #include <cpExtensions/Utility.h>
9 # include <QApplication>
10 #endif // cpPlugins_QT4
12 // -------------------------------------------------------------------------
13 QDialog* cpPluginsIO::ImageJSkeletonWriter::
17 cpPlugins::QT::SaveFileDialog* dlg = NULL;
18 if( QApplication::instance( ) != NULL )
20 dlg = new cpPlugins::QT::SaveFileDialog( );
21 dlg->SetParameters( &( this->m_Parameters ), "FileName" );
25 #else // cpPlugins_QT4
27 #endif // cpPlugins_QT4
30 // -------------------------------------------------------------------------
31 cpPluginsIO::ImageJSkeletonWriter::
32 ImageJSkeletonWriter( )
35 typedef cpPluginsExtensions::Skeleton _TSkeleton;
36 this->_ConfigureInput< _TSkeleton >( "Input", true, false );
38 this->m_Parameters.ConfigureAsSaveFileName( "FileName", "" );
39 this->m_Parameters.SetAcceptedFileExtensions(
41 "ImageJ files (*.txt)"
45 // -------------------------------------------------------------------------
46 cpPluginsIO::ImageJSkeletonWriter::
47 ~ImageJSkeletonWriter( )
51 // -------------------------------------------------------------------------
52 void cpPluginsIO::ImageJSkeletonWriter::
55 auto o = this->GetInputData( "Input" );
56 cpPlugins_Demangle_Skeleton_All_1( o, _GD0 )
57 this->_Error( "Invalid input skeleton type." );
60 // -------------------------------------------------------------------------
61 template< class _TSkeleton >
62 void cpPluginsIO::ImageJSkeletonWriter::
63 _GD0( _TSkeleton* skeleton )
65 std::stringstream data;
68 auto mIt = skeleton->BeginEdgesRows( );
69 for( ; mIt != skeleton->EndEdgesRows( ); ++mIt )
71 auto rIt = mIt->second.begin( );
72 for( ; rIt != mIt->second.end( ); ++rIt )
74 auto eIt = rIt->second.begin( );
75 for( ; eIt != rIt->second.end( ); ++eIt )
78 auto p0 = path->GetSmoothPoint( 0 );
79 auto p1 = path->GetSmoothPoint( 1 );
80 double length = p1.EuclideanDistanceTo( p0 );
82 << id << "\t1\t" << length << "\t"
83 << p0[ 0 ] << "\t" << p0[ 1 ] << "\t"<< p0[ 2 ] << "\t"
84 << p1[ 0 ] << "\t" << p1[ 1 ] << "\t"<< p1[ 2 ] << "\t"
85 << p1.EuclideanDistanceTo( p0 ) << std::endl;
97 data.str( ), this->m_Parameters.GetSaveFileName( "FileName" )
101 this->_Error( "Could not write on ImageJ file." );