]> Creatis software - cpPlugins.git/blob - plugins/IO/ImageJSkeletonWriter.cxx
...
[cpPlugins.git] / plugins / IO / ImageJSkeletonWriter.cxx
1 #include <IO/ImageJSkeletonWriter.h>
2 #include <cpPlugins/QT/SaveFileDialog.h>
3
4 #include <Extensions/Skeleton.h>
5 #include <cpExtensions/DataStructures/Skeleton.h>
6 #include <cpExtensions/Utility.h>
7
8 #ifdef cpPlugins_QT4
9 #  include <QApplication>
10 #endif // cpPlugins_QT4
11
12 // -------------------------------------------------------------------------
13 QDialog* cpPluginsIO::ImageJSkeletonWriter::
14 CreateQDialog( )
15 {
16 #ifdef cpPlugins_QT4
17   cpPlugins::QT::SaveFileDialog* dlg = NULL;
18   if( QApplication::instance( ) != NULL )
19   {
20     dlg = new cpPlugins::QT::SaveFileDialog( );
21     dlg->SetParameters( &( this->m_Parameters ), "FileName" );
22
23   } // fi
24   return( dlg );
25 #else // cpPlugins_QT4
26   return( NULL );
27 #endif // cpPlugins_QT4
28 }
29
30 // -------------------------------------------------------------------------
31 cpPluginsIO::ImageJSkeletonWriter::
32 ImageJSkeletonWriter( )
33   : Superclass( )
34 {
35   typedef cpPluginsExtensions::Skeleton _TSkeleton;
36   this->_ConfigureInput< _TSkeleton >( "Input", true, false );
37
38   this->m_Parameters.ConfigureAsSaveFileName( "FileName", "" );
39   this->m_Parameters.SetAcceptedFileExtensions(
40     "FileName",
41     "ImageJ files (*.txt)"
42     );
43 }
44
45 // -------------------------------------------------------------------------
46 cpPluginsIO::ImageJSkeletonWriter::
47 ~ImageJSkeletonWriter( )
48 {
49 }
50
51 // -------------------------------------------------------------------------
52 void cpPluginsIO::ImageJSkeletonWriter::
53 _GenerateData( )
54 {
55   auto o = this->GetInputData( "Input" );
56   cpPlugins_Demangle_Skeleton_All_1( o, _GD0 )
57     this->_Error( "Invalid input skeleton type." );
58 }
59
60 // -------------------------------------------------------------------------
61 template< class _TSkeleton >
62 void cpPluginsIO::ImageJSkeletonWriter::
63 _GD0( _TSkeleton* skeleton )
64 {
65   std::stringstream data;
66   unsigned long id = 1;
67
68   auto mIt = skeleton->BeginEdgesRows( );
69   for( ; mIt != skeleton->EndEdgesRows( ); ++mIt )
70   {
71     auto rIt = mIt->second.begin( );
72     for( ; rIt != mIt->second.end( ); ++rIt )
73     {
74       auto eIt = rIt->second.begin( );
75       for( ; eIt != rIt->second.end( ); ++eIt )
76       {
77         auto path = *eIt;
78         auto p0 = path->GetSmoothPoint( 0 );
79         auto p1 = path->GetSmoothPoint( 1 );
80         double length = p1.EuclideanDistanceTo( p0 );
81         data
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;
86         id++;
87
88       } // rof
89
90     } // rof
91
92   } // rof
93
94   if(
95     !(
96       cpExtensions::Write(
97         data.str( ), this->m_Parameters.GetSaveFileName( "FileName" )
98         )
99       )
100     )
101     this->_Error( "Could not write on ImageJ file." );
102 }
103
104 // eof - $RCSfile$