Geometry::Primitive::Bezier - Cubic Bézier Curve


Geometry-Primitive documentation Contained in the Geometry-Primitive distribution.

Index


Code Index:

NAME

Top

Geometry::Primitive::Bezier - Cubic Bézier Curve

DESCRIPTION

Top

Geometry::Primitive::Bezier represents a cubic Bézier curve.

SYNOPSIS

Top

  use Geometry::Primitive::Bezier;

  my $line = Geometry::Primitive::Bezier->new(
      start => $point1,
      control1 => $point2,
      control2 => $point3,
      end => $point4
  );

ATTRIBUTES

Top

control1

Set/Get the first control point of the curve.

control2

Set/Get the second control point of the curve.

end

Set/Get the end point of the curve.

start

Set/Get the start point of the line.

METHODS

Top

new

Creates a new Geometry::Primitive::Bezier

grow

Does nothing, as I'm not sure how. Patches or hints welcome.

point_end

Get the end point. Provided for Shape role.

point_start

Get the start point. Provided for Shape role.

scale

Scales this curve by the amount provided. Multiplies each coordinate by the amount.

to_string

Guess!

AUTHOR

Top

Cory Watson <gphat@cpan.org>

COPYRIGHT & LICENSE

Top


Geometry-Primitive documentation Contained in the Geometry-Primitive distribution.

package Geometry::Primitive::Bezier;
use Moose;
use MooseX::Storage;

with qw(Geometry::Primitive::Shape MooseX::Clone MooseX::Storage::Deferred);

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__