The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Map::Tube::GraphViz - GraphViz output for Map::Tube.

SYNOPSIS

 use Map::Tube::GraphViz;

 my $obj = Map::Tube::GraphViz->new(%params);
 $obj->graph($output_file);

METHODS

new(%params)
 Constructor.
  • callback_edge

     Edge callback.
     Default value is this:
     sub { 
             my ($self, $from, $to) = @_;
             $self->{'g'}->add_edge(
                    'from' => $from,
                    'to' => $to,
             );
             return;
     }
  • callback_node

     Node callback.
     Default value is \&Map::Tube::GraphViz::Utils::node_color.
  • driver

     GraphViz2 driver.
     Default value is 'neato'.
  • g

     GraphViz2 object.
     Parameters 'g' and 'name' cannot combine.
     Default value is this:
     GraphViz2->new(
            'global' => {
                    'directed' => 0,
            },
            $name ? (
                    'graph' => {
                            'label' => $name,
                            'labelloc' => 'top',
                    },
            ) : (),
     );
  • name

     Name of map.
     Parameters 'g' and 'name' cannot combine.
     Default value is Map::Tube->name or undef.
  • output

     GraphViz2 output.
     It is required.
     Default value is 'png'.
     Possible values are every formats supported by GraphViz2 module.
     See L<http://www.graphviz.org/content/output-formats>.
  • tube

     Map::Tube object.
     It is required.
     Default value is undef.
graph($output_file)
 Get graph and save it to $output_file file.
 Returns undef.

ERRORS

 new():
         Cannot load UNIVERSAL::DOES module.
         Parameter 'tube' is required.
         Parameter 'tube' must be 'Map::Tube' object.
         Parameter 'output' is required.
         Unsupported 'output' parameter '%s'.
         From Map::Tube::GraphViz::Utils::color_line():
                 No color for line '%s'.
         From Class::Utils::set_params():
                 Unknown parameter '%s'.

EXAMPLE1

 use strict;
 use warnings;

 use English;
 use Error::Pure qw(err);
 use Map::Tube::GraphViz;

 # Arguments.
 if (@ARGV < 1) {
         print STDERR "Usage: $0 metro\n";
         exit 1;
 }
 my $metro = $ARGV[0];
 
 # Object.
 my $class = 'Map::Tube::'.$metro;
 eval "require $class;";
 if ($EVAL_ERROR) {
         err "Cannot load '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # Metro object.
 my $tube = eval "$class->new";
 if ($EVAL_ERROR) {
         err "Cannot create object for '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # GraphViz object.
 my $g = Map::Tube::GraphViz->new(
         'tube' => $tube,
 );
 
 # Get graph to file.
 $g->graph($metro.'.png');

 # Print file.
 system "ls -l $metro.png";

 # Output without arguments like:
 # Usage: /tmp/SZXfa2g154 metro

 # Output with 'Berlin' argument like:
 # -rw-r--r-- 1 skim skim 1503067 Jan 27 07:24 Berlin.png
Berlin

EXAMPLE2

 use strict;
 use warnings;

 use English;
 use Error::Pure qw(err);
 use Map::Tube::GraphViz;
 use Map::Tube::GraphViz::Utils qw(node_color_without_label);

 # Arguments.
 if (@ARGV < 1) {
         print STDERR "Usage: $0 metro\n";
         exit 1;
 }
 my $metro = $ARGV[0];
 
 # Object.
 my $class = 'Map::Tube::'.$metro;
 eval "require $class;";
 if ($EVAL_ERROR) {
         err "Cannot load '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # Metro object.
 my $tube = eval "$class->new";
 if ($EVAL_ERROR) {
         err "Cannot create object for '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # GraphViz object.
 my $g = Map::Tube::GraphViz->new(
         'callback_node' => \&node_color_without_label,
         'tube' => $tube,
 );
 
 # Get graph to file.
 $g->graph($metro.'.png');

 # Print file.
 system "ls -l $metro.png";

 # Output without arguments like:
 # Usage: /tmp/SZXfa2g154 metro

 # Output with 'Berlin' argument like:
 # -rw-r--r-- 1 skim skim 885928 Jan 27 07:43 Berlin.png
Berlin

EXAMPLE3

 use strict;
 use warnings;

 use English;
 use Error::Pure qw(err);
 use GraphViz2;
 use Map::Tube::GraphViz;
 use Map::Tube::GraphViz::Utils qw(node_color_without_label);

 # Arguments.
 if (@ARGV < 1) {
         print STDERR "Usage: $0 metro\n";
         exit 1;
 }
 my $metro = $ARGV[0];
 
 # Object.
 my $class = 'Map::Tube::'.$metro;
 eval "require $class;";
 if ($EVAL_ERROR) {
         err "Cannot load '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # Metro object.
 my $tube = eval "$class->new";
 if ($EVAL_ERROR) {
         err "Cannot create object for '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # GraphViz object.
 my $g = Map::Tube::GraphViz->new(
         'callback_node' => \&node_color_without_label,
         'g' => GraphViz2->new(
                 'global' => {
                         'directed' => 0,
                 },
                 'graph' => {
                         'label' => $metro,
                         'labelloc' => 'top',
                         'overlap' => 0,
                 },
         ),
         'tube' => $tube,
 );
 
 # Get graph to file.
 $g->graph($metro.'.png');

 # Print file.
 system "ls -l $metro.png";

 # Output without arguments like:
 # Usage: /tmp/SZXfa2g154 metro

 # Output with 'Berlin' argument like:
 # -rw-r--r-- 1 skim skim 1212857 Jan 27 07:51 Berlin.png
Berlin

EXAMPLE4

 use strict;
 use warnings;

 use English;
 use Error::Pure qw(err);
 use Map::Tube::GraphViz;
 use Map::Tube::GraphViz::Utils qw(node_color_id);

 # Arguments.
 if (@ARGV < 1) {
         print STDERR "Usage: $0 metro\n";
         exit 1;
 }
 my $metro = $ARGV[0];
 
 # Object.
 my $class = 'Map::Tube::'.$metro;
 eval "require $class;";
 if ($EVAL_ERROR) {
         err "Cannot load '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # Metro object.
 my $tube = eval "$class->new";
 if ($EVAL_ERROR) {
         err "Cannot create object for '$class' class.",
                 'Error', $EVAL_ERROR;
 }
 
 # GraphViz object.
 my $g = Map::Tube::GraphViz->new(
         'callback_node' => \&node_color_id,
         'tube' => $tube,
 );
 
 # Get graph to file.
 $g->graph($metro.'.png');

 # Print file.
 system "ls -l $metro.png";

 # Output without arguments like:
 # Usage: /tmp/SZXfa2g154 metro

 # Output with 'Berlin' argument like:
 # -rw-r--r-- 1 skim skim 1141071 Feb 24 08:04 Berlin.png
Berlin

DEPENDENCIES

Class::Utils, English, Error::Pure, GraphViz2, List::MoreUtils, Map::Tube::GraphViz::Utils, Scalar::Util.

SEE ALSO

Map::Metro::Graph

Map::Metro graph.

Task::Map::Tube

Install the Map::Tube modules.

Task::Map::Tube::Metro

Install the Map::Tube concrete metro modules.

REPOSITORY

https://github.com/michal-josef-spacek/Map-Tube-GraphViz

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

CONTRIBUTORS

Gisbert W. Selke gws@cpan.org

LICENSE AND COPYRIGHT

© 2014-2020 Michal Josef Špaček

Artistic License

BSD 2-Clause License

VERSION

0.07