package IUP::Canvas::FileVector;
use strict;
use warnings;
use base qw(IUP::Internal::Canvas);
use IUP::Internal::LibraryIup;
use Carp;
sub new {
my ($class, %args) = @_;
my $format = $args{format};
my $filename = $args{filename};
my $width = $args{width};
my $height = $args{height};
my $resolution = $args{resolution};
my $dpi = $args{dpi};
my $ch;
if (!$filename) {
carp "warning: filename parameter not defined for ".__PACKAGE__."->new()";
}
elsif (!$format) {
carp "warning: format parameter not defined for ".__PACKAGE__."->new()";
}
elsif (defined $width && $width<0) {
carp "warning: width parameter is '<=0' for ".__PACKAGE__."->new()";
}
elsif (defined $height && $height<0) {
carp "warning: height parameter is '<=0' for ".__PACKAGE__."->new()";
}
elsif ((defined $width && !defined $height) || (!defined $width && defined $height)) {
carp "warning: none or both height and width parameters have to be defined for ".__PACKAGE__."->new()";
}
elsif (defined $dpi && defined $resolution) {
carp "warning: you cannot define both 'resolution' and 'dpi' parameters for ".__PACKAGE__."->new()";
}
elsif (defined $resolution && $resolution<0) {
carp "warning: resolution parameter is '<=0' for ".__PACKAGE__."->new()";
}
elsif (defined $dpi && $dpi<0) {
carp "warning: dpi parameter is '<=0' for ".__PACKAGE__."->new()";
}
else {
my $init;
$resolution = $dpi/25.4 if defined $dpi;
if ($format eq 'PS') { # http://www.tecgraf.puc-rio.br/cd/en/drv/ps.html
# "filename -p[paper] -w[width] -h[height] -l[left] -r[right] -b[bottom] -t[top] -s[resolution] [-e] [-g] [-o] [-1] -d[margin]"
# "%s -p%d -w%g -h%g -l%g -r%g -b%g -t%g -s%d -e -o -1 -g -d%g"
$init = $filename;
$init .= sprintf(" -w%g -h%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" -p%d", $args{paper}) if defined $args{paper};
$init .= sprintf(" -l%g", $args{left}) if defined $args{left};
$init .= sprintf(" -r%g", $args{right}) if defined $args{right};
$init .= sprintf(" -b%g", $args{top}) if defined $args{top};
$init .= sprintf(" -t%g", $args{bottom}) if defined $args{bottom};
$init .= sprintf(" -d%g", $args{margin}) if defined $args{margin};
$init .= sprintf(" -s%d", $resolution) if defined $resolution;
$init .= " -1" if defined $args{level1};
$init .= " -g" if defined $args{debug};
$init .= " -e" if defined $args{eps};
$init .= " -o" if defined $args{landscape};
}
elsif ($format eq 'SVG') { # http://www.tecgraf.puc-rio.br/cd/en/drv/svg.html
# "filename [widthxheight] [resolution]"
# "%s %gx%g %g"
$init = $filename;
$init .= sprintf(" %gx%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" %g", $resolution) if defined $resolution;
}
elsif ($format eq 'CGM') { # http://www.tecgraf.puc-rio.br/cd/en/drv/cgm.html
# "filename [widthxheight] [resolution] [-t] -p[precision]"
# "%s %gx%g %g %s"
$init = $filename;
$init .= sprintf(" %gx%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" %g", $resolution) if defined $resolution;
$init .= " -t" if defined $args{codification};
$init .= sprintf(" -p%d", $args{precision}) if defined $args{precision};
}
elsif ($format eq 'DEBUG') { # http://www.tecgraf.puc-rio.br/cd/en/drv/debug.html
# "filename [widthxheight] [resolution]"
# "%s %gx%g %g"
$init = $filename;
$init .= sprintf(" %gx%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" %g", $resolution) if defined $resolution;
}
elsif ($format eq 'DGN') { # http://www.tecgraf.puc-rio.br/cd/en/drv/dgn.html
# "filename [widthxheight] [resolution] [-f] [-sseedfile]"
# "%s %gx%g %g %s"
$init = $filename;
$init .= sprintf(" %gx%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" %g", $resolution) if defined $resolution;
$init .= " -f" if defined $args{filling};
$init .= sprintf(" -s%s", $args{seedfile}) if defined $args{seedfile};
}
elsif ($format eq 'DXF') { # http://www.tecgraf.puc-rio.br/cd/en/drv/dxf.html
# "filename [widthxheight] [resolution]"
# "%s %gx%g %g"
$init = $filename;
$init .= sprintf(" %gx%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" %g", $resolution) if defined $resolution;
}
elsif ($format eq 'EMF') { # http://www.tecgraf.puc-rio.br/cd/en/drv/emf.html
# "filename widthxheight"
# "%s %dx%d"
if (defined $width && defined $height) { #widthxheight - mandatory
$init = $filename;
$init .= sprintf(" %dx%d", $width, $height) if defined $width && defined $height;
}
else {
$init = '';
carp "warning: width and height are mandatory for format=>'EMF'";
}
}
elsif ($format eq 'METAFILE') { # http://www.tecgraf.puc-rio.br/cd/en/drv/mf.html
# "filename [widthxheight] [resolution]"
# "%s %gx%g %g"
$init = $filename;
$init .= sprintf(" %gx%g", $width, $height) if defined $width && defined $height;
$init .= sprintf(" %g", $resolution) if defined $resolution;
}
elsif ($format eq 'WMF') { # http://www.tecgraf.puc-rio.br/cd/en/drv/wmf.html
# "filename widthxheight [resolution]"
# "%s %dx%d %g"
if (defined $width && defined $height) { #widthxheight - mandatory
$init = $filename;
$init .= sprintf(" %dx%d", $width, $height) if defined $width && defined $height;
}
else {
$init = '';
carp "warning: width and height are mandatory for format=>'WMF'";
}
}
if (defined $init) {
if ($init ne '') {
$init .= " $args{raw}" if defined $args{raw};
#warn "XXX-DEBUG: type='$format' init='$init'\n";
$ch = $class->new_from_cnvhandle(IUP::Internal::Canvas::_cdCreateCanvas_BASIC($format, $init));
}
}
else {
carp "warning: unsupported format '$format' in ".__PACKAGE__."->new()";
}
}
return $ch;
}
1;