sub bboxwh {
my( $g ) = @_;
my @xx;
my @yy;
for my $k ( $g->getChildren ){
my %att = $k->getAttributes ;
my $swid = eval { $att{style}{"stroke-width"} } || 0;
my $points = $att{points};
$points or next;
for my $xy ( split ' ', $points){
my( $xx, $yy ) = split ',', $xy;
push @xx, $xx; push @yy, $yy;
## account for swid??
}
}
@xx = sort { $a <=> $b } @xx;
@yy = sort { $a <=> $b } @yy;
my $minx = $xx[ 0 ];
my $miny = $yy[ 0 ];
my $maxx = $xx[ -1 ];
my $maxy = $yy[ -1 ];
my $w = $minx < 0 ? abs($minx)+$maxx : abs( $minx - $maxx );
my $h = $miny < 0 ? abs($miny)+$maxy : abs( $miny - $maxy );
my $r = {
bbox => [ $minx, $miny, $maxx, $maxy ],
p1 => [ $minx, $miny ],
p2 => [ $maxx, $maxy ],
left => $minx, top => $miny, right => $maxx, bottom => $maxy,
id => $g->getElementID,
width => $w,
height => $h,
};
return $r;
}
|