31 {
32 const PrintConfig& print_config = object.print()->config();
34 const SlicingParameters& slicing_params = object.slicing_parameters();
35
38 const bool soluble_interface_non_soluble_base =
39
40 object_config.support_interface_filament.value > 0 && print_config.filament_soluble.get_at(object_config.support_interface_filament.value - 1) &&
41
42 (object_config.support_filament.value == 0 || ! print_config.filament_soluble.get_at(object_config.support_filament.value - 1));
45
46 {
51
52
53
54 bool different_support_interface_filament = object_config.support_interface_filament != 0 &&
55 object_config.support_interface_filament != object_config.support_filament;
56
57 if (non_soluble_base_top) {
59 } else {
60
62 }
63
64 if (non_soluble_base_bottom) {
66 } else {
67
69 }
70 }
75
76 this->
ironing = object_config.support_ironing;
80
81
83 for (auto lh : print_config.min_layer_height.values)
85 for (auto layer : object.layers())
87
89
91 }
92
93
94
95 coordf_t external_perimeter_width = 0.;
97 for (size_t region_id = 0; region_id < object.num_printing_regions(); ++ region_id) {
98 const PrintRegion ®ion = object.printing_region(region_id);
99 external_perimeter_width = std::max(external_perimeter_width,
coordf_t(region.flow(
object,
frExternalPerimeter, slicing_params.layer_height).width()));
100 bridge_flow_ratio += region.config().bridge_flow;
101 }
102 this->
gap_xy = object_config.support_object_xy_distance.value;
104 bridge_flow_ratio /= object.num_printing_regions();
105
109
110 this->
can_merge_support_regions = object_config.support_filament.value == object_config.support_interface_filament.value;
111 if (!this->
can_merge_support_regions && (object_config.support_filament.value == 0 || object_config.support_interface_filament.value == 0)) {
112
113 auto object_extruders = object.object_extruders();
114 if (object_extruders.size() == 1 &&
115 *object_extruders.begin() == std::max<unsigned int>(object_config.support_filament.value, object_config.support_interface_filament.value))
116
118 }
119
120
123
126
129
130 double raft_interface_spacing = (this->
ironing ? 0 : object_config.support_interface_spacing.value) + this->
raft_interface_flow.spacing();
135
138 }
139
141 this->
with_sheath = object_config.tree_support_wall_count > 0;
151 if (object_config.support_interface_pattern ==
smipGrid)
157 else
159 (object_config.support_interface_pattern ==
smipAuto && zero_gap_contact_interface) ||
163
167 if (slicing_params.base_raft_layers > 1) {
168 assert(slicing_params.raft_layers() >= 4);
169
170 this->raft_angle_1st_layer = this->interface_angle;
171 this->raft_angle_base = this->base_angle;
172 this->raft_angle_interface = this->interface_angle;
173 if ((slicing_params.interface_raft_layers & 1) == 0)
174
175 this->raft_angle_interface += float(0.5 * M_PI);
176 } else if (slicing_params.base_raft_layers == 1 || slicing_params.interface_raft_layers > 1) {
177 assert(slicing_params.raft_layers() == 2 || slicing_params.raft_layers() == 3);
178
179 this->raft_angle_1st_layer = this->base_angle;
180 this->raft_angle_interface = this->interface_angle + 0.5 * M_PI;
181 } else if (slicing_params.interface_raft_layers == 1) {
182
183 assert(slicing_params.base_raft_layers == 0);
184 assert(slicing_params.interface_raft_layers == 1);
185 assert(slicing_params.raft_layers() == 1);
186 this->raft_angle_1st_layer = float(0.5 * M_PI);
187 this->raft_angle_interface = this->raft_angle_1st_layer;
188 } else {
189
190 assert(slicing_params.base_raft_layers == 0);
191 assert(slicing_params.interface_raft_layers == 0);
192 assert(slicing_params.raft_layers() == 0);
193 }
194
195 const auto nozzle_diameter = print_config.nozzle_diameter.get_at(object_config.support_interface_filament - 1);
199
201
202
205 std::numeric_limits<double>::max();
206
212 !
is_tree(object_config.support_type))
214 }
216 if (
is_tree(object_config.support_type)) {
217
219 } else {
221 }
222 }
223 }
#define M_PI
Definition ExtrusionSimulator.cpp:31
static Flow bridging_flow(float dmr, float nozzle_diameter)
Definition Flow.hpp:108
constexpr T deg2rad(const T angle)
Definition Geometry.hpp:312
@ ipGrid
Definition PrintConfig.hpp:129
@ ipConcentric
Definition PrintConfig.hpp:134
@ ipHoneycomb
Definition PrintConfig.hpp:132
@ ipRectilinear
Definition PrintConfig.hpp:128
@ ipSupportBase
Definition PrintConfig.hpp:135
@ ipSpiralInset
Definition PrintConfig.hpp:134
zaa_minimize_perimeter_height nozzle_diameter((ConfigOptionBool, reduce_infill_retraction))((ConfigOptionBool
BoundingBox scaled(const BoundingBoxf &bb)
Definition BoundingBox.hpp:284
@ smipConcentric
Definition PrintConfig.hpp:374
@ smipGrid
Definition PrintConfig.hpp:374
@ smipRectilinearInterlaced
Definition PrintConfig.hpp:374
@ smipSpiralInset
Definition PrintConfig.hpp:374
@ smipAuto
Definition PrintConfig.hpp:374
double coordf_t
Definition GUI_ObjectList.hpp:46
@ frExternalPerimeter
Definition Flow.hpp:19
bool is_tree(SupportType stype)
Definition PrintConfig.hpp:381
int number_of_support_interface_bottom_layers(const PrintObjectConfig &object_config)
Definition SupportParameters.hpp:21
Flow support_material_flow(const PrintObject *object, float layer_height)
Definition Flow.cpp:239
SupportMaterialPattern
Definition PrintConfig.hpp:355
@ smpHoneycomb
Definition PrintConfig.hpp:357
zaa_minimize_perimeter_height PrintObjectConfig
Definition PrintConfig.hpp:2183
constexpr T sqr(T x)
Definition libslic3r.h:301
Flow support_material_interface_flow(const PrintObject *object, float layer_height)
Definition Flow.cpp:269
constexpr double IRONING_SPACING_MIN
Definition PrintConfig.hpp:212
@ smsTreeHybrid
Definition PrintConfig.hpp:363
@ smsTreeStrong
Definition PrintConfig.hpp:363
@ smsGrid
Definition PrintConfig.hpp:363
@ smsSnug
Definition PrintConfig.hpp:363
@ smsDefault
Definition PrintConfig.hpp:363
@ smsTreeOrganic
Definition PrintConfig.hpp:363
@ smsTreeSlim
Definition PrintConfig.hpp:363
Flow support_material_1st_layer_flow(const PrintObject *object, float layer_height)
Definition Flow.cpp:257
size_t num_bottom_interface_layers
Definition SupportParameters.hpp:235
coordf_t support_layer_height_min
Definition SupportParameters.hpp:262
Flow support_material_flow
Definition SupportParameters.hpp:251
SupportMaterialInterfacePattern support_interface_pattern
Definition SupportParameters.hpp:283
coordf_t gap_xy_first_layer
Definition SupportParameters.hpp:266
float interface_angle
Definition SupportParameters.hpp:269
coordf_t raft_interface_density
Definition SupportParameters.hpp:278
size_t num_top_base_interface_layers
Definition SupportParameters.hpp:237
Flow support_material_bottom_interface_flow
Definition SupportParameters.hpp:255
coordf_t bottom_interface_density
Definition SupportParameters.hpp:276
float raft_angle_interface
Definition SupportParameters.hpp:300
coordf_t support_extrusion_width
Definition SupportParameters.hpp:258
InfillPattern raft_interface_fill_pattern
Definition SupportParameters.hpp:290
float ironing_spacing
Definition SupportParameters.hpp:336
coordf_t support_spacing
Definition SupportParameters.hpp:279
size_t num_top_interface_layers
Definition SupportParameters.hpp:233
double tree_branch_diameter_double_wall_area_scaled
Definition SupportParameters.hpp:296
bool can_merge_support_regions
Definition SupportParameters.hpp:260
bool zero_gap_interface_bottom
Definition SupportParameters.hpp:226
Flow ironing_flow
Definition SupportParameters.hpp:334
InfillPattern contact_fill_pattern
Definition SupportParameters.hpp:292
InfillPattern ironing_pattern
Definition SupportParameters.hpp:335
Flow raft_interface_flow
Definition SupportParameters.hpp:257
coordf_t bottom_interface_spacing
Definition SupportParameters.hpp:271
Flow first_layer_flow
Definition SupportParameters.hpp:248
bool zero_gap_interface_top
Definition SupportParameters.hpp:225
bool with_sheath
Definition SupportParameters.hpp:294
size_t num_bottom_base_interface_layers
Definition SupportParameters.hpp:239
float raft_angle_1st_layer
Definition SupportParameters.hpp:298
bool has_bottom_contacts
Definition SupportParameters.hpp:231
Flow support_material_interface_flow
Definition SupportParameters.hpp:253
float raft_angle_base
Definition SupportParameters.hpp:299
bool ironing
Definition SupportParameters.hpp:333
coordf_t top_interface_density
Definition SupportParameters.hpp:274
coordf_t support_density
Definition SupportParameters.hpp:281
InfillPattern base_fill_pattern
Definition SupportParameters.hpp:286
float base_angle
Definition SupportParameters.hpp:268
coordf_t gap_xy
Definition SupportParameters.hpp:265
bool has_top_contacts
Definition SupportParameters.hpp:229
bool independent_layer_height
Definition SupportParameters.hpp:330
InfillPattern interface_fill_pattern
Definition SupportParameters.hpp:288
SupportMaterialStyle support_style
Definition SupportParameters.hpp:282
coordf_t top_interface_spacing
Definition SupportParameters.hpp:270