Bugfix: crash in some circumstances when avoid_crossing_perimeters is enabled. #2266

This commit is contained in:
Alessandro Ranellucci 2014-10-15 00:59:26 +02:00
parent 39b41fda12
commit 6b8f03ff1c
3 changed files with 16 additions and 1 deletions

View File

@ -18,10 +18,17 @@ MotionPlanner::~MotionPlanner()
delete *graph;
}
size_t
MotionPlanner::islands_count() const
{
return this->islands.size();
}
void
MotionPlanner::initialize()
{
if (this->initialized) return;
if (this->islands.empty()) return; // prevent initialization of empty BoundingBox
ExPolygons expp;
for (ExPolygons::const_iterator island = this->islands.begin(); island != this->islands.end(); ++island) {
@ -70,6 +77,12 @@ MotionPlanner::shortest_path(const Point &from, const Point &to, Polyline* polyl
{
if (!this->initialized) this->initialize();
if (this->islands.empty()) {
polyline->points.push_back(from);
polyline->points.push_back(to);
return;
}
// Are both points in the same island?
int island_idx = -1;
for (ExPolygons::const_iterator island = this->islands.begin(); island != this->islands.end(); ++island) {

View File

@ -22,6 +22,7 @@ class MotionPlanner
MotionPlanner(const ExPolygons &islands);
~MotionPlanner();
void shortest_path(const Point &from, const Point &to, Polyline* polyline);
size_t islands_count() const;
private:
ExPolygons islands;

View File

@ -8,7 +8,8 @@
%name{Slic3r::MotionPlanner} class MotionPlanner {
MotionPlanner(ExPolygons islands);
~MotionPlanner();
int islands_count();
Polyline* shortest_path(Point* from, Point* to)
%code%{ RETVAL = new Polyline(); THIS->shortest_path(*from, *to, RETVAL); %};
};