Prima
view release on metacpan or search on metacpan
t/Object/Region.t view on Meta::CPAN
my $ok = is_deeply( $boxes, $rects, $name);
warn "# (@$boxes) vs (@$rects)\n" unless $ok;
return $ok;
}
$r = Prima::Region->new;
$r = Prima::Region->new( rect => [0,1,2,3,4,5,6,7]);
is_rects($r, [0,1,2,2,4,5,2,2], "two simple rects");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (1)");
$r = Prima::Region->new( box => [0,1,2,3,4,5,6,7]);
is_rects($r, [0,1,2,3,4,5,6,7], "two simple boxes");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (2)");
$r = Prima::Region->new( polygon => [0,0,0,5,5,5,5,0], fillMode => fm::Overlay | fm::Winding);
is_rects($r, [0,0,6,6], "simple polygon");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (3)");
my $b = Prima::Image->new(
size => [5,5],
type => im::Byte,
);
sub render
{
my $rx = shift;
$b->region(undef);
$b->color(cl::Black);
$b->bar(0,0,$b->size);
$b->color(cl::White);
$b->region($rx);
$b->bar(0,0,$b->size);
}
$r = Prima::Region->new( polygon => [0,0,0,5,5,5,5,0, 0,0,0,2,2,2,2,0], fillMode => fm::Winding);
render($r);
is( $b->sum, 25 * 255, "polygon with winding");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (4)");
ok(
$b->pixel(0,0) != 0 &&
$b->pixel(1,0) != 0 &&
$b->pixel(0,1) != 0 &&
$b->pixel(1,1) != 0,
"pixels are in correct position (1)"
);
$r = Prima::Region->new( polygon => [0,0,0,5,5,5,5,0, 0,0,0,2,2,2,2,0], fillMode => fm::Alternate);
render($r);
is( $b->sum, 21 * 255, "polygon without winding");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (5)");
ok(
$b->pixel(0,0) == 0 &&
$b->pixel(1,0) == 0 &&
$b->pixel(0,1) == 0 &&
$b->pixel(1,1) == 0,
"pixels are in correct position (2)"
);
$r = Prima::Region->new( polygon => [0,0,0,5,5,5,5,0, 0,0,0,2,2,2,2,0], fillMode => fm::Winding|fm::Overlay);
render($r);
is( $b->sum, 25 * 255, "overlay polygon with winding");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (6)");
$r = Prima::Region->new( polygon => [0,0,0,5,5,5,5,0, 0,0,0,2,2,2,2,0], fillMode => fm::Alternate|fm::Overlay);
render($r);
is( $b->sum, 24 * 255, "overlay polygon without winding");
ok( $r->equals( Prima::Region->new(box => $r->get_boxes)), "is equal (7)");
my $d = $b->data;
render($b->to_region);
is_bytes($d, $b->data, "region to image and back is okay");
$b->size(4,4);
$r = Prima::Region->new( box => [-1,-1,3,3, 2,2,3,3]);
render($r);
is_bytes($b->data, ("\xff\xff\x00\x00" x 2).("\x00\x00\xff\xff" x 2), "region outside the box");
$b->color(0x808080);
$b->bar(1,1,2,2);
is_bytes($b->data,
"\xff\xff\x00\x00".
"\xff\x80\x00\x00".
"\x00\x00\x80\xff".
"\x00\x00\xff\xff",
"bar inside region"
);
$b->translate(0,0);
render(undef);
$b->color(cl::Black);
$b->region($r);
$b->translate(1,1);
$b->bar(0,0,$b->size);
is_bytes($b->data,
"\xff\xff\xff\xff".
"\xff\x00\xff\xff".
"\xff\xff\x00\x00".
"\xff\xff\x00\x00",
"region plot with offset 1"
);
$b->translate(0,0);
render(undef);
$b->translate(2,2);
$b->color(cl::Black);
$b->region($r);
$b->bar(0,0,$b->size);
is_bytes($b->data,
"\xff\xff\xff\xff".
"\xff\xff\xff\xff".
"\xff\xff\x00\x00".
"\xff\xff\x00\x00",
"region plot with offset 2"
);
$b->translate(0,0);
render(undef);
$b->translate(5,5);
$b->color(cl::Black);
$b->region($r);
$b->bar(0,0,$b->size);
is( $b->sum, 16 * 255, "region outside left");
$b->translate(-5,-5);
is( $b->sum, 16 * 255, "region outside right");
my $i = Prima::Image->new( size => [32, 32], type => im::Byte);
$i->color(0);
$i->bar(0,0,$i->size);
( run in 0.906 second using v1.01-cache-2.11-cpan-39bf76dae61 )