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 )