Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2011-09-01 23:06:28 +0400
committerAlessandro Ranellucci <aar@cpan.org>2011-09-01 23:06:28 +0400
commit55a523e1fa597923a4827c88378fb48b809367d0 (patch)
tree79a41aeb2abd0e1f5786dbf5bcb3282bf949dd20 /lib/Slic3r/Surface.pm
Initial import
Diffstat (limited to 'lib/Slic3r/Surface.pm')
-rw-r--r--lib/Slic3r/Surface.pm58
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;