package Geometry::Primitive::Bezier; use Moose; use MooseX::Storage; extends 'Geometry::Primitive'; with qw(Geometry::Primitive::Shape MooseX::Clone); with Storage(format => 'JSON', io => 'File'); use overload ('""' => 'to_string'); use Geometry::Primitive::Point; has 'control1' => ( is => 'rw', isa => 'Geometry::Primitive::Point', required => 1, coerce => 1 ); has 'control2' => ( is => 'rw', isa => 'Geometry::Primitive::Point', required => 1, coerce => 1 ); has 'end' => ( is => 'rw', isa => 'Geometry::Primitive::Point', required => 1, coerce => 1 ); has 'start' => ( is => 'rw', isa => 'Geometry::Primitive::Point', required => 1, coerce => 1 ); sub scale { my ($self, $amount) = @_; $self->start->x($self->start->x * $amount); $self->start->y($self->start->y * $amount); $self->end->x($self->end->x * $amount); $self->end->y($self->end->y * $amount); $self->control1->x($self->control1->x * $amount); $self->control1->y($self->control1->y * $amount); $self->control2->x($self->control2->x * $amount); $self->control2->y($self->control2->y * $amount); } sub point_end { my ($self) = @_; return $self->end; } sub point_start { my ($self) = @_; return $self->start; } sub to_string { my ($self) = @_; return $self->start->to_string.' - '.$self->control1->to_string .' = '.$self->control2->to_string.' = '.$self->end->to_string; } __PACKAGE__->meta->make_immutable; no Moose; 1; __END__ =head1 NAME Geometry::Primitive::Bezier - Cubic Bézier Curve =head1 DESCRIPTION Geometry::Primitive::Bezier represents a cubic Bézier curve. =head1 SYNOPSIS use Geometry::Primitive::Bezier; my $line = Geometry::Primitive::Bezier->new( start => $point1, control1 => $point2, control2 => $point3, end => $point4 ); =head1 ATTRIBUTES =head2 control1 Set/Get the first control point of the curve. =head2 control2 Set/Get the second control point of the curve. =head2 end Set/Get the end point of the curve. =head2 start Set/Get the start point of the line. =head1 METHODS =head2 new Creates a new Geometry::Primitive::Bezier =head2 grow Does nothing, as I'm not sure how. Patches or hints welcome. =head2 point_end Get the end point. Provided for Shape role. =head2 point_start Get the start point. Provided for Shape role. =head2 scale Scales this curve by the amount provided. Multiplies each coordinate by the amount. =head2 to_string Guess! =head1 AUTHOR Cory Watson =head1 COPYRIGHT & LICENSE You can redistribute and/or modify this code under the same terms as Perl itself.