diff --git a/resources/profiles/Anycubic.idx b/resources/profiles/Anycubic.idx
index 12652625c3..47bdd8c271 100644
--- a/resources/profiles/Anycubic.idx
+++ b/resources/profiles/Anycubic.idx
@@ -1,3 +1,5 @@
+min_slic3r_version = 2.4.1-rc1
+0.1.0 Added Anycubic 4Max Pro 2.0
min_slic3r_version = 2.3.2-alpha0
0.0.12 Updated Anycubic i3 MEGA(S) profiles.
0.0.11 Added bed model and texture for i3 Mega, i3 Mega S.
diff --git a/resources/profiles/Anycubic.ini b/resources/profiles/Anycubic.ini
index 821d87462c..0999c168c8 100644
--- a/resources/profiles/Anycubic.ini
+++ b/resources/profiles/Anycubic.ini
@@ -5,7 +5,7 @@
name = Anycubic
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 0.0.12
+config_version = 0.1.0
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@@ -57,6 +57,15 @@ family = MEGA
bed_model = i3megas_bed.stl
bed_texture = i3megas.svg
+[printer_model:4MAXPRO20]
+name = Anycubic 4Max Pro 2.0
+variants = 0.4
+technology = FFF
+family = 4Max
+bed_model = 4MAXPRO20_bed.stl
+bed_texture = 4MAXPRO20_texture.svg
+default_materials = Generic PLA @4Max Pro 2.0; Generic TPU @4Max Pro 2.0; Generic ABS @4Max Pro 2.0
+
[printer_model:PREDATOR]
name = Anycubic Predator
variants = 0.4; 0.6; 0.8
@@ -1902,17 +1911,339 @@ min_layer_height = 0.16
max_layer_height = 0.48
default_print_profile = 0.24mm 0.8 nozzle DETAILED QUALITY @PREDATOR
-#########################################
-########## end printer presets ##########
-#########################################
+## Anycubic 4MAX Pro 2.0
+## based on https://hartrusion.com/en/prusaslicer-config-for-anycubic-4max-pro-2-0/
+
+[print:*common_4max*]
+avoid_crossing_perimeters = 0
+avoid_crossing_perimeters_max_detour = 0
+bottom_fill_pattern = monotonic
+bottom_solid_layers = 4
+bridge_acceleration = 300
+bridge_angle = 0
+bridge_flow_ratio = 0.65
+bridge_speed = 30
+brim_separation = 0
+brim_type = outer_only
+brim_width = 0
+clip_multipart_objects = 1
+compatible_printers_condition = printer_model=="4MAXPRO20" and nozzle_diameter[0]==0.4
+complete_objects = 0
+default_acceleration = 900
+dont_support_bridges = 1
+draft_shield = disabled
+elefant_foot_compensation = 0.2
+ensure_vertical_shell_thickness = 1
+external_perimeter_extrusion_width = 0
+external_perimeter_speed = 35
+external_perimeters_first = 0
+extra_perimeters = 0
+extruder_clearance_height = 20
+extruder_clearance_radius = 20
+extrusion_width = 0.45
+fill_angle = 45
+fill_density = 20%
+fill_pattern = gyroid
+first_layer_acceleration = 300
+first_layer_acceleration_over_raft = 0
+first_layer_extrusion_width = 0.65
+first_layer_height = 0.3
+first_layer_speed = 20
+first_layer_speed_over_raft = 30
+fuzzy_skin = none
+fuzzy_skin_point_dist = 0.8
+fuzzy_skin_thickness = 0.3
+gap_fill_enabled = 1
+gap_fill_speed = 40
+gcode_comments = 0
+gcode_label_objects = 0
+gcode_resolution = 0.0125
+infill_acceleration = 600
+infill_anchor = 400%
+infill_anchor_max = 50
+infill_every_layers = 1
+infill_extruder = 1
+infill_extrusion_width = 0
+infill_first = 0
+infill_only_where_needed = 0
+infill_overlap = 23%
+infill_speed = 45
+inherits =
+interface_shells = 0
+ironing = 0
+ironing_flowrate = 15%
+ironing_spacing = 0.1
+ironing_speed = 15
+ironing_type = top
+layer_height = 0.2
+max_print_speed = 50
+max_volumetric_speed = 0
+min_skirt_length = 0
+only_retract_when_crossing_perimeters = 0
+ooze_prevention = 0
+output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{print_time}.gcode
+overhangs = 1
+perimeter_acceleration = 500
+perimeter_extruder = 1
+perimeter_extrusion_width = 0
+perimeter_speed = 45
+perimeters = 3
+post_process =
+print_settings_id =
+raft_contact_distance = 0.1
+raft_expansion = 1.5
+raft_first_layer_density = 90%
+raft_first_layer_expansion = 3
+raft_layers = 0
+resolution = 0
+seam_position = aligned
+single_extruder_multi_material_priming = 1
+skirt_distance = 5
+skirt_height = 1
+skirts = 2
+slicing_mode = regular
+small_perimeter_speed = 20
+solid_infill_below_area = 0
+solid_infill_every_layers = 0
+solid_infill_extruder = 1
+solid_infill_extrusion_width = 0
+solid_infill_speed = 45
+spiral_vase = 0
+standby_temperature_delta = -5
+support_material = 0
+support_material_angle = 0
+support_material_auto = 1
+support_material_bottom_contact_distance = 0
+support_material_bottom_interface_layers = -1
+support_material_buildplate_only = 1
+support_material_closing_radius = 2
+support_material_contact_distance = 0.2
+support_material_enforce_layers = 0
+support_material_extruder = 1
+support_material_extrusion_width = 0.4
+support_material_interface_contact_loops = 0
+support_material_interface_extruder = 1
+support_material_interface_layers = 2
+support_material_interface_pattern = rectilinear
+support_material_interface_spacing = 0.2
+support_material_interface_speed = 30
+support_material_pattern = rectilinear-grid
+support_material_spacing = 2.5
+support_material_speed = 45
+support_material_style = grid
+support_material_synchronize_layers = 0
+support_material_threshold = 45
+support_material_with_sheath = 1
+support_material_xy_spacing = 60%
+thick_bridges = 1
+thin_walls = 0
+top_fill_pattern = monotonic
+top_infill_extrusion_width = 0.4
+top_solid_infill_speed = 30
+top_solid_layers = 5
+travel_speed = 60
+travel_speed_z = 0
+wipe_tower = 0
+wipe_tower_bridging = 10
+wipe_tower_brim_width = 2
+wipe_tower_no_sparse_layers = 0
+wipe_tower_rotation_angle = 0
+wipe_tower_width = 60
+wipe_tower_x = 180
+wipe_tower_y = 140
+xy_size_compensation = 0
+
+[print:0.15mm Detail @4Max Pro 2.0]
+inherits = *common_4max*
+layer_height = 0.15
+bottom_solid_layers = 5
+top_solid_layers = 7
+perimeter_speed = 40
+external_perimeter_speed = 25
+
+[print:0.20mm Quality @4Max Pro 2.0]
+inherits = *common_4max*
+external_perimeter_speed = 25
+
+[print:0.30mm Draft @4Max Pro 2.0]
+inherits = *common_4max*
+layer_height = 0.3
+bottom_solid_layers = 3
+top_solid_layers = 3
+
+[filament:*common_4max*]
+bed_temperature = 60
+bridge_fan_speed = 100
+compatible_printers_condition = printer_model=="4MAXPRO20"
+cooling = 1
+disable_fan_first_layers = 1
+extrusion_multiplier = 1
+fan_always_on = 1
+fan_below_layer_time = 30
+filament_density = 1.24
+filament_diameter = 1.75
+filament_max_volumetric_speed = 0
+filament_type = PLA
+first_layer_bed_temperature = 60
+first_layer_temperature = 210
+full_fan_speed_layer = 5
+max_fan_speed = 100
+min_fan_speed = 80
+min_print_speed = 10
+slowdown_below_layer_time = 15
+temperature = 205
+
+[filament:*PLA_4max*]
+inherits = *common_4max*
+
+[filament:Generic PLA @4Max Pro 2.0]
+inherits = *PLA_4max*
+filament_vendor = Generic
+
+[filament:Anycubic PLA @4Max Pro 2.0]
+inherits = *PLA_4max*
+first_layer_temperature = 215
+temperature = 207
+filament_vendor = Anycubic
+
+[filament:Generic ABS @4Max Pro 2.0]
+filament_vendor = Generic
+compatible_printers_condition = printer_model=="4MAXPRO20"
+bed_temperature = 100
+first_layer_bed_temperature = 100
+temperature = 245
+first_layer_temperature = 245
+bridge_fan_speed = 15
+cooling = 1
+disable_fan_first_layers = 3
+extrusion_multiplier = 1
+fan_always_on = 0
+fan_below_layer_time = 60
+filament_colour = #800000
+filament_density = 1.04
+filament_diameter = 1.75
+filament_type = ABS
+full_fan_speed_layer = 0
+max_fan_speed = 0
+min_fan_speed = 0
+min_print_speed = 10
+slowdown_below_layer_time = 25
+
+[filament:Generic TPU @4Max Pro 2.0]
+filament_vendor = Generic
+bed_temperature = 60
+bridge_fan_speed = 0
+compatible_printers_condition = printer_model=="4MAXPRO20"
+cooling = 1
+disable_fan_first_layers = 3
+extrusion_multiplier = 1
+fan_always_on = 0
+fan_below_layer_time = 60
+filament_colour = #211AB5
+filament_density = 1.19
+filament_deretract_speed = 20
+filament_diameter = 1.75
+filament_retract_speed = 30
+filament_type = FLEX
+filament_max_volumetric_speed = 1.65
+first_layer_bed_temperature = 60
+first_layer_temperature = 215
+full_fan_speed_layer = 0
+max_fan_speed = 0
+min_fan_speed = 0
+min_print_speed = 10
+slowdown_below_layer_time = 20
+temperature = 215
+
+[filament:Polymaker PolyFlex TPU95 @4Max Pro 2.0]
+filament_vendor = Polymaker
+bed_temperature = 45
+bridge_fan_speed = 80
+compatible_printers_condition = printer_model=="4MAXPRO20"
+cooling = 1
+disable_fan_first_layers = 5
+extrusion_multiplier = 1.04
+fan_always_on = 1
+fan_below_layer_time = 45
+filament_colour = #FD7D2F
+filament_density = 1.22
+filament_deretract_speed = 25
+filament_diameter = 1.75
+filament_max_volumetric_speed = 1.65
+filament_retract_length = 4
+filament_retract_restart_extra = 0.1
+filament_retract_speed = 60
+filament_type = FLEX
+first_layer_bed_temperature = 55
+first_layer_temperature = 215
+full_fan_speed_layer = 8
+max_fan_speed = 50
+min_fan_speed = 25
+min_print_speed = 10
+slowdown_below_layer_time = 10
+temperature = 217
+
+[printer:Anycubic 4Max Pro 2.0]
+printer_model = 4MAXPRO20
+printer_variant = 0.4
+printer_technology = FFF
+bed_shape = 0x0,270x0,270x210,0x210
+color_change_gcode = M600
+default_filament_profile = Generic PLA @4Max Pro 2.0
+default_print_profile = 0.20mm Quality @4Max Pro 2.0
+deretract_speed = 25
+end_gcode = M104 S0 ; turn off extruder heating\nM140 S0 ; turn off bed heating\nM107 ; turn off fans\nG91 ; relative positioning\nG0 Z+0.5 ; move Z up a tiny bit\nG90 ; absolute positioning\nG0 X135 Y105 F{machine_max_feedrate_x[0]*60} ; move extruder to center position\nG0 Z190.5 F{machine_max_feedrate_z[0]*60} ; lower the plattform to Z min\nM84 ; steppers off\nG90 ; absolute positioning\n
+extruder_offset = 0x0
+gcode_flavor = marlin
+machine_limits_usage = time_estimate_only
+machine_max_acceleration_e = 5000
+machine_max_acceleration_extruding = 1250
+machine_max_acceleration_retracting = 1250
+machine_max_acceleration_travel = 1500
+machine_max_acceleration_x = 900
+machine_max_acceleration_y = 900
+machine_max_acceleration_z = 100
+machine_max_feedrate_e = 120
+machine_max_feedrate_x = 200
+machine_max_feedrate_y = 200
+machine_max_feedrate_z = 16
+machine_max_jerk_e = 5
+machine_max_jerk_x = 6
+machine_max_jerk_y = 6
+machine_max_jerk_z = 0.2
+machine_min_extruding_rate = 0
+machine_min_travel_rate = 0
+max_layer_height = 0.3
+max_print_height = 190
+min_layer_height = 0.07
+nozzle_diameter = 0.4
+pause_print_gcode = M601
+remaining_times = 0
+retract_before_travel = 2
+retract_before_wipe = 0%
+retract_layer_change = 1
+retract_length = 2.5
+retract_length_toolchange = 10
+retract_lift = 0
+retract_lift_above = 0
+retract_lift_below = 0
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 35
+silent_mode = 0
+single_extruder_multi_material = 0
+start_gcode = G21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 X0 Y0 ; home X and Y\nG28 Z0 ; home Z\nG1 Z30 F{machine_max_feedrate_z[0]*60} ; move Z a bit down to not blow on the bed edge while heating\nG1 X10 F3900 ; let some space on x to prevent the filament cooling exhaust from beeing blocked by the servo motor\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM104 S[first_layer_temperature] ; set extruder temp\nM106 S80 ; turn on fan to prevent air nozzle melt while heating up\nM109 S[first_layer_temperature] ; wait for extruder temp\nM107 ; start with the fan off\nG28 X0 ; goto X home again\nG92 E0 ; zero the extruded length\nG1 Z0.2 F360 ; move plattform upwards\n; extrude material next to the plattform (comment or remove following lines to disable)\nG1 F180 E20 ; extrude some material next to the plattform\nG92 E0 ; zero the extruded length\nG1 E-[retract_length] F{retract_speed[0]*60} ; do a filament retract\nG92 E0 ; zero the extruded length again\nG1 X5 F3900 ; move sideways to get rid of that string\nG1 E[retract_length] F{retract_speed[0]*60} ; do a filament deretract with retract parameters\nG92 E0 ; zero the extruded length again\n; draw intro line (comment or remove following lines to disable)\nG1 X30 E5 F700 ; draw intro line\nG92 E0 ; zero the extruded length\nG1 E-[retract_length] F{retract_speed[0]*60} ; do a filament retract\nG1 X40 Z2.0 ; move away from the introline\nG92 E0 ; zero the extruded length again\nG1 E[retract_length] F{retract_speed[0]*60} ; do a filament deretract with retract parameters\n; end of intro line code\nM117 Printing...\nG5
+use_firmware_retraction = 0
+use_relative_e_distances = 0
+use_volumetric_e = 0
+variable_layer_height = 1
+wipe = 0
+z_offset = 0
-#########################################
########## SLA printer presets ##########
-#########################################
-
[sla_print:*common print ANYCUBIC SLA*]
-compatible_printers_condition = family=="PHOTON MONO"
+compatible_printers_condition = printer_notes=~/.*PHOTONMONOX.*/
layer_height = 0.05
output_filename_format = [input_filename_base].pwmx
pad_edge_radius = 0.5
@@ -1995,4 +2326,4 @@ max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
area_fill = 45
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX\n
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX\n
\ No newline at end of file
diff --git a/resources/profiles/Anycubic/4MAXPRO20_bed.stl b/resources/profiles/Anycubic/4MAXPRO20_bed.stl
new file mode 100644
index 0000000000..2b3534fa99
Binary files /dev/null and b/resources/profiles/Anycubic/4MAXPRO20_bed.stl differ
diff --git a/resources/profiles/Anycubic/4MAXPRO20_texture.svg b/resources/profiles/Anycubic/4MAXPRO20_texture.svg
new file mode 100644
index 0000000000..edea26d50a
--- /dev/null
+++ b/resources/profiles/Anycubic/4MAXPRO20_texture.svg
@@ -0,0 +1,259 @@
+
+
diff --git a/resources/profiles/Anycubic/4MAXPRO20_thumbnail.png b/resources/profiles/Anycubic/4MAXPRO20_thumbnail.png
new file mode 100644
index 0000000000..2c9679483c
Binary files /dev/null and b/resources/profiles/Anycubic/4MAXPRO20_thumbnail.png differ
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 0c3dd6560a..cb54376357 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -4629,14 +4629,14 @@ void GCodeViewer::render_statistics()
ImGuiWrapper& imgui = *wxGetApp().imgui();
- auto add_time = [this, &imgui](const std::string& label, int64_t time) {
+ auto add_time = [&imgui](const std::string& label, int64_t time) {
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label);
ImGui::SameLine(offset);
imgui.text(std::to_string(time) + " ms (" + get_time_dhms(static_cast(time) * 0.001f) + ")");
};
- auto add_memory = [this, &imgui](const std::string& label, int64_t memory) {
- auto format_string = [memory](const std::string& units, float value) {
+ auto add_memory = [&imgui](const std::string& label, int64_t memory) {
+ auto format_string = [memory](const std::string& units, float value) {
return std::to_string(memory) + " bytes (" +
Slic3r::float_to_string_decimal_point(float(memory) * value, 3)
+ " " + units + ")";
@@ -4658,7 +4658,7 @@ void GCodeViewer::render_statistics()
imgui.text(format_string("GB", inv_gb));
};
- auto add_counter = [this, &imgui](const std::string& label, int64_t counter) {
+ auto add_counter = [&imgui](const std::string& label, int64_t counter) {
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, label);
ImGui::SameLine(offset);
imgui.text(std::to_string(counter));
diff --git a/src/slic3r/GUI/GLModel.cpp b/src/slic3r/GUI/GLModel.cpp
index af650875ba..a92153330c 100644
--- a/src/slic3r/GUI/GLModel.cpp
+++ b/src/slic3r/GUI/GLModel.cpp
@@ -540,7 +540,7 @@ void GLModel::init_from(const indexed_triangle_set& its, const BoundingBoxf3 &bb
// update bounding box
for (size_t i = 0; i < vertices_count(); ++i) {
- m_bounding_box.merge(m_render_data.geometry.extract_position_3(i).cast());
+ m_bounding_box.merge(data.extract_position_3(i).cast());
}
#else
if (!m_render_data.empty()) // call reset() if you want to reuse this model
@@ -622,7 +622,7 @@ void GLModel::init_from(const Polygons& polygons, float z)
// update bounding box
for (size_t i = 0; i < vertices_count(); ++i) {
- m_bounding_box.merge(m_render_data.geometry.extract_position_3(i).cast());
+ m_bounding_box.merge(data.extract_position_3(i).cast());
}
#else
auto append_polygon = [](const Polygon& polygon, float z, GUI::GLModel::Geometry& data) {
@@ -1081,31 +1081,32 @@ bool GLModel::send_to_gpu()
// indices
glsafe(::glGenBuffers(1, &m_render_data.ibo_id));
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id));
+ const size_t indices_count = data.indices.size();
if (m_render_data.vertices_count <= 256) {
// convert indices to unsigned char to save gpu memory
- std::vector reduced_indices(data.indices.size());
- for (size_t i = 0; i < data.indices.size(); ++i) {
+ std::vector reduced_indices(indices_count);
+ for (size_t i = 0; i < indices_count; ++i) {
reduced_indices[i] = (unsigned char)data.indices[i];
}
data.index_type = Geometry::EIndexType::UBYTE;
- glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, reduced_indices.size() * sizeof(unsigned char), reduced_indices.data(), GL_STATIC_DRAW));
+ glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices_count * sizeof(unsigned char), reduced_indices.data(), GL_STATIC_DRAW));
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
}
else if (m_render_data.vertices_count <= 65536) {
// convert indices to unsigned short to save gpu memory
- std::vector reduced_indices(data.indices.size());
+ std::vector reduced_indices(indices_count);
for (size_t i = 0; i < data.indices.size(); ++i) {
reduced_indices[i] = (unsigned short)data.indices[i];
}
data.index_type = Geometry::EIndexType::USHORT;
- glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, reduced_indices.size() * sizeof(unsigned short), reduced_indices.data(), GL_STATIC_DRAW));
+ glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices_count * sizeof(unsigned short), reduced_indices.data(), GL_STATIC_DRAW));
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
}
else {
glsafe(::glBufferData(GL_ELEMENT_ARRAY_BUFFER, data.indices_size_bytes(), data.indices.data(), GL_STATIC_DRAW));
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
}
- m_render_data.indices_count = indices_count();
+ m_render_data.indices_count = indices_count;
data.indices = std::vector();
return true;
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
index e6e58afaf7..c4ecc33e41 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
@@ -236,11 +236,6 @@ void GLGizmoRotate::on_render()
render_angle();
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
-#if ENABLE_GL_SHADERS_ATTRIBUTES
- glsafe(::glPushMatrix());
- transform_to_local(selection);
-#endif // ENABLE_GL_SHADERS_ATTRIBUTES
-
#if ENABLE_WORLD_COORDINATE
render_grabber(m_bounding_box);
render_grabber_extension(m_bounding_box, false);
@@ -249,7 +244,9 @@ void GLGizmoRotate::on_render()
render_grabber_extension(box, false);
#endif // ENABLE_WORLD_COORDINATE
+#if !ENABLE_GL_SHADERS_ATTRIBUTES
glsafe(::glPopMatrix());
+#endif // !ENABLE_GL_SHADERS_ATTRIBUTES
}
void GLGizmoRotate::on_render_for_picking()
@@ -749,8 +746,7 @@ Transform3d GLGizmoRotate::local_transform(const Selection& selection) const
return Geometry::assemble_transform(m_center) * ret;
}
-#endif // ENABLE_GL_SHADERS_ATTRIBUTES
-
+#else
void GLGizmoRotate::transform_to_local(const Selection& selection) const
{
glsafe(::glTranslated(m_center.x(), m_center.y(), m_center.z()));
@@ -786,6 +782,7 @@ void GLGizmoRotate::transform_to_local(const Selection& selection) const
}
}
}
+#endif // ENABLE_GL_SHADERS_ATTRIBUTES
Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray, const Selection& selection) const
{
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp
index 1579a1567b..0d004f4bfc 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp
@@ -112,9 +112,10 @@ private:
#if ENABLE_GL_SHADERS_ATTRIBUTES
Transform3d local_transform(const Selection& selection) const;
+#else
+ void transform_to_local(const Selection& selection) const;
#endif // ENABLE_GL_SHADERS_ATTRIBUTES
- void transform_to_local(const Selection& selection) const;
// returns the intersection of the mouse ray with the plane perpendicular to the gizmo axis, in local coordinate
Vec3d mouse_position_in_local_plane(const Linef3& mouse_ray, const Selection& selection) const;