VCG - Interface to the VCG graphing tool
my $vcg = VCG->new(outfile=>'resulta.vcg');
$vcg->add_node(title => 'aaa');
$vcg->add_node(title => 'bbb', label='b');
$vcg->add_node(title => 'ccc', color=>'yellow');
$vcg->add_edge(source => 'aaa', target=>'bbb');
my $data = $vcg->as_ppm();
open (OUTFILE, 'outfile.ppm') or die "error $!\n";
print OUTFILE $data;
This module provides an interface to to the vcg graphing tool. It supports a
limited selection of options and file formats. The vcg graphing tool homepage
is currently http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html but is
being actively developed elsewhere.
This module is based on Leon Brocard's GraphViz module, it tries to provide a
similar interface to offer some sense of consistency.
VCG is now in active development and although Graph::Writer::VCG already exists,
this module provides a similar interface to graphviz and will be more closely
tied into vcg as it becomes more actively developed - see James Micheal
DuPont's announcement at
new objects are created using the constructor method 'new'.
This method accepts name attributes in the form :
my $vcg = VCG->new(outfile=>'foo.pbm')
my $vcg = VCG->new(title=>'Dia Dependancies Diagram',debug=>1);
my $vcg = VCG-> new()
my %config = ( xmax => 700, ymax=>700, program=>'xvcg', x=>30,
y=>30 ); my $vcg = VCG->new(%config);
my $vcg = VCG->new( outfile=>'diagram.ps', landscape=>1,
paper=>'tabloid', spline=>1 );
add_edge allows you to add edges to your vcg object (edges are the lines or
relationships between nodes).
In a Finite State Diagram, edges would represent transitions between states.
This method accepts the source, target and colour of the edge :
$vcg->add_edge( source=>'from_node', target=>'to_node');
$vcg->add_edge( source=>'aaa', target=>'bbb', color=>'grey');
add_node allows you to add nodes to your vcg object (nodes are the things
connected, while edges are the connections).
In a Finite State Diagram, nodes would be the individual states.
This method accepts the label, title and background colour of the node :
$vcg->add_node( title=>'aaa' );
$vcg->add_node( label=>'aaa' );
$vcg->add_node( label=>'aaa', title=>'A', color=>'yellow' );
You can get the version and copyright message as a string using the vcg object
(requires vcg be installed)
my $version = $vcg-> get_vcg_version()
or die "couldn't get
version : $vcg-> error()
The VCG object allows you to access the output of the vcg tool directly,
suitable for using with graphic libraries - although some libraries or older
versions may not be able to cope with these formats.
You can access the output in any of postscript, pbm, ppm, vcg (annotated) and
vcg (plain) :
my $image_as_ppm = $vcg-> as_ppm()
; # string of image as formatted as
my $vcg_with_coords = $vcg-> as_vcg()
; # handy for building a pixmap
or something or converting to dia xml for example
The VCG object allows you to output straight to a file through the vcg tool in
any of postscript, pbm and ppm. This functionality requires that the vcg tool
$vcg->output_as_ps('my_diagram.ps'); # now open the file in the gimp or
import into LaTeX and you can get this free Mad Scientist (TM) white coat and
The VCG object also allows you to output straight to file in annotated vcg with
coordinates, or plain vcg syntax. The plain syntax does not require the vcg
tool to be installed.
$vcg->output_as_plainvcg('compiler_graph.vcg'); # just in case you want to
generate a diagram but don't have vcg installed.
$vcg->output_as_vcg('compiler_graph_with_coords.vcg'); # lovely jubbly
GraphViz : http://www.graphviz.org
GraphViz perl module
Graph::Writer::VCG perl module
vcg/xvcg : man pages
Aaron Trevena < firstname.lastname@example.org
Copyright (C) 2003, Aaron Trevena, Leon Brocard
This module is free software; you can redistribute it or modify it under the
same terms as Perl itself.