sub signum ($) { return ($_[0] > 0) - ($_[0] < 0); }
+sub bbox ($) {
+ my ($objhash) = @_;
+ my ($min_x, $max_x, $min_y, $max_y);
+ my ($loc);
+ foreach $loc (values %$objhash) {
+ upd_min(\$min_x, $loc->{X} - abs($psu_allwidth * sin($loc->{A})));
+ upd_max(\$max_x, $loc->{X} + abs($psu_allwidth * sin($loc->{A})));
+ upd_min(\$min_y, $loc->{Y} - abs($psu_allwidth * cos($loc->{A})));
+ upd_max(\$max_y, $loc->{Y} + abs($psu_allwidth * cos($loc->{A})));
+ }
+ return ($min_x, $max_x, $min_y, $max_y);
+}
+
our %units_len= qw(- mm mm 1 cm 10 m 1000);
our %units_ang= qw(- d r 1); $units_ang{'d'}= 2*$pi / 360;
}
next unless $got;
$obj= $objs{$obj_id};
- $max_x=$max_y=$min_x=$min_y=undef;
- foreach $loc (values %{ $obj->{Loc} }) {
- upd_min(\$min_x, $loc->{X} - abs($psu_allwidth * sin($loc->{A})));
- upd_max(\$max_x, $loc->{X} + abs($psu_allwidth * sin($loc->{A})));
- upd_min(\$min_y, $loc->{Y} - abs($psu_allwidth * cos($loc->{A})));
- upd_max(\$max_y, $loc->{Y} + abs($psu_allwidth * cos($loc->{A})));
- }
+ ($min_x, $max_x, $min_y, $max_y) = bbox($obj->{Loc});
newctx();
for (;;) {
$ctx->{Draw}= uc $drawers;
+our $bbox=0;
+
while (@ARGV && $ARGV[0] =~ m/^\-/) {
last if $ARGV[0] eq '-';
$_= shift @ARGV;
while (length) {
if (s/^D(\d+)//) { $debug= $1; }
elsif (s/^D//) { $debug++; }
+ elsif (s/^b//) { $bbox=1; }
elsif (s/^([Ee])([a-zA-Z]+)//) {
my ($ee,$c);
$ee= $1;
}
oflushpage();
+
+if ($bbox) {
+ my ($min_x, $max_x, $min_y, $max_y) = bbox($ctx->{Loc});
+ if (defined $min_x) {
+ printf(STDERR
+ "width %.2d (%.2d..%2.d)\n".
+ "height %.2d (%.2d..%2.d)\n",
+ $max_x - $min_x, $min_x, $max_x,
+ $max_y - $min_y, $min_y, $max_y);
+ } else {
+ print STDERR "no points, bbox\n";
+ }
+}