Fixed a crash when slicing leads to no print.

Fixed a bug in TriangleMesh::bounding_box().
This commit is contained in:
bubnikv 2017-09-12 16:48:44 +02:00
parent b08d6f1969
commit 98408bbed0
4 changed files with 6 additions and 2 deletions

View File

@ -1,5 +1,6 @@
#include "BoundingBox.hpp" #include "BoundingBox.hpp"
#include <algorithm> #include <algorithm>
#include <assert.h>
namespace Slic3r { namespace Slic3r {
@ -125,6 +126,7 @@ template void BoundingBoxBase<Pointf>::merge(const Pointfs &points);
template <class PointClass> void template <class PointClass> void
BoundingBoxBase<PointClass>::merge(const BoundingBoxBase<PointClass> &bb) BoundingBoxBase<PointClass>::merge(const BoundingBoxBase<PointClass> &bb)
{ {
assert(bb.defined || bb.min.x >= bb.max.x || bb.min.y >= bb.max.y);
if (bb.defined) { if (bb.defined) {
if (this->defined) { if (this->defined) {
this->min.x = std::min(bb.min.x, this->min.x); this->min.x = std::min(bb.min.x, this->min.x);
@ -162,6 +164,7 @@ template void BoundingBox3Base<Pointf3>::merge(const Pointf3s &points);
template <class PointClass> void template <class PointClass> void
BoundingBox3Base<PointClass>::merge(const BoundingBox3Base<PointClass> &bb) BoundingBox3Base<PointClass>::merge(const BoundingBox3Base<PointClass> &bb)
{ {
assert(bb.defined || bb.min.x >= bb.max.x || bb.min.y >= bb.max.y || bb.min.z >= bb.max.z);
if (bb.defined) { if (bb.defined) {
if (this->defined) { if (this->defined) {
this->min.z = std::min(bb.min.z, this->min.z); this->min.z = std::min(bb.min.z, this->min.z);

View File

@ -710,7 +710,6 @@ bool GCode::_do_export(Print &print, FILE *file)
// Just wait for a bit to let the user check, that the priming succeeded. // Just wait for a bit to let the user check, that the priming succeeded.
fprintf(file, "M117 Verify extruder priming\nM0 S10\nM117 Printing\n"); fprintf(file, "M117 Verify extruder priming\nM0 S10\nM117 Printing\n");
} }
write(file, this->unretract());
} else } else
write(file, WipeTowerIntegration::prime_single_color_print(print, initial_extruder_id, *this)); write(file, WipeTowerIntegration::prime_single_color_print(print, initial_extruder_id, *this));
} }

View File

@ -1253,7 +1253,8 @@ void PrintObject::_slice()
goto end; goto end;
delete layer; delete layer;
this->layers.pop_back(); this->layers.pop_back();
this->layers.back()->upper_layer = nullptr; if (! this->layers.empty())
this->layers.back()->upper_layer = nullptr;
} }
end: end:
; ;

View File

@ -574,6 +574,7 @@ BoundingBoxf3
TriangleMesh::bounding_box() const TriangleMesh::bounding_box() const
{ {
BoundingBoxf3 bb; BoundingBoxf3 bb;
bb.defined = true;
bb.min.x = this->stl.stats.min.x; bb.min.x = this->stl.stats.min.x;
bb.min.y = this->stl.stats.min.y; bb.min.y = this->stl.stats.min.y;
bb.min.z = this->stl.stats.min.z; bb.min.z = this->stl.stats.min.z;