From ac88fbcbb0fecade8113d744a8af7ccadb13ee57 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Thu, 21 Nov 2013 18:03:40 +0100 Subject: [PATCH] Ported clip_end(), length(), is_perimeter(), is_fill(), is_bridge() to XS --- lib/Slic3r/ExtrusionPath.pm | 36 ------------------------------------ xs/src/ExtrusionEntity.cpp | 37 +++++++++++++++++++++++++++++++++++++ xs/src/ExtrusionEntity.hpp | 5 +++++ xs/xsp/ExtrusionLoop.xsp | 3 +++ xs/xsp/ExtrusionPath.xsp | 5 +++++ 5 files changed, 50 insertions(+), 36 deletions(-) diff --git a/lib/Slic3r/ExtrusionPath.pm b/lib/Slic3r/ExtrusionPath.pm index 5b8cff61..e2f43e34 100644 --- a/lib/Slic3r/ExtrusionPath.pm +++ b/lib/Slic3r/ExtrusionPath.pm @@ -10,8 +10,6 @@ our @EXPORT_OK = qw(EXTR_ROLE_PERIMETER EXTR_ROLE_EXTERNAL_PERIMETER EXTR_ROLE_INTERNALBRIDGE EXTR_ROLE_SKIRT EXTR_ROLE_SUPPORTMATERIAL EXTR_ROLE_GAPFILL); our %EXPORT_TAGS = (roles => \@EXPORT_OK); -use Slic3r::Geometry qw(PI X Y epsilon deg2rad rotate_points); - sub clip_with_polygon { my $self = shift; my ($polygon) = @_; @@ -32,43 +30,9 @@ sub simplify { $self->polyline($self->polyline->simplify(@_)); } -sub clip_end { - my $self = shift; - my $polyline = $self->polyline; - $polyline->clip_end(@_); - $self->polyline($polyline); -} - -sub length { - my $self = shift; - return $self->polyline->length; -} - sub points { my $self = shift; return $self->polyline; } -sub is_perimeter { - my $self = shift; - return $self->role == EXTR_ROLE_PERIMETER - || $self->role == EXTR_ROLE_EXTERNAL_PERIMETER - || $self->role == EXTR_ROLE_OVERHANG_PERIMETER - || $self->role == EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER; -} - -sub is_fill { - my $self = shift; - return $self->role == EXTR_ROLE_FILL - || $self->role == EXTR_ROLE_SOLIDFILL - || $self->role == EXTR_ROLE_TOPSOLIDFILL; -} - -sub is_bridge { - my $self = shift; - return $self->role == EXTR_ROLE_BRIDGE - || $self->role == EXTR_ROLE_INTERNALBRIDGE - || $self->role == EXTR_ROLE_OVERHANG_PERIMETER; -} - 1; diff --git a/xs/src/ExtrusionEntity.cpp b/xs/src/ExtrusionEntity.cpp index e6461a9f..1c8231af 100644 --- a/xs/src/ExtrusionEntity.cpp +++ b/xs/src/ExtrusionEntity.cpp @@ -5,6 +5,31 @@ namespace Slic3r { +bool +ExtrusionEntity::is_perimeter() const +{ + return this->role == erPerimeter + || this->role == erExternalPerimeter + || this->role == erOverhangPerimeter + || this->role == erContourInternalPerimeter; +} + +bool +ExtrusionEntity::is_fill() const +{ + return this->role == erFill + || this->role == erSolidFill + || this->role == erTopSolidFill; +} + +bool +ExtrusionEntity::is_bridge() const +{ + return this->role == erBrige + || this->role == erInternalBridge + || this->role == erOverhangPerimeter; +} + ExtrusionPath* ExtrusionPath::clone() const { @@ -47,6 +72,18 @@ ExtrusionPath::subtract_expolygons(ExPolygonCollection* collection) const return this->_inflate_collection(clipped); } +void +ExtrusionPath::clip_end(double distance) +{ + this->polyline.clip_end(distance); +} + +double +ExtrusionPath::length() const +{ + return this->polyline.length(); +} + ExtrusionEntityCollection* ExtrusionPath::_inflate_collection(const Polylines &polylines) const { diff --git a/xs/src/ExtrusionEntity.hpp b/xs/src/ExtrusionEntity.hpp index 6d5dc9a8..c97ceb2a 100644 --- a/xs/src/ExtrusionEntity.hpp +++ b/xs/src/ExtrusionEntity.hpp @@ -36,6 +36,9 @@ class ExtrusionEntity virtual void reverse() = 0; virtual Point* first_point() const = 0; virtual Point* last_point() const = 0; + bool is_perimeter() const; + bool is_fill() const; + bool is_bridge() const; }; typedef std::vector ExtrusionEntitiesPtr; @@ -50,6 +53,8 @@ class ExtrusionPath : public ExtrusionEntity Point* last_point() const; ExtrusionEntityCollection* intersect_expolygons(ExPolygonCollection* collection) const; ExtrusionEntityCollection* subtract_expolygons(ExPolygonCollection* collection) const; + void clip_end(double distance); + double length() const; private: ExtrusionEntityCollection* _inflate_collection(const Polylines &polylines) const; }; diff --git a/xs/xsp/ExtrusionLoop.xsp b/xs/xsp/ExtrusionLoop.xsp index 230443b6..9bef01d4 100644 --- a/xs/xsp/ExtrusionLoop.xsp +++ b/xs/xsp/ExtrusionLoop.xsp @@ -22,6 +22,9 @@ %code{% const char* CLASS = "Slic3r::Point"; RETVAL = THIS->first_point(); %}; Point* last_point() %code{% const char* CLASS = "Slic3r::Point"; RETVAL = THIS->last_point(); %}; + bool is_perimeter(); + bool is_fill(); + bool is_bridge(); %{ ExtrusionLoop* diff --git a/xs/xsp/ExtrusionPath.xsp b/xs/xsp/ExtrusionPath.xsp index 2f92b3f4..3ba98c88 100644 --- a/xs/xsp/ExtrusionPath.xsp +++ b/xs/xsp/ExtrusionPath.xsp @@ -24,6 +24,11 @@ %code{% const char* CLASS = "Slic3r::ExtrusionPath::Collection"; RETVAL = THIS->intersect_expolygons(collection); %}; ExtrusionEntityCollection* subtract_expolygons(ExPolygonCollection* collection) %code{% const char* CLASS = "Slic3r::ExtrusionPath::Collection"; RETVAL = THIS->subtract_expolygons(collection); %}; + void clip_end(double distance); + double length(); + bool is_perimeter(); + bool is_fill(); + bool is_bridge(); %{ ExtrusionPath*