#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$