The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;
use Panotools::Script;
use Getopt::Long;
use Pod::Usage;

my $path_output;
my $roll;
my $pitch;
my $yaw;
my $help;

GetOptions ('o|output=s' => \$path_output,
            'r|roll' => \$roll,
            'p|pitch' => \$pitch,
            'y|yaw' => \$yaw,
            'h|help' => \$help);

pod2usage (-verbose => 2) if $help;

my $path_pto = shift || pod2usage;
$path_output = $path_pto unless (defined $path_output);

my $pto = new Panotools::Script;
$pto->Read ($path_pto);
$pto->Centre ('y') if $yaw;
$pto->Centre ('p') if $pitch;
$pto->Centre ('r') if $roll;

# if images are aligned then d,e is probably bogus
if ($pto->Sigma ('r') < 100 and $pto->Sigma ('p') < 100 and $pto->Sigma ('y') < 100)
{
    for my $image (@{$pto->Image})
    {
        $image->{a} = 0 unless $image->{a} =~ '=';
        $image->{b} = 0 unless $image->{b} =~ '=';
        $image->{c} = 0 unless $image->{c} =~ '=';
        $image->{d} = 0 unless $image->{d} =~ '=';
        $image->{e} = 0 unless $image->{e} =~ '=';
    }
    for my $key (keys %{$pto->Variable})
    {
        delete $pto->Variable->{$key}->{a};
        delete $pto->Variable->{$key}->{b};
        delete $pto->Variable->{$key}->{c};
        delete $pto->Variable->{$key}->{d};
        delete $pto->Variable->{$key}->{e};
    }
}

$pto->Write ($path_output);

__END__

=head1 NAME

ptocentre - centre images in a panorama

=head1 SYNOPSIS

ptocentre [options] [--output centred.pto] input.pto

 Options:
  -o | --output     Filename of centred project (can be the the same as the input)
  -r | --roll       Centre roll
  -p | --pitch      Centre pitch
  -y | --yaw        Centre yaw
  -h | --help       Outputs help documentation

=head1 DESCRIPTION

B<ptocentre> takes a hugin .pto project and centres the images in the panorama.

If --output isn't specified then input file is overwritten with output.

=head1 LICENSE

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

=head1 SEE ALSO

L<http://hugin.sourceforge.net/>

=head1 AUTHOR

Bruno Postle - October 2008.

=cut