66{
67 assert(! print_config.first_layer_height.percent);
68 coordf_t first_layer_height = (print_config.first_layer_height.value <= 0) ?
69 object_config.layer_height.value : print_config.first_layer_height.value;
70
71
72
73
74
75 coordf_t support_material_extruder_dmr = print_config.nozzle_diameter.get_at(object_config.support_material_extruder.value - 1);
76 coordf_t support_material_interface_extruder_dmr = print_config.nozzle_diameter.get_at(object_config.support_material_interface_extruder.value - 1);
77 bool soluble_interface = object_config.support_material_contact_distance.value == 0.;
78
80 params.layer_height = object_config.layer_height.value;
81 params.first_print_layer_height = first_layer_height;
82 params.first_object_layer_height = first_layer_height;
83 params.object_print_z_min = 0.;
84 params.object_print_z_max = object_height;
85 params.base_raft_layers = object_config.raft_layers.value;
87
88
90 params.max_layer_height = std::numeric_limits<double>::max();
91 if (object_config.support_material.value || params.base_raft_layers > 0 || object_config.support_material_enforce_layers > 0) {
92
93 params.min_layer_height = std::max(
96 params.max_layer_height = std::min(
99 params.max_suport_layer_height = params.max_layer_height;
100 }
101 if (object_extruders.empty()) {
104 } else {
105 for (unsigned int extruder_id : object_extruders) {
108 }
109 }
110 params.min_layer_height = std::min(params.min_layer_height, params.layer_height);
111 params.max_layer_height = std::max(params.max_layer_height, params.layer_height);
112
114 params.gap_raft_object = object_config.raft_contact_distance.value;
115 params.gap_object_support = object_config.support_material_bottom_contact_distance.value;
116 params.gap_support_object = object_config.support_material_contact_distance.value;
117 if (params.gap_object_support <= 0)
118 params.gap_object_support = params.gap_support_object;
119 }
120
121 if (params.base_raft_layers > 0) {
122 params.interface_raft_layers = (params.base_raft_layers + 1) / 2;
123 params.base_raft_layers -= params.interface_raft_layers;
124
125 params.base_raft_layer_height = std::max(params.layer_height, 0.75 * support_material_extruder_dmr);
126 params.interface_raft_layer_height = std::max(params.layer_height, 0.75 * support_material_interface_extruder_dmr);
127 params.first_object_layer_bridging = false;
128 params.contact_raft_layer_height = std::max(params.layer_height, 0.75 * support_material_interface_extruder_dmr);
129 params.first_object_layer_height = params.layer_height;
130 }
131
132 if (params.has_raft()) {
133
134
135 if (params.raft_layers() == 1) {
136
137 params.contact_raft_layer_height = first_layer_height;
138 params.raft_contact_top_z = first_layer_height;
139 } else {
140 assert(params.base_raft_layers > 0);
141 assert(params.interface_raft_layers > 0);
142
143 params.raft_base_top_z = first_layer_height +
coordf_t(params.base_raft_layers - 1) * params.base_raft_layer_height;
144
145 params.raft_interface_top_z = params.raft_base_top_z +
coordf_t(params.interface_raft_layers - 1) * params.interface_raft_layer_height;
146 params.raft_contact_top_z = params.raft_interface_top_z + params.contact_raft_layer_height;
147 }
148 coordf_t print_z = params.raft_contact_top_z + params.gap_raft_object;
149 params.object_print_z_min = print_z;
150 params.object_print_z_max += print_z;
151 }
152
153 params.valid = true;
154 return params;
155}
double coordf_t
Definition libslic3r.h:45
double coordf_t
Definition GUI_ObjectList.hpp:36
coordf_t max_layer_height_from_nozzle(const PrintConfig &print_config, int idx_nozzle)
Definition Slicing.cpp:36
coordf_t min_layer_height_from_nozzle(const PrintConfig &print_config, int idx_nozzle)
Definition Slicing.cpp:28
static const coordf_t MIN_LAYER_HEIGHT
Definition Slicing.cpp:24
bool soluble_interface
Definition Slicing.hpp:82
SlicingParameters()=default