diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2011-09-01 23:06:28 +0400 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2011-09-01 23:06:28 +0400 |
commit | 55a523e1fa597923a4827c88378fb48b809367d0 (patch) | |
tree | 79a41aeb2abd0e1f5786dbf5bcb3282bf949dd20 /lib/Slic3r/Surface.pm |
Initial import
Diffstat (limited to 'lib/Slic3r/Surface.pm')
-rw-r--r-- | lib/Slic3r/Surface.pm | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/Slic3r/Surface.pm b/lib/Slic3r/Surface.pm new file mode 100644 index 000000000..1558b61ee --- /dev/null +++ b/lib/Slic3r/Surface.pm @@ -0,0 +1,58 @@ +package Slic3r::Surface; +use Moose; + +use Moose::Util::TypeConstraints; + +has 'contour' => ( + is => 'ro', + isa => 'Slic3r::Polyline::Closed', + required => 1, +); + +has 'holes' => ( + traits => ['Array'], + is => 'rw', + isa => 'ArrayRef[Slic3r::Polyline::Closed]', + default => sub { [] }, + handles => { + 'add_hole' => 'push', + }, +); + +has 'surface_type' => ( + is => 'rw', + isa => enum([qw(internal bottom top)]), +); + +after 'add_hole' => sub { + my $self = shift; + + # add a weak reference to this surface in polyline objects + # (avoid circular refs) + $self->holes->[-1]->hole_of($self); +}; + +sub BUILD { + my $self = shift; + + # add a weak reference to this surface in polyline objects + # (avoid circular refs) + $self->contour->contour_of($self) if $self->contour; + $_->hole_of($self) for @{ $self->holes }; +} + +sub id { + my $self = shift; + return $self->contour->id; +} + +sub encloses_point { + my $self = shift; + my ($point) = @_; + + return 0 if !$self->contour->encloses_point($point); + return 0 if grep $_->encloses_point($point), @{ $self->holes }; + return 1; +} + +1; |