ENH: refine the skip_object&&cached_object logic
when the cached object is skipped we need to reslicing it; also do overhang detect for all objects Change-Id: Ic842fd5a441426983a760145aeff9285e398d430
This commit is contained in:
parent
0276c15ba2
commit
8b42a8b7e9
|
@ -1398,6 +1398,20 @@ void PrintObject::copy_layers_from_shared_object()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrintObject::copy_layers_overhang_from_shared_object()
|
||||||
|
{
|
||||||
|
if (m_shared_object) {
|
||||||
|
for (size_t index = 0; index < m_layers.size() && index < m_shared_object->m_layers.size(); index++)
|
||||||
|
{
|
||||||
|
Layer* layer_src = m_layers[index];
|
||||||
|
layer_src->loverhangs = m_shared_object->m_layers[index]->loverhangs;
|
||||||
|
layer_src->loverhangs_bbox = m_shared_object->m_layers[index]->loverhangs_bbox;
|
||||||
|
}
|
||||||
|
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": this=%1%, copied layer overhang from object %2%")%this%m_shared_object;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// BBS
|
// BBS
|
||||||
BoundingBox PrintObject::get_first_layer_bbox(float& a, float& layer_height, std::string& name)
|
BoundingBox PrintObject::get_first_layer_bbox(float& a, float& layer_height, std::string& name)
|
||||||
{
|
{
|
||||||
|
@ -1499,6 +1513,7 @@ void Print::process(bool use_cache)
|
||||||
};
|
};
|
||||||
int object_count = m_objects.size();
|
int object_count = m_objects.size();
|
||||||
std::set<PrintObject*> need_slicing_objects;
|
std::set<PrintObject*> need_slicing_objects;
|
||||||
|
std::set<PrintObject*> re_slicing_objects;
|
||||||
if (!use_cache) {
|
if (!use_cache) {
|
||||||
for (int index = 0; index < object_count; index++)
|
for (int index = 0; index < object_count; index++)
|
||||||
{
|
{
|
||||||
|
@ -1535,8 +1550,12 @@ void Print::process(bool use_cache)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found_shared) {
|
if (!found_shared) {
|
||||||
BOOST_LOG_TRIVIAL(error) << boost::format("Also can not find the shared object, identify_id %1%")%obj->model_object()->instances[0]->loaded_id;
|
BOOST_LOG_TRIVIAL(warning) << boost::format("Also can not find the shared object, identify_id %1%, maybe shared object is skipped")%obj->model_object()->instances[0]->loaded_id;
|
||||||
throw Slic3r::SlicingError("Can not find the cached data.");
|
//throw Slic3r::SlicingError("Can not find the cached data.");
|
||||||
|
//don't report errot, set use_cache to false, and reslice these objects
|
||||||
|
need_slicing_objects.insert(obj);
|
||||||
|
re_slicing_objects.insert(obj);
|
||||||
|
//use_cache = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1594,18 +1613,26 @@ void Print::process(bool use_cache)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (PrintObject *obj : m_objects) {
|
for (PrintObject *obj : m_objects) {
|
||||||
if (obj->set_started(posSlice))
|
if (re_slicing_objects.count(obj) == 0) {
|
||||||
obj->set_done(posSlice);
|
if (obj->set_started(posSlice))
|
||||||
if (obj->set_started(posPerimeters))
|
obj->set_done(posSlice);
|
||||||
obj->set_done(posPerimeters);
|
if (obj->set_started(posPerimeters))
|
||||||
if (obj->set_started(posPrepareInfill))
|
obj->set_done(posPerimeters);
|
||||||
obj->set_done(posPrepareInfill);
|
if (obj->set_started(posPrepareInfill))
|
||||||
if (obj->set_started(posInfill))
|
obj->set_done(posPrepareInfill);
|
||||||
obj->set_done(posInfill);
|
if (obj->set_started(posInfill))
|
||||||
if (obj->set_started(posIroning))
|
obj->set_done(posInfill);
|
||||||
obj->set_done(posIroning);
|
if (obj->set_started(posIroning))
|
||||||
if (obj->set_started(posSupportMaterial))
|
obj->set_done(posIroning);
|
||||||
obj->set_done(posSupportMaterial);
|
if (obj->set_started(posSupportMaterial))
|
||||||
|
obj->set_done(posSupportMaterial);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj->make_perimeters();
|
||||||
|
obj->infill();
|
||||||
|
obj->ironing();
|
||||||
|
obj->generate_support_material();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1718,7 +1745,8 @@ void Print::process(bool use_cache)
|
||||||
}
|
}
|
||||||
//BBS
|
//BBS
|
||||||
for (PrintObject *obj : m_objects) {
|
for (PrintObject *obj : m_objects) {
|
||||||
if ((!use_cache)&&(need_slicing_objects.count(obj) != 0)) {
|
if (((!use_cache)&&(need_slicing_objects.count(obj) != 0))
|
||||||
|
|| (use_cache &&(re_slicing_objects.count(obj) != 0))){
|
||||||
obj->simplify_extrusion_path();
|
obj->simplify_extrusion_path();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1737,6 +1765,7 @@ void Print::process(bool use_cache)
|
||||||
obj->detect_overhangs_for_lift();
|
obj->detect_overhangs_for_lift();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
obj->copy_layers_overhang_from_shared_object();
|
||||||
if (obj->set_started(posDetectOverhangsForLift))
|
if (obj->set_started(posDetectOverhangsForLift))
|
||||||
obj->set_done(posDetectOverhangsForLift);
|
obj->set_done(posDetectOverhangsForLift);
|
||||||
}
|
}
|
||||||
|
|
|
@ -428,6 +428,7 @@ public:
|
||||||
void set_shared_object(PrintObject *object);
|
void set_shared_object(PrintObject *object);
|
||||||
void clear_shared_object();
|
void clear_shared_object();
|
||||||
void copy_layers_from_shared_object();
|
void copy_layers_from_shared_object();
|
||||||
|
void copy_layers_overhang_from_shared_object();
|
||||||
|
|
||||||
// BBS: Boundingbox of the first layer
|
// BBS: Boundingbox of the first layer
|
||||||
BoundingBox firstLayerObjectBrimBoundingBox;
|
BoundingBox firstLayerObjectBrimBoundingBox;
|
||||||
|
|
Loading…
Reference in New Issue