]> Creatis software - bbtk.git/blob - packages/itk/src/bbitkImageRegion.cxx
=== MAJOR RELEASE ====
[bbtk.git] / packages / itk / src / bbitkImageRegion.cxx
1 #ifdef _USE_ITK_
2
3 #include "bbitkImageRegion.h"
4 #include "bbitkPackage.h"
5
6 namespace bbitk
7 {
8
9   BBTK_BLACK_BOX_IMPLEMENTATION(ImageRegionCreator,
10                                 bbtk::AtomicBlackBox);
11
12   BBTK_ADD_BLACK_BOX_TO_PACKAGE(itk,ImageRegionCreator);
13
14
15   void ImageRegionCreator::DoIt()
16   {
17     const std::vector<long>& index = bbGetInputIndex();
18     const std::vector<long>& size = bbGetInputSize();
19     //             std::cout<< "isize="<<index.size()<<std::endl;
20     //     std::cout<< "ssize="<<size.size()<<std::endl;
21     unsigned long maxs = index.size() > size.size() ? index.size() : size.size();
22     switch (maxs) 
23       {
24       case 2 : DoIt<2>(); break;
25       case 3 : DoIt<3>(); break;
26       case 4 : DoIt<4>(); break;
27       default : bbtkError("ImageRegionCreator : cannot build a region of dimension "<<maxs);
28       }
29      
30
31   }
32
33   template <unsigned int Dimension>
34   void ImageRegionCreator::DoIt()
35   {
36     std::vector<long> index = bbGetInputIndex();
37     std::vector<long> size = bbGetInputSize();
38     //             std::cout<< "isize="<<index.size()<<std::endl;
39     //             std::cout<< "ssize="<<size.size()<<std::endl;
40  
41     int ds = index.size() - size.size();
42     if (ds<0) 
43       {
44         for (int i=0;i<-ds;++i) 
45  index.push_back(0);
46       }
47     else 
48       {
49         for (int i=0;i<ds;++i) size.push_back(0);
50       }
51
52     typename itk::ImageRegion<Dimension>::IndexType I;
53     typename itk::ImageRegion<Dimension>::SizeType S;
54
55     std::vector<long>::const_iterator ii,si;
56     int d(0);
57     for (ii=index.begin(), si=size.begin(); 
58          ii!=index.end(); ++ii, ++si, ++d)
59       {
60         I[d] = *ii;
61         S[d] = *si;
62         //  std::cout << "o="<<*ii<<" d="<<*si<<std::endl;
63       }
64
65
66     bbSetOutputOut ( itk::ImageRegion<Dimension>(I,S) );
67   }
68
69 }
70 // eo namespace
71
72 #endif