#!/usr/bin/perl use IO::Handle; @ARGV==5 or die; ($plandatac,$forui,$matrixinfo, $height,$psdpi)=@ARGV; open M, $matrixinfo or die $!; $!=0; @matrix= ; @matrix==6 or die $!; map { die "$_ ?" unless m/^[-0-9.]+$/; } @matrix; M->error and die $!; close M or die $!; # inverting the matrix ?? $d= 0; for ($i=0; $i<4; $i+=2) { $d += $matrix[$i]*$matrix[$i]; } $d= 1/$d; for ($i=0; $i<4; $i++) { $matrix[$i] *= $d; } $matrix[1] *= -1; $matrix[2] *= -1; print STDERR "matrix: ",join(" ",map { $_+0 } @matrix),"\n"; open C, $plandatac or die $!; for (;;) { $!=0; defined($_=) or die $!; next unless m,^/\* region\: (\d+)\.\.\d+ (\d+)\.\.\d+ \*/$,; $crop_x= $1; $crop_y= $2; last; } close C; open U, $forui or die $!; while () { chomp; next unless m/^[^\#]/; m/^(layout-subseg-end \w+ \w \w) ([0-9.]+) ([0-9.]+)$/ or die "$_ ?"; ($lhs, $xup,$yup) = ($1,$2,$3); $xup -= $matrix[4]; $yup -= $matrix[5]; $x = $xup*$matrix[0] + $yup*$matrix[2]; $y = $xup*$matrix[1] + $yup*$matrix[3]; $x *= $psdpi / 72.0; $y *= $psdpi / 72.0; $y= $height - $y; $x -= $crop_x; $y -= $crop_y; printf "%s %f %f\n", $lhs, $x, $y or die $!; } U->error and die $!; close U or die $!;