Imager
view release on metacpan or search on metacpan
i_circle_aa($self->{IMG}, $opts{'x'}, $opts{'y'}, $opts{'r'},
$color);
}
else {
i_arc_aa($self->{IMG},$opts{'x'},$opts{'y'},$opts{'r'},
$opts{'d1'}, $opts{'d2'}, $color);
}
}
else {
my $color = _color($opts{'color'});
if ($opts{d2} - $opts{d1} >= 360) {
$good = i_circle_out_aa($self->{IMG}, $opts{'x'}, $opts{'y'}, $opts{'r'}, $color);
}
else {
$good = i_arc_out_aa($self->{IMG}, $opts{'x'}, $opts{'y'}, $opts{'r'}, $opts{'d1'}, $opts{'d2'}, $color);
}
}
}
else {
if ($opts{fill}) {
unless (UNIVERSAL::isa($opts{fill}, 'Imager::Fill')) {
# assume it's a hash ref
require 'Imager/Fill.pm';
unless ($opts{fill} = Imager::Fill->new(%{$opts{fill}})) {
$self->{ERRSTR} = $Imager::ERRSTR;
return;
}
}
i_arc_cfill($self->{IMG},$opts{'x'},$opts{'y'},$opts{'r'},$opts{'d1'},
$opts{'d2'}, $opts{fill}{fill});
}
else {
my $color = _color($opts{'color'});
unless ($color) {
$self->{ERRSTR} = $Imager::ERRSTR;
return;
}
if ($opts{filled}) {
i_arc($self->{IMG},$opts{'x'},$opts{'y'},$opts{'r'},
$opts{'d1'}, $opts{'d2'}, $color);
}
else {
if ($opts{d1} == 0 && $opts{d2} == 361) {
$good = i_circle_out($self->{IMG}, $opts{x}, $opts{y}, $opts{r}, $color);
}
else {
$good = i_arc_out($self->{IMG}, $opts{x}, $opts{y}, $opts{r}, $opts{d1}, $opts{d2}, $color);
}
}
}
}
unless ($good) {
$self->_set_error($self->_error_as_msg);
return;
}
return $self;
}
# Draws a line from one point to the other
# the endpoint is set if the endp parameter is set which it is by default.
# to turn of the endpoint being set use endp=>0 when calling line.
sub line {
my $self=shift;
my $dflcl=i_color_new(0,0,0,0);
my %opts=(color=>$dflcl,
endp => 1,
@_);
$self->_valid_image("line")
or return;
unless (exists $opts{x1} and exists $opts{y1}) { $self->{ERRSTR}='missing begining coord'; return undef; }
unless (exists $opts{x2} and exists $opts{y2}) { $self->{ERRSTR}='missing ending coord'; return undef; }
my $color = _color($opts{'color'});
unless ($color) {
$self->{ERRSTR} = $Imager::ERRSTR;
return;
}
$opts{antialias} = $opts{aa} if defined $opts{aa};
if ($opts{antialias}) {
i_line_aa($self->{IMG},$opts{x1}, $opts{y1}, $opts{x2}, $opts{y2},
$color, $opts{endp});
} else {
i_line($self->{IMG},$opts{x1}, $opts{y1}, $opts{x2}, $opts{y2},
$color, $opts{endp});
}
return $self;
}
# Draws a line between an ordered set of points - It more or less just transforms this
# into a list of lines.
sub polyline {
my $self=shift;
my ($pt,$ls,@points);
my $dflcl=i_color_new(0,0,0,0);
my %opts=(color=>$dflcl,@_);
$self->_valid_image("polyline")
or return;
if (exists($opts{points})) { @points=@{$opts{points}}; }
if (!exists($opts{points}) and exists($opts{'x'}) and exists($opts{'y'}) ) {
@points=map { [ $opts{'x'}->[$_],$opts{'y'}->[$_] ] } (0..(scalar @{$opts{'x'}}-1));
}
# print Dumper(\@points);
my $color = _color($opts{'color'});
unless ($color) {
$self->{ERRSTR} = $Imager::ERRSTR;
return;
}
$opts{antialias} = $opts{aa} if defined $opts{aa};
if ($opts{antialias}) {
for $pt(@points) {
if (defined($ls)) {
i_line_aa($self->{IMG},$ls->[0],$ls->[1],$pt->[0],$pt->[1],$color, 1);
( run in 0.533 second using v1.01-cache-2.11-cpan-524268b4103 )