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