int main()
{
  Board3DTo2D<Space, KSpace> board;

  Point p1( 0, 0, 0 );
  Point p2( 10, 10 , 10 );
  Domain domain( p1, p2 );

  DigitalSet shape_set( domain );
  Shapes<Domain>::addNorm1Ball( shape_set, Point( 5, 5, 5 ), 2 );
  Shapes<Domain>::addNorm2Ball( shape_set, Point( 3, 3, 3 ), 2 );

  shape_set.erase(Point(3,3,3));
  shape_set.erase(Point(6,6,6));
  
  // example with wireframe mode
  board << SetMode3D(board.className(), "WireFrameMode");

  board << shape_set;
  
  board << CameraPosition(5.000000, 5.000000, 15)
   << CameraDirection(0.000000, 0.000000, -1.000000)
   << CameraUpVector(0.000000, 1.000000, 0.000000);
  
  board.saveCairo("dgtalBoard3DTo2D-2bis-sets-wireframe.png", Board3DTo2D<Space, KSpace>::CairoPNG, 600, 400);
}
int main()
{

  Point p1( 0, 0, 0 );
  Point p2( 5, 5 ,5 );
  Point p3( 2, 3, 4 );
  Domain domain( p1, p2 );

  Board3DTo2D<Space, KSpace> board;

  board << domain;  
  board << p1 << p2 << p3;
  
    board << CameraPosition(2.500000, 2.500000, 16.078199)
  << CameraDirection(0.000000, 0.000000, -1.000000)
  << CameraUpVector(0.000000, 1.000000, 0.000000);

  //board << CameraZNearFar(4.578200, 22.578199);

  board << SetMode3D(board.className(), "WireFrameMode");
  board.saveCairo("dgtalBoard3DTo2D-1-points.png", Board3DTo2D<Space, KSpace>::CairoPNG, 600*2, 400*2);

}
int main()
{
  typedef DGtal::SpaceND<3, DGtal::int32_t> MySpace;
  typedef MySpace::Point MyPoint;
  typedef HyperRectDomain<MySpace> MyDomain;

  MyPoint p1( 0, 0, 0 );
  MyPoint p2( 5, 5 ,5 );
  MyPoint p3( 2, 3, 4 );
  MyDomain domain( p1, p2 );

  Board3DTo2D board;

  board << domain;  
  board << p1 << p2 << p3;
  
  board << CameraPosition(2.500000, 2.500000, 16.078199)
   << CameraDirection(0.000000, 0.000000, -1.000000)
   << CameraUpVector(0.000000, 1.000000, 0.000000);
  
  board << SetMode3D(board.className(), "WireFrameMode");
  board.saveCairo("dgtalBoard3DTo2D-0-demo-kernel-2.png", Board3DTo2D::CairoPNG, 600, 400);
}