Math-Fractal-DLA
view release on metacpan or search on metacpan
lib/Math/Fractal/DLA.pm view on Meta::CPAN
sub setType
{
my ($self,$type) = @_;
no strict 'refs';
unless ($type) { $self->exitOnError("No parameter defined"); }
eval
{
require "Math/Fractal/DLA/".$type.".pm";
};
if ($@)
{ $self->exitOnError("Can't locate package Math::Fractal::DLA::".$type); }
$self->{TYPE} = $type;
} # setType
# Switch debug mode on or off
# Parameter: debug => true || false, logfile => file name
sub debug
{
my $self = shift;
my %param = @_;
if ($param{debug})
{
$self->{DEBUG} = 1;
$self->{LOG} = new Log::LogLite($param{logfile});
$self->{LOG}->template("<date>: <message>");
$self->addLogMessage("STARTING NEW DLA-FRACTAL..");
}
else
{
$self->{DEBUG} = 0;
}
} # debug
# Add a message to the log file
# Parameter: message
sub addLogMessage
{
my ($self,$msg) = @_;
if ($self->{DEBUG})
{
$self->{LOG}->write($msg."\n",3);
}
} # addLogMessage
# Load the image from a jpg or png image
# Parameter: filename
sub loadFile
{
my $self = shift;
my $filename = shift;
if (-s $filename)
{
if (($filename =~ /\.jpg$/) || ($filename =~ /\.jpeg$/))
{
$self->{IMAGE} = GD::Image->newFromJpeg($filename) || $self->exitOnError("Can't open image ".$filename);
$self->addLogMessage("Loading JPG from $filename");
$self->{OUTPUT} = "JPG";
}
elsif ($filename =~ /\.png$/)
{
$self->{IMAGE} = GD::Image->newFromPng($filename) || $self->exitOnError("Can't open image ".$filename);
$self->addLogMessage("Loading PNG from $filename");
$self->{OUTPUT} = "PNG";
}
my ($width,$height) = $self->{IMAGE}->getBounds();
$self->setSize(width => $width, height => $height);
}
else
{ $self->exitOnError($filename." doesn't exist"); }
} # loadFile
# Set the image size
# Parameter: width => xxx, height => xxx
sub setSize
{
my $self = shift;
my %param = @_;
if ($self->{IMAGE}) { $self->exitOnError("Can't resize existing image"); }
if ($param{width} !~ /^\d+$/) { $self->exitOnError("Parameter width is not a valid number"); }
if ($param{height} !~ /^\d+$/) { $self->exitOnError("Parameter height is not a valid number"); }
$self->{IMG_WIDTH} = $param{width};
$self->{IMG_HEIGHT} = $param{height};
$self->addLogMessage("Width: ".$param{width}.", Height: ".$param{height});
foreach my $x (0..$param{width}+1)
{
foreach my $y (0..$param{height}+1)
{
$self->{MATRIX}->[$x][$y] = 0;
}
}
return 1;
} # setSize
# Set the number of points for the fractal
# Parameter: number of points
sub setPoints
{
my $self = shift;
my $number = shift;
if ($number)
{
unless ($number =~ /^\d+$/) { $self->exitOnError($number." is not a valid number"); }
$self->{POINTS} = $number;
$self->addLogMessage("Set max. ".$self->{POINTS}." points");
}
else { $self->exitOnError("No parameter defined"); }
} # setPoints
# Get the number of points
sub getPoints
{
my $self = shift; return $self->{POINTS};
} # getPoints
# Set the background color
# Parameter: r => xxx, g => xxx, b => xxx
sub setBackground
{
my $self = shift;
my %para = @_;
foreach my $color (keys %para)
( run in 2.222 seconds using v1.01-cache-2.11-cpan-0d23b851a93 )