Make tests happy
This commit is contained in:
parent
5571144c0e
commit
b14290b9f6
@ -6,7 +6,8 @@ use parent qw(Exporter);
|
||||
|
||||
our @EXPORT_OK = qw(EXTR_ROLE_PERIMETER EXTR_ROLE_EXTERNAL_PERIMETER EXTR_ROLE_OVERHANG_PERIMETER
|
||||
EXTR_ROLE_FILL EXTR_ROLE_SOLIDFILL EXTR_ROLE_TOPSOLIDFILL EXTR_ROLE_GAPFILL EXTR_ROLE_BRIDGE
|
||||
EXTR_ROLE_SKIRT EXTR_ROLE_SUPPORTMATERIAL EXTR_ROLE_SUPPORTMATERIAL_INTERFACE);
|
||||
EXTR_ROLE_SKIRT EXTR_ROLE_SUPPORTMATERIAL EXTR_ROLE_SUPPORTMATERIAL_INTERFACE
|
||||
EXTR_ROLE_NONE);
|
||||
our %EXPORT_TAGS = (roles => \@EXPORT_OK);
|
||||
|
||||
1;
|
||||
|
@ -306,7 +306,7 @@ sub travel_to {
|
||||
my $travel = Slic3r::Polyline->new($self->last_pos, $point);
|
||||
|
||||
# check whether a straight travel move would need retraction
|
||||
my $needs_retraction = $self->needs_retraction($travel, $role);
|
||||
my $needs_retraction = $self->needs_retraction($travel, $role // EXTR_ROLE_NONE);
|
||||
|
||||
# if a retraction would be needed, try to use avoid_crossing_perimeters to plan a
|
||||
# multi-hop travel path inside the configuration space
|
||||
@ -316,7 +316,7 @@ sub travel_to {
|
||||
$travel = $self->avoid_crossing_perimeters->travel_to($self, $point);
|
||||
|
||||
# check again whether the new travel path still needs a retraction
|
||||
$needs_retraction = $self->needs_retraction($travel, $role);
|
||||
$needs_retraction = $self->needs_retraction($travel, $role // EXTR_ROLE_NONE);
|
||||
}
|
||||
|
||||
# Re-allow avoid_crossing_perimeters for the next travel moves
|
||||
|
@ -355,7 +355,7 @@ sub _traverse_loops {
|
||||
# there's only one contour loop).
|
||||
$loop_role = EXTRL_ROLE_CONTOUR_INTERNAL_PERIMETER;
|
||||
} else {
|
||||
$loop_role = EXTR_ROLE_PERIMETER;
|
||||
$loop_role = EXTRL_ROLE_DEFAULT;
|
||||
}
|
||||
|
||||
# detect overhanging/bridging perimeters
|
||||
|
@ -329,13 +329,16 @@ use Slic3r::Test;
|
||||
scalar(@$expolygons), 'expected number of collections';
|
||||
ok !defined(first { !$_->isa('Slic3r::ExtrusionPath::Collection') } @{$g->loops}),
|
||||
'everything is returned as collections';
|
||||
is scalar(map @$_, @{$g->loops}),
|
||||
|
||||
my $flattened_loops = $g->loops->flatten;
|
||||
my @loops = @$flattened_loops;
|
||||
is scalar(@loops),
|
||||
$expected{total}, 'expected number of loops';
|
||||
is scalar(grep $_->role == EXTR_ROLE_EXTERNAL_PERIMETER, map @$_, map @$_, @{$g->loops}),
|
||||
is scalar(grep $_->role == EXTR_ROLE_EXTERNAL_PERIMETER, map @$_, @loops),
|
||||
$expected{external}, 'expected number of external loops';
|
||||
is scalar(grep $_->role == EXTRL_ROLE_CONTOUR_INTERNAL_PERIMETER, map @$_, @{$g->loops}),
|
||||
is scalar(grep $_->role == EXTRL_ROLE_CONTOUR_INTERNAL_PERIMETER, @loops),
|
||||
$expected{cinternal}, 'expected number of internal contour loops';
|
||||
is scalar(grep $_->polygon->is_counter_clockwise, map @$_, @{$g->loops}),
|
||||
is scalar(grep $_->polygon->is_counter_clockwise, @loops),
|
||||
$expected{ccw}, 'expected number of ccw loops';
|
||||
|
||||
return $g;
|
||||
|
@ -13,6 +13,7 @@ class Extruder;
|
||||
|
||||
/* Each ExtrusionRole value identifies a distinct set of { extruder, speed } */
|
||||
enum ExtrusionRole {
|
||||
erNone,
|
||||
erPerimeter,
|
||||
erExternalPerimeter,
|
||||
erOverhangPerimeter,
|
||||
|
@ -156,7 +156,7 @@ REGISTER_CLASS(Wipe, "GCode::Wipe");
|
||||
GCode::GCode()
|
||||
: enable_loop_clipping(true), enable_cooling_markers(false), layer_count(0),
|
||||
layer_index(-1), first_layer(false), elapsed_time(0), volumetric_speed(0),
|
||||
_last_pos_defined(false)
|
||||
_last_pos_defined(false), layer(NULL), placeholder_parser(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ GCode::needs_retraction(const Polyline &travel, ExtrusionRole role)
|
||||
|
||||
if (role == erSupportMaterial) {
|
||||
SupportLayer* support_layer = dynamic_cast<SupportLayer*>(this->layer);
|
||||
if (support_layer->support_islands.contains(travel)) {
|
||||
if (support_layer != NULL && support_layer->support_islands.contains(travel)) {
|
||||
// skip retraction if this is a travel move inside a support material island
|
||||
return false;
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ class GCode {
|
||||
void apply_print_config(const PrintConfig &print_config);
|
||||
void set_origin(const Pointf &pointf);
|
||||
std::string preamble();
|
||||
bool needs_retraction(const Polyline &travel, ExtrusionRole role);
|
||||
bool needs_retraction(const Polyline &travel, ExtrusionRole role = erNone);
|
||||
std::string retract(bool toolchange = false);
|
||||
std::string unretract();
|
||||
Pointf point_to_gcode(const Point &point);
|
||||
|
@ -38,9 +38,8 @@ ExtrusionLoop::arrayref()
|
||||
CODE:
|
||||
AV* av = newAV();
|
||||
av_fill(av, THIS->paths.size()-1);
|
||||
int i = 0;
|
||||
for (ExtrusionPaths::iterator it = THIS->paths.begin(); it != THIS->paths.end(); ++it) {
|
||||
av_store(av, i++, perl_to_SV_ref(*it));
|
||||
av_store(av, it - THIS->paths.begin(), perl_to_SV_ref(*it));
|
||||
}
|
||||
RETVAL = newRV_noinc((SV*)av);
|
||||
OUTPUT:
|
||||
|
@ -133,6 +133,7 @@ ExtrusionPath::subtract_expolygons(ExPolygonCollection* collection)
|
||||
IV
|
||||
_constant()
|
||||
ALIAS:
|
||||
EXTR_ROLE_NONE = erNone
|
||||
EXTR_ROLE_PERIMETER = erPerimeter
|
||||
EXTR_ROLE_EXTERNAL_PERIMETER = erExternalPerimeter
|
||||
EXTR_ROLE_OVERHANG_PERIMETER = erOverhangPerimeter
|
||||
|
@ -152,7 +152,7 @@
|
||||
void set_origin(Pointf* pointf)
|
||||
%code{% THIS->set_origin(*pointf); %};
|
||||
std::string preamble();
|
||||
bool needs_retraction(Polyline* travel, ExtrusionRole role)
|
||||
bool needs_retraction(Polyline* travel, ExtrusionRole role = erNone)
|
||||
%code{% RETVAL = THIS->needs_retraction(*travel, role); %};
|
||||
std::string retract(bool toolchange = false);
|
||||
std::string unretract();
|
||||
|
Loading…
Reference in New Issue
Block a user