mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-19 06:41:14 -06:00
Merge branch 'master-remote' into SoftFever
# Conflicts: # bbl/i18n/BambuStudio.pot # bbl/i18n/de/BambuStudio_de.po # bbl/i18n/en/BambuStudio_en.po # bbl/i18n/es/BambuStudio_es.po # bbl/i18n/fr/BambuStudio_fr.po # bbl/i18n/hu/BambuStudio_hu.po # bbl/i18n/nl/BambuStudio_nl.po # bbl/i18n/sv/BambuStudio_sv.po # bbl/i18n/zh_cn/BambuStudio_zh_CN.po # resources/i18n/de/BambuStudio.mo # resources/i18n/en/BambuStudio.mo # resources/i18n/es/BambuStudio.mo # resources/i18n/fr/BambuStudio.mo # resources/i18n/hu/BambuStudio.mo # resources/i18n/nl/BambuStudio.mo # resources/i18n/sv/BambuStudio.mo # resources/i18n/zh_cn/BambuStudio.mo # resources/profiles/BBL.json # resources/profiles/Creality.json # resources/profiles/Voron.json # src/libslic3r/PrintConfig.cpp # src/libslic3r/TreeSupport.cpp # src/slic3r/GUI/DeviceManager.cpp # src/slic3r/GUI/ReleaseNote.cpp # version.inc
This commit is contained in:
commit
260156648d
104 changed files with 12137 additions and 1384 deletions
|
@ -78,6 +78,7 @@ using ItemGroup = std::vector<std::reference_wrapper<Item>>;
|
|||
|
||||
// A coefficient used in separating bigger items and smaller items.
|
||||
const double BIG_ITEM_TRESHOLD = 0.02;
|
||||
#define VITRIFY_TEMP_DIFF_THRSH 15 // bed temp can be higher than vitrify temp, but not higher than this thresh
|
||||
|
||||
// Fill in the placer algorithm configuration with values carefully chosen for
|
||||
// Slic3r.
|
||||
|
@ -423,9 +424,9 @@ protected:
|
|||
for (int i = 0; i < m_items.size(); i++) {
|
||||
Item& p = m_items[i];
|
||||
if (p.is_virt_object) continue;
|
||||
score += lambda3 * (item.bed_temp - p.vitrify_temp > 0);
|
||||
score += lambda3 * (item.bed_temp - p.vitrify_temp > VITRIFY_TEMP_DIFF_THRSH);
|
||||
}
|
||||
score += lambda3 * (item.bed_temp - item.vitrify_temp > 0);
|
||||
score += lambda3 * (item.bed_temp - item.vitrify_temp > VITRIFY_TEMP_DIFF_THRSH);
|
||||
score += lambda4 * hasRowHeightConflict + lambda4 * hasLidHeightConflict;
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -775,7 +775,7 @@ std::string CoolingBuffer::apply_layer_cooldown(
|
|||
new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed);
|
||||
}
|
||||
//BBS
|
||||
if (additional_fan_speed_new != m_additional_fan_speed && m_config.auxiliary_fan.value) {
|
||||
if (additional_fan_speed_new != m_additional_fan_speed) {
|
||||
m_additional_fan_speed = additional_fan_speed_new;
|
||||
if (immediately_apply)
|
||||
new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed);
|
||||
|
@ -813,7 +813,7 @@ std::string CoolingBuffer::apply_layer_cooldown(
|
|||
//BBS: force to write a fan speed command again
|
||||
if (m_current_fan_speed != -1)
|
||||
new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed);
|
||||
if (m_additional_fan_speed != -1 && m_config.auxiliary_fan.value)
|
||||
if (m_additional_fan_speed != -1)
|
||||
new_gcode += GCodeWriter::set_additional_fan(m_additional_fan_speed);
|
||||
}
|
||||
else if (line->type & CoolingLine::TYPE_EXTRUDE_END) {
|
||||
|
|
|
@ -260,8 +260,8 @@ public:
|
|||
{
|
||||
ExPolygon *area;
|
||||
int type;
|
||||
int dist_to_top;
|
||||
AreaGroup(ExPolygon *a, int t, int d) : area(a), type(t), dist_to_top(d) {}
|
||||
coordf_t dist_to_top; // mm dist to top
|
||||
AreaGroup(ExPolygon *a, int t, coordf_t d) : area(a), type(t), dist_to_top(d) {}
|
||||
};
|
||||
std::vector<AreaGroup> area_groups;
|
||||
|
||||
|
|
|
@ -184,6 +184,12 @@ inline Point operator* (const Point& l, const double& r)
|
|||
return { coord_t(l.x() * r), coord_t(l.y() * r) };
|
||||
}
|
||||
|
||||
inline std::ostream &operator<<(std::ostream &os, const Point &pt)
|
||||
{
|
||||
os << unscale_(pt.x()) << "," << unscale_(pt.y());
|
||||
return os;
|
||||
}
|
||||
|
||||
inline bool is_approx(const Point &p1, const Point &p2, coord_t epsilon = coord_t(SCALED_EPSILON))
|
||||
{
|
||||
Point d = (p2 - p1).cwiseAbs();
|
||||
|
|
|
@ -457,7 +457,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print
|
|||
convex_hull = offset(convex_hull_no_offset,
|
||||
// Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects
|
||||
// exactly by satisfying the extruder_clearance_radius, this test will not trigger collision.
|
||||
float(scale_(0.5 * print.config().extruder_clearance_radius.value - EPSILON)),
|
||||
float(scale_(0.5 * print.config().extruder_clearance_max_radius.value - EPSILON)),
|
||||
jtRound, scale_(0.1)).front();
|
||||
// instance.shift is a position of a centered object, while model object may not be centered.
|
||||
// Convert the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset.
|
||||
|
|
|
@ -360,6 +360,7 @@ public:
|
|||
// Get a layer approximately at print_z.
|
||||
const Layer* get_layer_at_printz(coordf_t print_z, coordf_t epsilon) const;
|
||||
Layer* get_layer_at_printz(coordf_t print_z, coordf_t epsilon);
|
||||
int get_layer_idx_get_printz(coordf_t print_z, coordf_t epsilon);
|
||||
// BBS
|
||||
const Layer* get_layer_at_bottomz(coordf_t bottom_z, coordf_t epsilon) const;
|
||||
Layer* get_layer_at_bottomz(coordf_t bottom_z, coordf_t epsilon);
|
||||
|
|
|
@ -183,13 +183,17 @@ static t_config_enum_values s_keys_map_SupportMaterialPattern {
|
|||
{ "honeycomb", smpHoneycomb },
|
||||
{ "lightning", smpLightning },
|
||||
{ "default", smpDefault},
|
||||
{ "none", smpNone},
|
||||
{ "hollow", smpNone},
|
||||
};
|
||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialPattern)
|
||||
|
||||
static t_config_enum_values s_keys_map_SupportMaterialStyle {
|
||||
{ "default", smsDefault },
|
||||
{ "grid", smsGrid },
|
||||
{ "snug", smsSnug }
|
||||
{ "snug", smsSnug },
|
||||
{ "tree_slim", smsTreeSlim },
|
||||
{ "tree_strong", smsTreeStrong },
|
||||
{ "tree_hybrid", smsTreeHybrid }
|
||||
};
|
||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialStyle)
|
||||
|
||||
|
@ -203,7 +207,6 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialInterfacePattern)
|
|||
static t_config_enum_values s_keys_map_SupportType{
|
||||
{ "normal(auto)", stNormalAuto },
|
||||
{ "tree(auto)", stTreeAuto },
|
||||
{ "hybrid(auto)", stHybridAuto },
|
||||
{ "normal(manual)", stNormal },
|
||||
{ "tree(manual)", stTree }
|
||||
};
|
||||
|
@ -2543,16 +2546,14 @@ void PrintConfigDef::init_fff_params()
|
|||
def->label = L("Type");
|
||||
def->category = L("Support");
|
||||
def->tooltip = L("normal(auto) and tree(auto) is used to generate support automatically. "
|
||||
"If normal or tree is selected, only support enforcers are generated");
|
||||
"If normal(manual) or tree(manual) is selected, only support enforcers are generated");
|
||||
def->enum_keys_map = &ConfigOptionEnum<SupportType>::get_enum_values();
|
||||
def->enum_values.push_back("normal(auto)");
|
||||
def->enum_values.push_back("tree(auto)");
|
||||
def->enum_values.push_back("hybrid(auto)");
|
||||
def->enum_values.push_back("normal(manual)");
|
||||
def->enum_values.push_back("tree(manual)");
|
||||
def->enum_labels.push_back(L("normal(auto)"));
|
||||
def->enum_labels.push_back(L("tree(auto)"));
|
||||
def->enum_labels.push_back(L("hybrid(auto)"));
|
||||
def->enum_labels.push_back(L("normal(manual)"));
|
||||
def->enum_labels.push_back(L("tree(manual)"));
|
||||
def->mode = comSimple;
|
||||
|
@ -2591,7 +2592,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->label = L("Support critical regions only");
|
||||
def->category = L("Support");
|
||||
def->tooltip = L("Only create support for critical regions including sharp tail, cantilever, etc.");
|
||||
def->mode = comSimple;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
// BBS: change type to common float.
|
||||
|
@ -2639,9 +2640,9 @@ void PrintConfigDef::init_fff_params()
|
|||
|
||||
def = this->add("support_filament", coInt);
|
||||
def->gui_type = ConfigOptionDef::GUIType::i_enum_open;
|
||||
def->label = L("Support");
|
||||
def->label = L("Support base");
|
||||
def->category = L("Support");
|
||||
def->tooltip = L("Filament to print support and raft. \"Default\" means no specific filament for support and current filament is used");
|
||||
def->tooltip = L("Filament to print support base and raft. \"Default\" means no specific filament for support and current filament is used");
|
||||
def->min = 0;
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionInt(1));
|
||||
|
@ -2744,13 +2745,13 @@ void PrintConfigDef::init_fff_params()
|
|||
def->enum_values.push_back("rectilinear-grid");
|
||||
def->enum_values.push_back("honeycomb");
|
||||
def->enum_values.push_back("lightning");
|
||||
def->enum_values.push_back("none");
|
||||
def->enum_values.push_back("hollow");
|
||||
def->enum_labels.push_back(L("Default"));
|
||||
def->enum_labels.push_back(L("Rectilinear"));
|
||||
def->enum_labels.push_back(L("Rectilinear grid"));
|
||||
def->enum_labels.push_back(L("Honeycomb"));
|
||||
def->enum_labels.push_back(L("Lightning"));
|
||||
def->enum_labels.push_back(L("None"));
|
||||
def->enum_labels.push_back(L("Hollow"));
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionEnum<SupportMaterialPattern>(smpRectilinear));
|
||||
|
||||
|
@ -2799,16 +2800,27 @@ void PrintConfigDef::init_fff_params()
|
|||
def = this->add("support_style", coEnum);
|
||||
def->label = L("Style");
|
||||
def->category = L("Support");
|
||||
//def->tooltip = L("Style and shape of the support towers. Projecting the supports into a regular grid "
|
||||
// "will create more stable supports, while snug support towers will save material and reduce "
|
||||
// "object scarring");
|
||||
def->tooltip = L("Style and shape of the support. For normal support, projecting the supports into a regular grid "
|
||||
"will create more stable supports (default), while snug support towers will save material and reduce "
|
||||
"object scarring.\n"
|
||||
"For tree support, slim style will merge branches more aggressively and save "
|
||||
"a lot of material (default), while hybrid style will create similar structure to normal support "
|
||||
"under large flat overhangs.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<SupportMaterialStyle>::get_enum_values();
|
||||
def->enum_values.push_back("default");
|
||||
def->enum_values.push_back("grid");
|
||||
def->enum_values.push_back("snug");
|
||||
def->enum_values.push_back("tree_slim");
|
||||
def->enum_values.push_back("tree_strong");
|
||||
def->enum_values.push_back("tree_hybrid");
|
||||
def->enum_labels.push_back(L("Default"));
|
||||
def->enum_labels.push_back(L("Grid"));
|
||||
def->enum_labels.push_back(L("Snug"));
|
||||
def->enum_labels.push_back(L("Tree Slim"));
|
||||
def->enum_labels.push_back(L("Tree Strong"));
|
||||
def->enum_labels.push_back(L("Tree Hybrid"));
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionEnum<SupportMaterialStyle>(smsGrid));
|
||||
def->set_default_value(new ConfigOptionEnum<SupportMaterialStyle>(smsDefault));
|
||||
|
||||
def = this->add("independent_support_layer_height", coBool);
|
||||
def->label = L("Independent support layer height");
|
||||
|
@ -2909,7 +2921,7 @@ void PrintConfigDef::init_fff_params()
|
|||
|
||||
def = this->add("bed_temperature_difference", coInts);
|
||||
def->label = L("Bed temperature difference");
|
||||
def->tooltip = L("Do not recommand bed temperature of other layer to be lower than initial layer for more than this threshold. "
|
||||
def->tooltip = L("Do not recommend bed temperature of other layer to be lower than initial layer for more than this threshold. "
|
||||
"Too low bed temperature of other layer may cause the model broken free from build plate");
|
||||
def->sidetext = L("°C");
|
||||
def->min = 0;
|
||||
|
@ -4026,6 +4038,10 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
|
|||
value = "normal(manual)";
|
||||
} else if (opt_key == "support_type" && value == "tree") {
|
||||
value = "tree(manual)";
|
||||
} else if (opt_key == "support_type" && value == "hybrid(auto)") {
|
||||
value = "tree(auto)";
|
||||
} else if (opt_key == "support_base_pattern" && value == "none") {
|
||||
value = "hollow";
|
||||
} else if (opt_key == "different_settings_to_system") {
|
||||
std::string copy_value = value;
|
||||
copy_value.erase(std::remove(copy_value.begin(), copy_value.end(), '\"'), copy_value.end()); // remove '"' in string
|
||||
|
|
|
@ -99,7 +99,7 @@ enum SupportMaterialPattern {
|
|||
};
|
||||
|
||||
enum SupportMaterialStyle {
|
||||
smsGrid, smsSnug,
|
||||
smsDefault, smsGrid, smsSnug, smsTreeSlim, smsTreeStrong, smsTreeHybrid
|
||||
};
|
||||
|
||||
enum SupportMaterialInterfacePattern {
|
||||
|
@ -108,7 +108,19 @@ enum SupportMaterialInterfacePattern {
|
|||
|
||||
// BBS
|
||||
enum SupportType {
|
||||
stNormalAuto, stTreeAuto, stHybridAuto, stNormal, stTree
|
||||
stNormalAuto, stTreeAuto, stNormal, stTree
|
||||
};
|
||||
inline bool is_tree(SupportType stype)
|
||||
{
|
||||
return std::set<SupportType>{stTreeAuto, stTree}.count(stype) != 0;
|
||||
};
|
||||
inline bool is_tree_slim(SupportType type, SupportMaterialStyle style)
|
||||
{
|
||||
return is_tree(type) && (style==smsDefault || style==smsTreeSlim);
|
||||
};
|
||||
inline bool is_auto(SupportType stype)
|
||||
{
|
||||
return std::set<SupportType>{stNormalAuto, stTreeAuto}.count(stype) != 0;
|
||||
};
|
||||
|
||||
enum SeamPosition {
|
||||
|
|
|
@ -2871,7 +2871,11 @@ const Layer *PrintObject::get_first_layer_bellow_printz(coordf_t print_z, coordf
|
|||
auto it = Slic3r::lower_bound_by_predicate(m_layers.begin(), m_layers.end(), [limit](const Layer *layer) { return layer->print_z < limit; });
|
||||
return (it == m_layers.begin()) ? nullptr : *(--it);
|
||||
}
|
||||
|
||||
int PrintObject::get_layer_idx_get_printz(coordf_t print_z, coordf_t epsilon) {
|
||||
coordf_t limit = print_z + epsilon;
|
||||
auto it = Slic3r::lower_bound_by_predicate(m_layers.begin(), m_layers.end(), [limit](const Layer *layer) { return layer->print_z < limit; });
|
||||
return (it == m_layers.begin()) ? -1 : std::distance(m_layers.begin(), it);
|
||||
}
|
||||
// BBS
|
||||
const Layer* PrintObject::get_layer_at_bottomz(coordf_t bottom_z, coordf_t epsilon) const {
|
||||
coordf_t limit_upper = bottom_z + epsilon;
|
||||
|
|
|
@ -110,7 +110,7 @@ SlicingParameters SlicingParameters::create_from_config(
|
|||
params.min_layer_height = std::min(params.min_layer_height, params.layer_height);
|
||||
params.max_layer_height = std::max(params.max_layer_height, params.layer_height);
|
||||
|
||||
if (! soluble_interface) {
|
||||
if (! soluble_interface || is_tree_slim(object_config.support_type.value, object_config.support_style.value)) {
|
||||
params.gap_raft_object = object_config.raft_contact_distance.value;
|
||||
//BBS
|
||||
params.gap_object_support = object_config.support_bottom_z_distance.value;
|
||||
|
|
|
@ -790,6 +790,7 @@ public:
|
|||
m_extrusion_width(params.extrusion_width),
|
||||
m_support_material_closing_radius(params.support_closing_radius)
|
||||
{
|
||||
if (m_style != smsSnug) m_style = smsGrid;
|
||||
switch (m_style) {
|
||||
case smsGrid:
|
||||
{
|
||||
|
@ -1578,9 +1579,8 @@ static inline Polygons detect_overhangs(
|
|||
// Offset the support regions back to a full overhang, restrict them to the full overhang.
|
||||
// This is done to increase size of the supporting columns below, as they are calculated by
|
||||
// propagating these contact surfaces downwards.
|
||||
diff_polygons =
|
||||
expand(diff(intersection(expand(diff_polygons, lower_layer_offset, SUPPORT_SURFACES_OFFSET_PARAMETERS), layerm_polygons), lower_layer_polygons),
|
||||
xy_expansion, SUPPORT_SURFACES_OFFSET_PARAMETERS);
|
||||
diff_polygons = diff(intersection(expand(diff_polygons, lower_layer_offset, SUPPORT_SURFACES_OFFSET_PARAMETERS), layerm_polygons), lower_layer_polygons);
|
||||
if (xy_expansion != 0) { diff_polygons = expand(diff_polygons, xy_expansion, SUPPORT_SURFACES_OFFSET_PARAMETERS); }
|
||||
}
|
||||
//FIXME add user defined filtering here based on minimal area or minimum radius or whatever.
|
||||
|
||||
|
@ -2191,7 +2191,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_
|
|||
|
||||
// BBS: tree support is selected so normal supports need not be generated.
|
||||
// Note we still need to go through the following steps if support is disabled but raft is enabled.
|
||||
if (m_object_config->enable_support.value && (m_object_config->support_type.value == stTreeAuto || m_object_config->support_type.value == stTree || m_object_config->support_type.value == stHybridAuto)) {
|
||||
if (m_object_config->enable_support.value && (m_object_config->support_type.value != stNormalAuto && m_object_config->support_type.value != stNormal)) {
|
||||
return MyLayersPtr();
|
||||
}
|
||||
|
||||
|
@ -2889,7 +2889,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int
|
|||
// Generate intermediate layers.
|
||||
// The first intermediate layer is the same as the 1st layer if there is no raft,
|
||||
// or the bottom of the first intermediate layer is aligned with the bottom of the raft contact layer.
|
||||
// Intermediate layers are always printed with a normal etrusion flow (non-bridging).
|
||||
// Intermediate layers are always printed with a normal extrusion flow (non-bridging).
|
||||
size_t idx_layer_object = 0;
|
||||
size_t idx_extreme_first = 0;
|
||||
if (! extremes.empty() && std::abs(extremes.front()->extreme_z() - m_slicing_params.raft_interface_top_z) < EPSILON) {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -121,6 +121,7 @@ private:
|
|||
ExPolygon m_machine_border;
|
||||
|
||||
public:
|
||||
bool is_slim = false;
|
||||
/*!
|
||||
* \brief The required clearance between the model and the tree branches
|
||||
*/
|
||||
|
@ -170,7 +171,7 @@ public:
|
|||
struct LineHash {
|
||||
size_t operator()(const Line& line) const {
|
||||
return (std::hash<coord_t>()(line.a(0)) ^ std::hash<coord_t>()(line.b(1))) * 102 +
|
||||
(std::hash<coord_t>()(line.a(0)) ^ std::hash<coord_t>()(line.b(1))) * 10222;
|
||||
(std::hash<coord_t>()(line.a(1)) ^ std::hash<coord_t>()(line.b(0))) * 10222;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -224,7 +225,7 @@ public:
|
|||
{}
|
||||
|
||||
Node(const Point position, const int distance_to_top, const bool skin_direction, const int support_roof_layers_below, const bool to_buildplate, Node* parent,
|
||||
coordf_t print_z_, coordf_t height_)
|
||||
coordf_t print_z_, coordf_t height_, coordf_t dist_mm_to_top_=0)
|
||||
: distance_to_top(distance_to_top)
|
||||
, position(position)
|
||||
, skin_direction(skin_direction)
|
||||
|
@ -234,10 +235,13 @@ public:
|
|||
, parent(parent)
|
||||
, print_z(print_z_)
|
||||
, height(height_)
|
||||
, dist_mm_to_top(dist_mm_to_top_)
|
||||
{
|
||||
if (parent) {
|
||||
type = parent->type;
|
||||
overhang = parent->overhang;
|
||||
if (dist_mm_to_top==0)
|
||||
dist_mm_to_top = parent->dist_mm_to_top + parent->height;
|
||||
parent->child = this;
|
||||
}
|
||||
}
|
||||
|
@ -255,6 +259,7 @@ public:
|
|||
* Negative value means it's a virtual node between support and overhang, which doesn't need to be extruded.
|
||||
*/
|
||||
int distance_to_top;
|
||||
coordf_t dist_mm_to_top = 0; // dist to bottom contact in mm
|
||||
|
||||
/*!
|
||||
* \brief The position of this node on the layer.
|
||||
|
@ -262,8 +267,11 @@ public:
|
|||
Point position;
|
||||
|
||||
Point movement; // movement towards neighbor center or outline
|
||||
double radius;
|
||||
mutable double radius = 0.0;
|
||||
mutable double max_move_dist = 0.0;
|
||||
NodeType type = eCircle;
|
||||
bool is_merged = false; // this node is generated by merging upper nodes
|
||||
bool is_corner = false;
|
||||
const ExPolygon* overhang = nullptr; // when type==ePolygon, set this value to get original overhang area
|
||||
|
||||
/*!
|
||||
|
@ -311,7 +319,7 @@ public:
|
|||
* can't be on the model and the path to the buildplate isn't clear),
|
||||
* the entire branch needs to be known.
|
||||
*/
|
||||
std::forward_list<Node*> merged_neighbours;
|
||||
std::list<Node*> merged_neighbours;
|
||||
|
||||
coordf_t print_z;
|
||||
coordf_t height;
|
||||
|
@ -328,6 +336,7 @@ public:
|
|||
Flow support_material_flow;
|
||||
Flow support_material_interface_flow;
|
||||
Flow support_material_bottom_interface_flow;
|
||||
coordf_t support_extrusion_width;
|
||||
// Is merging of regions allowed? Could the interface & base support regions be printed with the same extruder?
|
||||
bool can_merge_support_regions;
|
||||
|
||||
|
@ -368,10 +377,16 @@ private:
|
|||
SlicingParameters m_slicing_params;
|
||||
// Various precomputed support parameters to be shared with external functions.
|
||||
SupportParams m_support_params;
|
||||
size_t m_raft_layers;
|
||||
size_t m_highest_overhang_layer;
|
||||
size_t m_raft_layers = 0;
|
||||
size_t m_highest_overhang_layer = 0;
|
||||
std::vector<std::vector<MinimumSpanningTree>> m_spanning_trees;
|
||||
std::vector< std::unordered_map<Line, bool, LineHash>> m_mst_line_x_layer_contour_caches;
|
||||
coordf_t MAX_BRANCH_RADIUS = 10.0;
|
||||
coordf_t MIN_BRANCH_RADIUS = 0.5;
|
||||
float tree_support_branch_diameter_angle = 5.0;
|
||||
bool is_slim = false;
|
||||
bool with_infill = false;
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Draws circles around each node of the tree into the final support.
|
||||
|
@ -397,10 +412,18 @@ private:
|
|||
* dropped down. The nodes are dropped to lower layers inside the same
|
||||
* vector of layers.
|
||||
*/
|
||||
void drop_nodes(std::vector<std::vector<Node*>>& contact_nodes);
|
||||
void drop_nodes(std::vector<std::vector<Node *>> &contact_nodes);
|
||||
|
||||
void smooth_nodes(std::vector<std::vector<Node *>> &contact_nodes);
|
||||
|
||||
void adjust_layer_heights(std::vector<std::vector<Node*>>& contact_nodes);
|
||||
|
||||
/*! BBS: MusangKing: maximum layer height
|
||||
* \brief Optimize the generation of tree support by pre-planning the layer_heights
|
||||
*
|
||||
*/
|
||||
|
||||
std::vector<std::pair<coordf_t, coordf_t>> plan_layer_heights(std::vector<std::vector<Node*>>& contact_nodes);
|
||||
/*!
|
||||
* \brief Creates points where support contacts the model.
|
||||
*
|
||||
|
@ -426,6 +449,8 @@ private:
|
|||
void generate_toolpaths();
|
||||
Polygons spanning_tree_to_polygon(const std::vector<MinimumSpanningTree>& spanning_trees, Polygons layer_contours, int layer_nr);
|
||||
Polygons contact_nodes_to_polygon(const std::vector<Node*>& contact_nodes, Polygons layer_contours, int layer_nr, std::vector<double>& radiis, std::vector<bool>& is_interface);
|
||||
coordf_t calc_branch_radius(coordf_t base_radius, size_t layers_to_top, size_t tip_layers, double diameter_angle_scale_factor);
|
||||
coordf_t calc_branch_radius(coordf_t base_radius, coordf_t mm_to_top, double diameter_angle_scale_factor);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue