]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Algorithms/SkeletonWriter.hxx
yet another refactoring
[cpPlugins.git] / lib / cpExtensions / Algorithms / SkeletonWriter.hxx
diff --git a/lib/cpExtensions/Algorithms/SkeletonWriter.hxx b/lib/cpExtensions/Algorithms/SkeletonWriter.hxx
new file mode 100644 (file)
index 0000000..76e05c1
--- /dev/null
@@ -0,0 +1,127 @@
+// -------------------------------------------------------------------------
+// @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
+// -------------------------------------------------------------------------
+
+#ifndef __cpExtensions__Algorithms__SkeletonWriter__hxx__
+#define __cpExtensions__Algorithms__SkeletonWriter__hxx__
+
+// -------------------------------------------------------------------------
+template< class _TSkeleton >
+const _TSkeleton* cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >::
+GetInput( ) const
+{
+  return(
+    dynamic_cast< const TSkeleton* >(
+      this->itk::ProcessObject::GetInput( 0 )
+      )
+    );
+}
+
+// -------------------------------------------------------------------------
+template< class _TSkeleton >
+void cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >::
+SetInput( const _TSkeleton* skeleton )
+{
+  this->itk::ProcessObject::SetNthInput(
+    0, const_cast< TSkeleton* >( skeleton )
+    );
+}
+
+// -------------------------------------------------------------------------
+template< class _TSkeleton >
+void cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >::
+Update( )
+{
+  TSkeleton* input = const_cast< TSkeleton* >( this->GetInput( ) );
+  if( input != NULL )
+  {
+    input->UpdateOutputInformation( );
+    input->UpdateOutputData( );
+    this->GenerateData( );
+    this->ReleaseInputs( );
+
+  } // fi
+}
+
+// -------------------------------------------------------------------------
+template< class _TSkeleton >
+cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >::
+SkeletonWriter( )
+  : Superclass( ),
+    m_FileName( "" )
+{
+  this->SetNumberOfRequiredInputs( 1 );
+}
+
+// -------------------------------------------------------------------------
+template< class _TSkeleton >
+cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >::
+~SkeletonWriter( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< class _TSkeleton >
+void cpExtensions::Algorithms::SkeletonWriter< _TSkeleton >::
+GenerateData( )
+{
+  const TSkeleton* sk = this->GetInput( );
+  std::stringstream out;
+  out << TSkeleton::Dimension << std::endl;
+
+  // Write
+  auto mIt = sk->BeginEdgesRows( );
+  for( ; mIt != sk->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;
+        unsigned int size = path->GetSize( );
+        auto spa = path->GetSpacing( );
+        auto ori = path->GetOrigin( );
+        auto dir = path->GetDirection( );
+        out << size << std::endl;
+        for( unsigned int d = 0; d < TSkeleton::Dimension; ++d )
+          out << spa[ d ] << " ";
+        out << std::endl;
+        for( unsigned int d = 0; d < TSkeleton::Dimension; ++d )
+          out << ori[ d ] << " ";
+        out << std::endl;
+        for( unsigned int d = 0; d < TSkeleton::Dimension; ++d )
+          for( unsigned int e = 0; e < TSkeleton::Dimension; ++e )
+          out << dir[ d ][ e ] << " ";
+        out << std::endl;
+
+        for( unsigned int i = 0; i < path->GetSize( ); ++i )
+        {
+          auto v = path->GetVertex( i );
+          for( unsigned int d = 0; d < TSkeleton::Dimension; ++d )
+            out << v[ d ] << " ";
+
+        } // rof
+        out << std::endl;
+
+      } // rof
+
+    } // rof
+
+  } // rof
+  out << "0" << std::endl;
+
+  /* TODO
+     if( !( cpExtensions::Write( out.str( ), this->m_FileName ) ) )
+     itkExceptionMacro(
+     << "Unable to write skeleton to \""
+     << this->m_FileName
+     << "\""
+     );
+  */
+}
+
+#endif // __cpExtensions__Algorithms__SkeletonWriter__hxx__
+
+// eof - $RCSfile$