36 #include "DGtal/topology/Object.h" 
   37 #include "DGtal/shapes/Shapes.h" 
   38 #include "DGtal/helpers/StdDefs.h" 
   39 #include "DGtal/io/boards/Board2D.h" 
   40 #include "DGtal/io/Color.h" 
   45 using namespace DGtal;
 
   64 template <
typename Object, 
typename Map>
 
   72   typedef typename DigitalSet::Domain 
Domain;
 
   73   typedef typename Domain::ConstIterator DomainConstIterator;
 
   75   Point p1 = Point::diagonal( -1 );
 
   76   Point p2 = Point::diagonal(  1 );
 
   77   Point c = Point::diagonal( 0 );
 
   78   Domain domain( p1, p2 );
 
   79   DigitalSet shapeSet( domain );
 
   80   Object shape( dt, shapeSet );
 
   82   for ( DomainConstIterator it = domain.begin(); it != domain.end(); ++it )
 
   85           && 
"[generateSimplicityTable] number of configurations is too high." );
 
   86   unsigned int nbCfg = 1 << k;
 
   87   for ( 
unsigned int cfg = 0; cfg < nbCfg; ++cfg )
 
   89       shape.pointSet().clear();
 
   90       shape.pointSet().insert( c );
 
   91       unsigned int mask = 1;
 
   92       for ( DomainConstIterator it = domain.begin(); it != domain.end(); ++it )
 
   96               if ( cfg & mask ) shape.pointSet().insert( *it );
 
  100       bool simple = shape.isSimple( c );
 
  118 template <
typename Object, 
typename Map>
 
  120 displaySimplicityTable( 
Board2D & board, 
 
  127   typedef typename DigitalSet::Domain Domain;
 
  128   typedef typename Domain::ConstIterator DomainConstIterator;
 
  130   Point p1 = Point::diagonal( -1 );
 
  131   Point p2 = Point::diagonal(  1 );
 
  132   Point c = Point::diagonal( 0 );
 
  133   Domain domain( p1, p2 );
 
  135   Point q1 = Point::diagonal( -1 );
 
  136   Point q2 = Point::diagonal( 4*16-1 );
 
  137   Domain fullDomain( q1, q2 );
 
  138   board << 
SetMode( fullDomain.className(), 
"Paving" );
 
  139   unsigned int cfg = 0;
 
  140   for ( 
unsigned int y = 0; y < 16; ++y )
 
  141     for ( 
unsigned int x = 0; x < 16; ++x, ++cfg )
 
  143         bool simple = map[ cfg ];
 
  144         Point base( x*4, y*4 );
 
  145         unsigned int mask = 1;
 
  146         for ( DomainConstIterator it = domain.begin(); 
 
  147               it != domain.end(); ++it )
 
  149             Point q = base + (*it);
 
  153                                                       Color( 30, 30, 30 ) ) );
 
  161                                                      Color( 10, 255, 10 ) )
 
  162                                  : new CustomColors( 
Color( 0, 0, 0 ), 
 
  163                                                      Color( 255, 10, 10 ) ) );
 
  168                                  ? 
new CustomColors( 
Color( 0, 0, 0 ), 
 
  169                                                      Color( 245, 255, 245 ) )
 
  170                                  : new CustomColors( 
Color( 0, 0, 0 ), 
 
  171                                                      Color( 255, 245, 245 ) ) );
 
  182 template <
typename Map>
 
  184 outputTableAsArray( ostream & out,
 
  186                     const string & tableName )
 
  188   typedef typename Map::const_iterator MapConstIterator;
 
  189   out << 
"const bool " << tableName << 
"[ " << map.size() << 
" ] = { ";
 
  190   for ( MapConstIterator it = map.begin(), it_end = map.end();
 
  195       if ( it != it_end ) out << 
", ";
 
  197   out << 
" };" << std::endl;
 
  201 int main( 
int argc, 
char** argv )
 
  203   typedef std::vector<bool> ConfigMap;
 
  207   ConfigMap table4_8( 256 );
 
  208   generateSimplicityTable< Object4_8 >( dt4_8, table4_8 );
 
  212   ConfigMap table8_4( 256 );
 
  213   generateSimplicityTable< Object8_4 >( dt8_4, table8_4 );
 
  218   displaySimplicityTable< Object4_8 >( board, dt4_8, table4_8 );
 
  219   board.
saveEPS( 
"table4_8.eps" );
 
  224   displaySimplicityTable< Object8_4 >( board, dt8_4, table8_4 );
 
  225   board.
saveEPS( 
"table8_4.eps" );
 
  228   outputTableAsArray( std::cout, table4_8, 
"simplicityTable4_8" );
 
  229   outputTableAsArray( std::cout, table8_4, 
"simplicityTable8_4" );