#include "epix2.h"
using namespace ePiX2;

int main() {
  World world;
  Camera camera;

  const double MAX(4.0);
  const int N(6);

  Screen screen1(Pair(-4,-5), Pair(4,3));
  Screen screen2(Pair(-4,-5), Pair(4,3));

  Picture picture(Pair(-4,-4), Pair(4,4), "6x6in");

  picture.backing(Blue(1.9));
  screen1.backing(Black()).border(Red(), "2pt");
  screen2.backing(Black()).border(Yellow(), "2pt");

  Polygon face1(Vector(Origin, MAX,0,MAX), Vector(Origin, -MAX,0,MAX), 4);
  Polygon face2(Vector(Origin, 0,MAX,MAX), Vector(Origin, 0,-MAX,MAX), 4);


  for (int i=-N; i<=N; ++i)
    world << face1.move_to(Point(0,i*MAX*1.0/N,0))
	  << face2.move_to(Point(i*MAX*1.0/N,0,0));

  Point ctr(0.5,0.5,0.5);

  text_style().text(Red()).back(White()).align(tr);

  world << Label(ctr, "$(0.5,0.5,0.5)$", MK_BOX).offset("4x4pt");

  camera.at(Point(7, 5, 4));
  camera.range(10);
  camera.focus(5);

  Vector N1(ctr, -1, 0, -1);
  // Knife knife1(N1, bold(RGB(0.7, 0, 1)));
  Knife knife1(N1, plain(Green(0.6)));

  Vector N2(ctr, 0, -1, -1);
  Knife knife2(N2, plain(Blue()));

  Vector N3(ctr, -1, -1, -1);
  Knife knife3(N3, plain(RGB(0.5, 0.2, 1)));

  World world1;
  world1 << world;

  world1.chop(knife1);
  world1.photo(screen1, camera);
  picture.paste(screen1, Mask::Rect(Pair(-3.95,1), Pair(-1,3.95)));


  World world2;
  world2 << world1;
  world2.chop(knife2);
  world2.photo(screen2, camera);
  picture.paste(screen2, Mask::Rect(Pair(1,1), Pair(3.95, 3.95)));

  world.chop(knife1).chop(knife2).chop(knife3);
  world.photo(picture, camera);

  picture.crop();
  picture.print_to("cuts.eepic", PSTricks());
}
