X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLaTeX%2FTikZ%2FSet%2FPolyline.pm;fp=lib%2FLaTeX%2FTikZ%2FSet%2FPolyline.pm;h=ef339e4d9a213e8600b721b0d8fd10075faa51e7;hb=080eb1e263eb7c3700a9ebfd96522eaa534a0b6c;hp=0000000000000000000000000000000000000000;hpb=d6ce9bd1690e1ed3ceb9beb90380c94a4efa6e54;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/lib/LaTeX/TikZ/Set/Polyline.pm b/lib/LaTeX/TikZ/Set/Polyline.pm new file mode 100644 index 0000000..ef339e4 --- /dev/null +++ b/lib/LaTeX/TikZ/Set/Polyline.pm @@ -0,0 +1,96 @@ +package LaTeX::TikZ::Set::Polyline; + +use strict; +use warnings; + +=head1 NAME + +LaTeX::TikZ::Set::Polyline - A set object representing a line. + +=head1 VERSION + +Version 0.01 + +=cut + +our $VERSION = '0.01'; + +use LaTeX::TikZ::Set::Point; + +use Any::Moose; +use Any::Moose 'Util::TypeConstraints'; + +with 'LaTeX::TikZ::Set::Op'; + +subtype 'LaTeX::TikZ::Set::Polyline::Vertices' + => as 'ArrayRef[LaTeX::TikZ::Set::Point]' + => where { @$_ >= 2 } + => message { 'at least two LaTeX::TikZ::Set::Point objects are needed in order to build a polyline' }; + +coerce 'LaTeX::TikZ::Set::Polyline::Vertices' + => from 'ArrayRef[Any]' + => via { [ map LaTeX::TikZ::Set::Point->new(point => $_), @$_ ] }; + +has '_points' => ( + is => 'ro', + isa => 'LaTeX::TikZ::Set::Polyline::Vertices', + init_arg => 'points', + required => 1, + coerce => 1, +); + +sub points { @{$_[0]->_points} } + +has 'closed' => ( + is => 'ro', + isa => 'Bool', + default => 0, +); + +sub path { + my $set = shift; + + join ' -- ', map($_->path(@_), $set->points), + ($set->closed ? 'cycle' : ()); +} + +use LaTeX::TikZ::Interface polyline => sub { + shift; + + __PACKAGE__->new(points => \@_); +}; + +use LaTeX::TikZ::Interface closed_polyline => sub { + shift; + + __PACKAGE__->new(points => \@_, closed => 1); +}; + +__PACKAGE__->meta->make_immutable; + +=head1 AUTHOR + +Vincent Pit, C<< >>, L. + +You can contact me by mail or on C (vincent). + +=head1 BUGS + +Please report any bugs or feature requests to C, or through the web interface at L. +I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc LaTeX::TikZ + +=head1 COPYRIGHT & LICENSE + +Copyright 2010 Vincent Pit, all rights reserved. + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=cut + +1; # End of LaTeX::TikZ::Set::Polyline