Change in passing octree struct
This commit is contained in:
parent
423d1f2f40
commit
5997f2759c
4 changed files with 21 additions and 18 deletions
|
@ -318,7 +318,7 @@ void export_group_fills_to_svg(const char *path, const std::vector<SurfaceFill>
|
|||
#endif
|
||||
|
||||
// friend to Layer
|
||||
void Layer::make_fills()
|
||||
void Layer::make_fills(FillAdaptive_Internal::Octree* adaptive_fill_octree)
|
||||
{
|
||||
for (LayerRegion *layerm : m_regions)
|
||||
layerm->fills.clear();
|
||||
|
@ -345,7 +345,7 @@ void Layer::make_fills()
|
|||
f->layer_id = this->id();
|
||||
f->z = this->print_z;
|
||||
f->angle = surface_fill.params.angle;
|
||||
f->adapt_fill_octree = this->object()->adaptiveInfillOctree();
|
||||
f->adapt_fill_octree = adaptive_fill_octree;
|
||||
|
||||
// calculate flow spacing for infill pattern generation
|
||||
bool using_internal_flow = ! surface_fill.surface.is_solid() && ! surface_fill.params.flow.bridge;
|
||||
|
|
|
@ -13,6 +13,10 @@ class Layer;
|
|||
class PrintRegion;
|
||||
class PrintObject;
|
||||
|
||||
namespace FillAdaptive_Internal {
|
||||
struct Octree;
|
||||
};
|
||||
|
||||
class LayerRegion
|
||||
{
|
||||
public:
|
||||
|
@ -134,7 +138,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
void make_perimeters();
|
||||
void make_fills();
|
||||
void make_fills(FillAdaptive_Internal::Octree* adaptive_fill_octree);
|
||||
void make_ironing();
|
||||
|
||||
void export_region_slices_to_svg(const char *path) const;
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include "GCode/ToolOrdering.hpp"
|
||||
#include "GCode/WipeTower.hpp"
|
||||
#include "GCode/ThumbnailData.hpp"
|
||||
#include "Fill/FillAdaptive.hpp"
|
||||
|
||||
#include "libslic3r.h"
|
||||
|
||||
|
@ -26,6 +25,9 @@ enum class SlicingMode : uint32_t;
|
|||
class Layer;
|
||||
class SupportLayer;
|
||||
|
||||
namespace FillAdaptive_Internal {
|
||||
struct Octree;
|
||||
};
|
||||
|
||||
// Print step IDs for keeping track of the print state.
|
||||
enum PrintStep {
|
||||
|
@ -193,7 +195,6 @@ public:
|
|||
void project_and_append_custom_enforcers(std::vector<ExPolygons>& enforcers) const { project_and_append_custom_supports(FacetSupportType::ENFORCER, enforcers); }
|
||||
void project_and_append_custom_blockers(std::vector<ExPolygons>& blockers) const { project_and_append_custom_supports(FacetSupportType::BLOCKER, blockers); }
|
||||
|
||||
FillAdaptive_Internal::Octree* adaptiveInfillOctree() { return m_adapt_fill_octree.get(); }
|
||||
private:
|
||||
// to be called from Print only.
|
||||
friend class Print;
|
||||
|
@ -235,7 +236,7 @@ private:
|
|||
void discover_horizontal_shells();
|
||||
void combine_infill();
|
||||
void _generate_support_material();
|
||||
void prepare_adaptive_infill_data();
|
||||
std::unique_ptr<FillAdaptive_Internal::Octree> prepare_adaptive_infill_data();
|
||||
|
||||
// XYZ in scaled coordinates
|
||||
Vec3crd m_size;
|
||||
|
@ -256,8 +257,6 @@ private:
|
|||
// so that next call to make_perimeters() performs a union() before computing loops
|
||||
bool m_typed_slices = false;
|
||||
|
||||
std::unique_ptr<FillAdaptive_Internal::Octree> m_adapt_fill_octree = nullptr;
|
||||
|
||||
std::vector<ExPolygons> slice_region(size_t region_id, const std::vector<float> &z, SlicingMode mode) const;
|
||||
std::vector<ExPolygons> slice_modifiers(size_t region_id, const std::vector<float> &z) const;
|
||||
std::vector<ExPolygons> slice_volumes(const std::vector<float> &z, SlicingMode mode, const std::vector<const ModelVolume*> &volumes) const;
|
||||
|
|
|
@ -362,8 +362,6 @@ void PrintObject::prepare_infill()
|
|||
} // for each layer
|
||||
#endif /* SLIC3R_DEBUG_SLICE_PROCESSING */
|
||||
|
||||
this->prepare_adaptive_infill_data();
|
||||
|
||||
this->set_done(posPrepareInfill);
|
||||
}
|
||||
|
||||
|
@ -373,13 +371,15 @@ void PrintObject::infill()
|
|||
this->prepare_infill();
|
||||
|
||||
if (this->set_started(posInfill)) {
|
||||
std::unique_ptr<FillAdaptive_Internal::Octree> octree = this->prepare_adaptive_infill_data();
|
||||
|
||||
BOOST_LOG_TRIVIAL(debug) << "Filling layers in parallel - start";
|
||||
tbb::parallel_for(
|
||||
tbb::blocked_range<size_t>(0, m_layers.size()),
|
||||
[this](const tbb::blocked_range<size_t>& range) {
|
||||
[this, &octree](const tbb::blocked_range<size_t>& range) {
|
||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) {
|
||||
m_print->throw_if_canceled();
|
||||
m_layers[layer_idx]->make_fills();
|
||||
m_layers[layer_idx]->make_fills(octree.get());
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -432,14 +432,14 @@ void PrintObject::generate_support_material()
|
|||
}
|
||||
}
|
||||
|
||||
void PrintObject::prepare_adaptive_infill_data()
|
||||
std::unique_ptr<FillAdaptive_Internal::Octree> PrintObject::prepare_adaptive_infill_data()
|
||||
{
|
||||
const ConfigOptionPercent* opt_fill_density = this->print()->full_print_config().option<ConfigOptionPercent>("fill_density");
|
||||
const ConfigOptionFloatOrPercent* opt_infill_extrusion_width = this->print()->full_print_config().option<ConfigOptionFloatOrPercent>("infill_extrusion_width");
|
||||
|
||||
if(opt_fill_density == nullptr || opt_infill_extrusion_width == nullptr || opt_fill_density->value <= 0 || opt_infill_extrusion_width->value <= 0)
|
||||
{
|
||||
return;
|
||||
return std::unique_ptr<FillAdaptive_Internal::Octree>{};
|
||||
}
|
||||
|
||||
float fill_density = opt_fill_density->value;
|
||||
|
@ -448,15 +448,15 @@ void PrintObject::prepare_adaptive_infill_data()
|
|||
coordf_t line_spacing = infill_extrusion_width / ((fill_density / 100.0f) * 0.333333333f);
|
||||
|
||||
BoundingBoxf bed_shape(this->print()->config().bed_shape.values);
|
||||
BoundingBoxf3 printer_volume(Vec3d(bed_shape.min(0), bed_shape.min(1), 0),
|
||||
Vec3d(bed_shape.max(0), bed_shape.max(1), this->print()->config().max_print_height));
|
||||
BoundingBoxf3 printer_volume(Vec3d(bed_shape.min.x(), bed_shape.min.y(), 0),
|
||||
Vec3d(bed_shape.max.x(), bed_shape.max.y(), this->print()->config().max_print_height));
|
||||
|
||||
Vec3d model_center = this->model_object()->bounding_box().center();
|
||||
model_center(2) = 0.0f; // Set position in Z axis to 0
|
||||
model_center.z() = 0.0f; // Set position in Z axis to 0
|
||||
// Center of the first cube in octree
|
||||
|
||||
TriangleMesh mesh = this->model_object()->mesh();
|
||||
this->m_adapt_fill_octree = FillAdaptive::build_octree(mesh, line_spacing, printer_volume, model_center);
|
||||
return FillAdaptive::build_octree(mesh, line_spacing, printer_volume, model_center);
|
||||
}
|
||||
|
||||
void PrintObject::clear_layers()
|
||||
|
|
Loading…
Reference in a new issue