774{
775 PresetBundle *preset_bundle = wxGetApp().preset_bundle;
776
777 const GCodeFlavor gcflavor = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionEnum<GCodeFlavor>>(
"gcode_flavor")->value;
778
779
782
783
784
785
786
787 bool is_belt_printer = false;
788 bool is_belt_tilted = false;
789 {
790 const auto &printer_cfg = preset_bundle->printers.get_edited_preset().config;
791 const auto *belt_opt = printer_cfg.option<ConfigOptionBool>("belt_printer");
792 if (belt_opt)
793 is_belt_printer = belt_opt->value;
794 const auto *axis = printer_cfg.option<ConfigOptionEnum<BeltRotationAxis>>("belt_slice_rotation");
796 if (is_belt_printer && axis !=
nullptr &&
angle !=
nullptr) {
797
798
799 const double tilt = std::abs(
angle->value);
802 }
803 }
804
805 bool have_volumetric_extrusion_rate_slope = config->option<
ConfigOptionFloat>(
"max_volumetric_extrusion_rate_slope")->value > 0;
806 float have_volumetric_extrusion_rate_slope_segment_length = config->option<
ConfigOptionFloat>(
"max_volumetric_extrusion_rate_slope_segment_length")->value;
807 toggle_field(
"enable_arc_fitting", !have_volumetric_extrusion_rate_slope && !is_belt_printer);
808 toggle_line(
"max_volumetric_extrusion_rate_slope_segment_length", have_volumetric_extrusion_rate_slope);
809 toggle_line(
"extrusion_rate_smoothing_external_perimeter_only", have_volumetric_extrusion_rate_slope);
810 if(have_volumetric_extrusion_rate_slope) config->set_key_value(
"enable_arc_fitting",
new ConfigOptionEnum<ArcFittingMode>(
ArcFittingMode::Disabled));
811 if(have_volumetric_extrusion_rate_slope_segment_length < 0.5) {
812 DynamicPrintConfig new_conf = *config;
813 new_conf.set_key_value(
"max_volumetric_extrusion_rate_slope_segment_length",
new ConfigOptionFloat(1));
814 apply(config, &new_conf);
815 }
816
817 bool have_perimeters = config->opt_int("wall_loops") > 0;
818 for (auto el : { "extra_perimeters_on_overhangs", "ensure_vertical_shell_thickness", "detect_thin_wall", "detect_overhang_wall",
819 "seam_position", "staggered_inner_seams", "wall_sequence", "outer_wall_line_width" })
821 for (auto el : { "inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "small_perimeter_threshold" })
823
824 bool have_infill = config->option<ConfigOptionPercent>("sparse_infill_density")->value > 0;
825
826 for (auto el : { "sparse_infill_pattern", "infill_combination", "fill_multiline","infill_direction",
827 "infill_complete_top",
828 "minimum_sparse_infill_area", "sparse_infill_filament_id","infill_shift_step","sparse_infill_rotate_template","symmetric_infill_y_axis"})
830
832
833
834
837 toggle_line(
"infill_anchor_max", have_infill_anchor);
838
839 bool have_combined_infill = config->opt_bool("infill_combination") && have_infill;
840 toggle_line(
"infill_combination_max_layer_height", have_combined_infill);
841
842
845
846
847 bool have_adaptive_infill_pattern = have_infill && config->option<ConfigOptionPercent>("sparse_infill_density")->value < 100 &&
849 toggle_line(
"adaptive_infill_mode", have_adaptive_infill_pattern);
851 toggle_line(
"adaptive_infill_interior_density", have_adaptive_infill);
852 toggle_line(
"adaptive_infill_gradient", have_adaptive_infill);
853
854
855
856 toggle_line(
"gyroid_optimized", have_infill && pattern ==
ipGyroid && !have_adaptive_infill);
857
858
859 if (have_infill) {
860 toggle_field(
"fill_multiline", have_multiline_infill_pattern);
861
862
863 if (!have_multiline_infill_pattern) {
864 DynamicPrintConfig new_conf = *config;
865 new_conf.set_key_value("fill_multiline", new ConfigOptionInt(1));
866 apply(config, &new_conf);
867 }
868
871
872
873 bool has_infill_anchors =
infill_anchor && config->option<ConfigOptionFloatOrPercent>(
"infill_anchor_max")->value > 0;
875 }
876
877
878 bool is_cross_zag = config->option<ConfigOptionEnum<InfillPattern>>(
"sparse_infill_pattern")->value ==
InfillPattern::ipCrossZag;
879 bool is_locked_zig = config->option<ConfigOptionEnum<InfillPattern>>(
"sparse_infill_pattern")->value ==
InfillPattern::ipLockedZag;
880
881 toggle_line(
"infill_shift_step", is_cross_zag || is_locked_zig);
882
883 for (auto el : { "skeleton_infill_density", "skin_infill_density", "infill_lock_depth", "skin_infill_depth","skin_infill_line_width", "skeleton_infill_line_width" })
885
886 bool is_zig_zag = config->option<ConfigOptionEnum<InfillPattern>>(
"sparse_infill_pattern")->value ==
InfillPattern::ipZigZag;
887
888 toggle_line(
"symmetric_infill_y_axis", is_zig_zag || is_cross_zag || is_locked_zig);
889
891 toggle_line(
"infill_complete_top", have_infill && is_3Dhoneycomb);
892
893 bool has_spiral_vase = config->opt_bool("spiral_mode");
894 toggle_line(
"spiral_mode_smooth", has_spiral_vase);
895 toggle_line(
"spiral_mode_max_xy_smoothing", has_spiral_vase && config->opt_bool(
"spiral_mode_smooth"));
896 toggle_line(
"spiral_starting_flow_ratio", has_spiral_vase);
897 toggle_line(
"spiral_finishing_flow_ratio", has_spiral_vase);
898 bool has_top_shell_layers = config->opt_int(
"top_shell_layers") > 0 || (has_spiral_vase && config->opt_int(
"bottom_shell_layers") > 1);
899 bool has_top_shell =
has_top_shell_layers && config->option<ConfigOptionPercent>(
"top_surface_density")->value > 0;
900 bool has_bottom_shell = config->opt_int("bottom_shell_layers") > 0;
904 toggle_field(
"bottom_surface_pattern", has_bottom_shell);
906 toggle_field(
"bottom_surface_density", has_bottom_shell);
908 toggle_field(
"bottom_layer_direction", has_bottom_shell);
909
910 toggle_line(
"top_surface_expansion", has_top_shell);
911 toggle_line(
"top_surface_expansion_margin", has_top_shell);
912 bool has_top_surface_expansion = config->opt_float("top_surface_expansion") > 0;
913 toggle_field(
"top_surface_expansion_margin", has_top_surface_expansion);
914 toggle_line(
"top_surface_expansion_direction", has_top_shell);
915 toggle_field(
"top_surface_expansion_direction", has_top_surface_expansion);
916
917
918
921 };
922 bool is_top_centered = is_centered_pattern(config->option<ConfigOptionEnum<InfillPattern>>("top_surface_pattern")->value);
923 bool is_bottom_centered = is_centered_pattern(config->option<ConfigOptionEnum<InfillPattern>>("bottom_surface_pattern")->value);
924 bool has_centered_surface = (has_top_shell && is_top_centered) || (has_bottom_shell && is_bottom_centered);
925
926
927 toggle_line(
"center_of_surface_pattern", has_centered_surface);
928
929
931
932
934 toggle_line(
"top_surface_fill_order", has_top_shell && is_centered_fill(config->opt_enum<
InfillPattern>(
"top_surface_pattern")));
935 toggle_line(
"bottom_surface_fill_order", has_bottom_shell && is_centered_fill(config->opt_enum<
InfillPattern>(
"bottom_surface_pattern")));
936
937 for (auto el : { "infill_direction", "sparse_infill_line_width", "gap_fill_target","filter_out_gap_fill","infill_wall_overlap",
938 "bridge_angle", "internal_bridge_angle", "relative_bridge_angle",
939 "solid_infill_direction", "solid_infill_rotate_template", "internal_solid_infill_pattern", "internal_solid_filament_id", "top_surface_filament_id", "bottom_surface_filament_id",
940 })
942 for (auto el : { "sparse_infill_speed", "bridge_speed", "internal_bridge_speed"})
943 toggle_field(el, have_infill || has_solid_infill, variant_index);
944
946 toggle_field(
"bottom_shell_thickness", ! has_spiral_vase && has_bottom_shell);
947
948
949 toggle_field(
"gap_infill_speed", have_perimeters, variant_index);
950
952 toggle_field(
"top_surface_speed", has_top_shell, variant_index);
953
954 bool have_default_acceleration = config->opt_float_nullable("default_acceleration", variant_index) > 0;
955
956 for (auto el : {"outer_wall_acceleration", "inner_wall_acceleration", "initial_layer_acceleration", "initial_layer_travel_acceleration",
957 "top_surface_acceleration", "travel_acceleration", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration"})
958 toggle_field(el, have_default_acceleration, variant_index);
959
960 bool machine_supports_junction_deviation = false;
961 if (gcf_is_marlin_firmware) {
962 if (
const auto *machine_jd = preset_bundle->printers.get_edited_preset().config.option<
ConfigOptionFloats>(
"machine_max_junction_deviation")) {
963 machine_supports_junction_deviation = !machine_jd->values.empty() && machine_jd->values.front() > 0.0;
964 }
965 }
966 toggle_line(
"default_junction_deviation", gcf_is_marlin_firmware, variant_index);
967 if (machine_supports_junction_deviation) {
968 toggle_field(
"default_junction_deviation",
true, variant_index);
970 for (auto el : { "outer_wall_jerk", "inner_wall_jerk", "initial_layer_jerk", "initial_layer_travel_jerk", "top_surface_jerk", "travel_jerk", "infill_jerk"})
972 } else {
973 toggle_field(
"default_junction_deviation",
false, variant_index);
975 bool have_default_jerk = config->has("default_jerk") && config->opt_float_nullable("default_jerk", variant_index) > 0;
976 for (auto el : { "outer_wall_jerk", "inner_wall_jerk", "initial_layer_jerk", "initial_layer_travel_jerk", "top_surface_jerk", "travel_jerk", "infill_jerk"}) {
979 }
980 }
981
982
983 bool have_skirt = config->opt_int("skirt_loops") > 0 && !is_belt_printer;
985 toggle_line(
"single_loop_draft_shield", have_skirt);
986 for (auto el : {"skirt_type", "min_skirt_length", "skirt_distance", "skirt_start_angle", "skirt_speed", "draft_shield"})
988 if (is_belt_printer) {
991 }
992
993
994
995
996
999
1000 toggle_field(
"brim_use_efc_outline", have_brim && !is_belt_tilted);
1001 toggle_field(
"combine_brims", have_brim && !is_belt_tilted);
1002 bool have_brim_width = have_brim && config->opt_enum<
BrimType>(
"brim_type") !=
btAutoBrim &&
1004
1005
1006 toggle_field(
"brim_width", have_brim_width || (have_brim && is_belt_tilted));
1008
1009
1010
1011
1012 for (auto el : { "leading_brim_length", "extra_brim_width" }) {
1015 }
1016
1017 toggle_field(
"outer_wall_filament_id", have_perimeters || have_brim);
1018 toggle_field(
"inner_wall_filament_id", have_perimeters || have_brim);
1019
1021 const bool have_auto_brim_ear = brim_type ==
btEar && !is_belt_tilted;
1022 const bool have_painted_brim_ear = brim_type ==
btPainted && !is_belt_tilted;
1023 set_option_label(
"brim_width", have_auto_brim_ear ?
L(
"Brim ear radius") :
L(
"Brim width"));
1024 const auto brim_width = config->opt_float("brim_width");
1025
1026 toggle_field(
"brim_ears_max_angle", brim_width > 0.0f);
1027 toggle_field(
"brim_ears_detection_length", brim_width > 0.0f);
1028
1029 toggle_field(
"brim_ears_outer_only", have_painted_brim_ear || brim_width > 0.0f);
1030 toggle_line(
"brim_ears_max_angle", have_auto_brim_ear);
1031 toggle_line(
"brim_ears_detection_length", have_auto_brim_ear);
1032 toggle_line(
"brim_ears_outer_only", have_auto_brim_ear || have_painted_brim_ear);
1033
1034
1035 toggle_line(
"elefant_foot_compensation_layers", config->opt_float(
"elefant_foot_compensation") > 0 || config->option<ConfigOptionPercent>(
"elefant_foot_layers_density")->get_abs_value(1.0f) < 1.0f);
1036
1037 bool have_raft = config->opt_int("raft_layers") > 0 && !is_belt_printer;
1038 if (is_belt_printer)
1040 bool have_support_material = config->opt_bool("enable_support") || have_raft;
1041
1043 bool have_support_interface = config->opt_int("support_interface_top_layers") > 0 || config->opt_int("support_interface_bottom_layers") > 0;
1044 bool have_support_soluble = have_support_material && config->opt_float("support_top_z_distance") == 0;
1046 for (auto el : { "support_style", "support_base_pattern",
1047 "support_base_pattern_spacing", "support_expansion", "support_angle",
1048 "support_interface_pattern", "support_interface_top_layers", "support_interface_bottom_layers",
1049 "bridge_no_support", "max_bridge_length", "support_top_z_distance", "support_bottom_z_distance",
1050 "support_type", "support_on_build_plate_only", "support_critical_regions_only", "support_interface_not_for_body",
1051 "support_object_xy_distance", "support_object_first_layer_gap", "independent_support_layer_height"})
1054 toggle_field(
"support_threshold_overlap", config->opt_int(
"support_threshold_angle") == 0 && have_support_material &&
is_auto(support_type));
1055
1056
1057 bool support_is_tree = config->opt_bool(
"enable_support") &&
is_tree(support_type);
1059 bool support_is_normal_tree = support_is_tree && !support_is_organic;
1060
1061
1062 toggle_line(
"support_threshold_overlap", !support_is_tree);
1063
1064 for (auto el : {"tree_support_branch_angle", "tree_support_branch_distance", "tree_support_branch_diameter", "tree_support_auto_brim", "tree_support_brim_width"})
1066
1067 for (auto el : {"tree_support_branch_angle_organic", "tree_support_branch_distance_organic", "tree_support_branch_diameter_organic", "tree_support_angle_slow", "tree_support_tip_diameter", "tree_support_top_rate", "tree_support_branch_diameter_angle"})
1069
1070
1071 toggle_line(
"independent_support_layer_height", have_support_material && !support_is_organic);
1072
1073 toggle_field(
"tree_support_brim_width", support_is_tree && !config->opt_bool(
"tree_support_auto_brim"));
1074
1075 toggle_line(
"max_bridge_length", support_is_tree);
1076 toggle_line(
"bridge_no_support", !support_is_tree);
1077 toggle_line(
"support_critical_regions_only",
is_auto(support_type) && support_is_tree);
1078
1079 for (auto el : { "support_interface_filament",
1080 "support_interface_loop_pattern", "support_bottom_interface_spacing" })
1081 toggle_field(el, have_support_material && have_support_interface);
1082
1083 bool can_ironing_support = have_raft || (have_support_material && config->opt_int("support_interface_top_layers") > 0);
1085 bool has_support_ironing = can_ironing_support && config->opt_bool("support_ironing");
1086 for (auto el : {"support_ironing_pattern", "support_ironing_flow", "support_ironing_spacing" })
1088
1089 toggle_field(
"support_interface_spacing", have_support_material && have_support_interface && !has_support_ironing);
1090
1091
1092
1093
1094
1095
1096
1097
1098 for (auto el : {"small_support_perimeter_speed", "small_support_perimeter_threshold"})
1100
1101
1102
1103
1104 toggle_field(
"inner_wall_line_width", have_perimeters || have_skirt || have_brim);
1105 toggle_field(
"support_filament", have_support_material || have_skirt);
1106
1107 toggle_line(
"raft_contact_distance", have_raft && !have_support_soluble);
1108
1110
1112
1113
1114 toggle_field(
"raft_first_layer_density", have_support_material);
1115
1116
1118 have_support_material && ((!support_is_normal_tree || support_style ==
smsTreeHybrid) || have_raft));
1119
1121 for (auto el : { "ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_angle", "ironing_inset", "ironing_angle_fixed" })
1124 for (auto el : {"ironing_angle", "ironing_angle_fixed"})
1125 toggle_field(el, has_ironing && has_rectilinear_ironing);
1126
1127 toggle_line(
"ironing_speed", has_ironing || has_support_ironing);
1128
1129 bool has_zaa = config->opt_bool("zaa_enabled");
1130 for (auto el : {"zaa_minimize_perimeter_height", "zaa_min_z", "zaa_dont_alternate_fill_direction", "ironing_expansion"})
1132
1134
1135
1136 toggle_field(
"print_order", !have_sequential_printing);
1137
1139
1140 auto bSEMM = preset_bundle->printers.get_edited_preset().config.opt_bool("single_extruder_multi_material");
1142
1144 bool have_ooze_prevention = config->opt_bool("ooze_prevention");
1145 toggle_line(
"standby_temperature_delta", have_ooze_prevention);
1146 toggle_line(
"preheat_time", have_ooze_prevention);
1149
1150 bool have_prime_tower = config->opt_bool("enable_prime_tower");
1151
1152
1153
1154
1155 const bool have_belt_purge_tower = is_belt_printer
1156 && preset_bundle->printers.get_edited_preset().config.has("enable_belt_purge_tower")
1157 && preset_bundle->printers.get_edited_preset().config.opt_bool("enable_belt_purge_tower");
1158 toggle_line(
"belt_purge_tower_width", have_belt_purge_tower);
1159 for (auto el : {"prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "wipe_tower_wall_type", "prime_tower_infill_gap","prime_tower_enable_framework", "enable_tower_interface_features"})
1160 toggle_line(el, have_prime_tower && !is_belt_printer);
1161
1162 toggle_line(
"enable_tower_interface_cooldown_during_tower",
1163 have_prime_tower && !is_belt_printer && config->opt_bool("enable_tower_interface_features"));
1164
1165 bool purge_in_primetower = preset_bundle->printers.get_edited_preset().config.opt_bool("purge_in_prime_tower");
1166
1167 for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle",
1168 "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed",
1169 "wipe_tower_bridging", "wipe_tower_extra_flow"})
1170 toggle_line(el, have_prime_tower && supports_wipe_tower_2 && !is_belt_printer);
1171
1172
1173 toggle_line(
"wipe_tower_no_sparse_layers", have_prime_tower && !is_belt_printer);
1174
1175 toggle_line(
"wipe_tower_sparse_layers_combination", have_prime_tower && !is_belt_printer && !config->opt_bool(
"wipe_tower_no_sparse_layers"));
1176
1180 toggle_line(
"wipe_tower_extra_rib_length", have_rib_wall);
1181 toggle_line(
"wipe_tower_rib_width", have_rib_wall);
1182 toggle_line(
"wipe_tower_fillet_wall", have_rib_wall);
1183 toggle_field(
"prime_tower_width", have_prime_tower && !have_rib_wall && !is_belt_printer);
1184
1185 toggle_line(
"single_extruder_multi_material_priming", !bSEMM && have_prime_tower && supports_wipe_tower_2 && !is_belt_printer);
1186
1188 toggle_line(
"toolchange_cyclic_order", use_cyclic_ordering);
1189 toggle_line(
"toolchange_cyclic_first_layer", use_cyclic_ordering);
1190
1191 toggle_line(
"prime_volume",have_prime_tower && (!purge_in_primetower || !bSEMM));
1192
1193 for (auto el : {"flush_into_infill", "flush_into_support", "flush_into_objects"})
1195
1196 bool have_avoid_crossing_perimeters = config->opt_bool("reduce_crossing_wall");
1197 toggle_line(
"max_travel_detour_distance", have_avoid_crossing_perimeters);
1198
1199 bool has_set_other_flow_ratios = config->opt_bool("set_other_flow_ratios");
1200 for (auto el : {"first_layer_flow_ratio", "outer_wall_flow_ratio", "inner_wall_flow_ratio", "overhang_flow_ratio", "sparse_infill_flow_ratio", "internal_solid_infill_flow_ratio", "gap_fill_flow_ratio", "support_flow_ratio", "support_interface_flow_ratio"})
1202
1203 bool has_overhang_speed = config->opt_bool_nullable("enable_overhang_speed", variant_index);
1204 for (auto el : {"overhang_1_4_speed", "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed"})
1205 toggle_line(el, has_overhang_speed, variant_index);
1206
1207 toggle_line(
"slowdown_for_curled_perimeters", has_overhang_speed, variant_index);
1208
1209 toggle_line(
"flush_into_objects", !is_global_config);
1210
1211 toggle_line(
"support_interface_not_for_body",config->opt_int(
"support_interface_filament")&&!config->opt_int(
"support_filament"));
1212
1213
1215
1216
1217 for (auto el : {"fuzzy_skin_mode", "fuzzy_skin_noise_type", "fuzzy_skin_point_distance", "fuzzy_skin_thickness", "fuzzy_skin_first_layer"})
1219
1220
1221 NoiseType fuzzy_skin_noise_type = config->opt_enum<
NoiseType>(
"fuzzy_skin_noise_type");
1226 toggle_line(
"fuzzy_skin_ripples_per_layer", is_ripple && has_fuzzy_skin);
1227 toggle_line(
"fuzzy_skin_ripple_offset", is_ripple && has_fuzzy_skin);
1228 toggle_line(
"fuzzy_skin_layers_between_ripple_offset", is_ripple && has_fuzzy_skin);
1229
1231 for (auto el : {"wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "min_feature_size", "min_length_factor",
1232 "min_bead_width", "wall_distribution_count", "initial_layer_min_bead_width", "wall_maximum_resolution", "wall_maximum_deviation"})
1235
1236
1237 auto is_role_based_wipe_speed = config->opt_bool("role_based_wipe_speed");
1239
1240 const bool have_wipe_inward = config->opt_bool("wipe_inward");
1241 toggle_line(
"wipe_inward_distance", have_wipe_inward);
1242
1243 for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"})
1245 if(gcf_is_klipper)
1246 toggle_field(
"accel_to_decel_factor", config->opt_bool(
"accel_to_decel_enable"));
1247
1248 toggle_line(
"exclude_object_tolerance", gcf_is_klipper && config->opt_bool(
"exclude_object"));
1249
1250 bool have_make_overhang_printable = config->opt_bool("make_overhang_printable");
1251 toggle_line(
"make_overhang_printable_angle", have_make_overhang_printable);
1252 toggle_line(
"make_overhang_printable_hole_size", have_make_overhang_printable);
1253
1254
1255
1256 toggle_line(
"only_one_wall_first_layer", has_bottom_shell);
1258 toggle_line(
"min_width_top_surface", (
has_top_shell_layers && config->opt_bool(
"only_one_wall_top")) || ((config->opt_float(
"min_length_factor") > 0.5f) && have_arachne));
1259
1260 for (auto el : { "hole_to_polyhole_threshold", "hole_to_polyhole_twisted", "hole_to_polyhole_max_edges" })
1261 toggle_line(el, config->opt_bool(
"hole_to_polyhole"));
1262
1263 bool has_detect_overhang_wall = config->opt_bool("detect_overhang_wall");
1264 bool has_overhang_reverse = config->opt_bool("overhang_reverse");
1265 bool allow_overhang_reverse = !has_spiral_vase;
1266 toggle_line(
"unsupported_wall_last", has_detect_overhang_wall);
1267 toggle_line(
"overhang_reverse", allow_overhang_reverse);
1268 toggle_line(
"overhang_reverse_internal_only", allow_overhang_reverse && has_overhang_reverse);
1269 bool has_overhang_reverse_internal_only = config->opt_bool("overhang_reverse_internal_only");
1270 if (has_overhang_reverse_internal_only){
1271 DynamicPrintConfig new_conf = *config;
1272 new_conf.set_key_value("overhang_reverse_threshold", new ConfigOptionFloatOrPercent(0,true));
1273 apply(config, &new_conf);
1274 }
1275 toggle_line(
"overhang_reverse_threshold", has_detect_overhang_wall && allow_overhang_reverse && has_overhang_reverse && !has_overhang_reverse_internal_only);
1277
1278
1279 bool have_small_area_infill_flow_compensation = config->opt_bool("small_area_infill_flow_compensation");
1280 toggle_line(
"small_area_infill_flow_compensation_model", have_small_area_infill_flow_compensation);
1281
1282
1283
1284
1285 toggle_field(
"seam_slope_type", !has_spiral_vase && !is_belt_printer);
1287 toggle_line(
"seam_slope_conditional", has_seam_slope);
1288 toggle_line(
"seam_slope_start_height", has_seam_slope);
1289 toggle_line(
"seam_slope_entire_loop", has_seam_slope);
1290 toggle_line(
"seam_slope_min_length", has_seam_slope);
1292 toggle_line(
"seam_slope_inner_walls", has_seam_slope);
1294 toggle_line(
"scarf_joint_flow_ratio", has_seam_slope);
1295 toggle_field(
"seam_slope_min_length", !config->opt_bool(
"seam_slope_entire_loop"));
1296 toggle_line(
"scarf_angle_threshold", has_seam_slope && config->opt_bool(
"seam_slope_conditional"));
1297 toggle_line(
"scarf_overhang_threshold", has_seam_slope && config->opt_bool(
"seam_slope_conditional"));
1298
1299 bool use_beam_interlocking = config->opt_bool("interlocking_beam");
1300 toggle_line(
"mmu_segmented_region_interlocking_depth", !use_beam_interlocking);
1301 toggle_line(
"interlocking_beam_width", use_beam_interlocking);
1302 toggle_line(
"interlocking_orientation", use_beam_interlocking);
1303 toggle_line(
"interlocking_beam_layer_count", use_beam_interlocking);
1304 toggle_line(
"interlocking_depth", use_beam_interlocking);
1305 toggle_line(
"interlocking_boundary_avoidance", use_beam_interlocking);
1306
1308 for (auto el : { "lateral_lattice_angle_1", "lateral_lattice_angle_2"})
1310
1312 for (auto el : { "lightning_overhang_angle", "lightning_prune_angle", "lightning_straightening_angle" })
1314
1315
1317
1318
1319 toggle_field(
"sparse_infill_rotate_template", !FillAdaptive);
1320 toggle_field(
"infill_direction", config->opt_string(
"sparse_infill_rotate_template") ==
"" && !FillAdaptive);
1321 toggle_field(
"solid_infill_direction", config->opt_string(
"solid_infill_rotate_template") ==
"");
1322
1324
1325 std::string printer_type = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle);
1327}
static bool support_wrapping_detection(const std::string &type_str)
Definition DevConfigUtil.h:122
void toggle_field(const std::string &field_key, const bool toggle, int opt_index=-1)
Definition ConfigManipulation.cpp:66
void set_option_label(const std::string &field_key, const wxString &label, int opt_index=-1)
Definition ConfigManipulation.cpp:84
void toggle_line(const std::string &field_key, const bool toggle, int opt_index=-1)
Definition ConfigManipulation.cpp:74
GCodeFlavor
Definition PrintConfig.hpp:51
@ gcfMarlinFirmware
Definition PrintConfig.hpp:56
@ gcfKlipper
Definition PrintConfig.hpp:53
infill_anchor((ConfigOptionFloatOrPercent, infill_anchor_max))((ConfigOptionBool
constexpr double BELT_BRIM_MIN_TILT_DEG
Definition BeltBrim.hpp:49
BrimType
Definition PrintConfig.hpp:454
@ btEar
Definition PrintConfig.hpp:456
@ btPainted
Definition PrintConfig.hpp:457
@ btNoBrim
Definition PrintConfig.hpp:461
@ btAutoBrim
Definition PrintConfig.hpp:455
InfillPattern
Definition PrintConfig.hpp:126
@ ipStars
Definition PrintConfig.hpp:130
@ ipHilbertCurve
Definition PrintConfig.hpp:134
@ ipQuarterCubic
Definition PrintConfig.hpp:131
@ ipArchimedeanChords
Definition PrintConfig.hpp:134
@ ipConcentric
Definition PrintConfig.hpp:134
@ ipZigZag
Definition PrintConfig.hpp:128
@ ipTpmsD
Definition PrintConfig.hpp:133
@ ipLateralLattice
Definition PrintConfig.hpp:132
@ ipAlignedRectilinear
Definition PrintConfig.hpp:128
@ ip3DHoneycomb
Definition PrintConfig.hpp:132
@ ipAdaptiveCubic
Definition PrintConfig.hpp:131
@ ipCrossZag
Definition PrintConfig.hpp:128
@ ipLine
Definition PrintConfig.hpp:129
@ ipHoneycomb
Definition PrintConfig.hpp:132
@ ipCubic
Definition PrintConfig.hpp:131
@ ipOctagramSpiral
Definition PrintConfig.hpp:134
@ ipTriangles
Definition PrintConfig.hpp:130
@ ipSupportCubic
Definition PrintConfig.hpp:131
@ ipTpmsFK
Definition PrintConfig.hpp:133
@ ipRectilinear
Definition PrintConfig.hpp:128
@ ipCrossHatch
Definition PrintConfig.hpp:133
@ ipGyroid
Definition PrintConfig.hpp:133
@ ipLockedZag
Definition PrintConfig.hpp:128
@ ipLateralHoneycomb
Definition PrintConfig.hpp:132
@ ipLightning
Definition PrintConfig.hpp:131
@ ipSpiralInset
Definition PrintConfig.hpp:134
bool is_adaptive_infill_pattern(InfillPattern pattern)
Definition PrintConfig.hpp:176
@ X
Definition PrintConfig.hpp:343
@ Y
Definition PrintConfig.hpp:344
@ Disabled
Definition PrintConfig.hpp:239
AdaptiveInfillMode
Definition PrintConfig.hpp:290
@ Disabled
Definition PrintConfig.hpp:291
bool is_separable_infill_pattern(InfillPattern pattern)
Definition PrintConfig.hpp:140
bool is_auto(SupportType stype)
Definition PrintConfig.hpp:389
bool is_tree(SupportType stype)
Definition PrintConfig.hpp:381
constexpr double BELT_BRIM_MAX_TILT_DEG
Definition BeltBrim.hpp:50
static bool has_top_shell_layers(const PrintRegionConfig &config)
Definition PerimeterGenerator.cpp:619
bool is_smoothable_infill_pattern(InfillPattern pattern, int multiline=1)
Definition PrintConfig.hpp:181
double angle(const Eigen::MatrixBase< Derived > &v1, const Eigen::MatrixBase< Derived2 > &v2)
Definition Point.hpp:138
PrintSequence
Definition PrintConfig.hpp:310
@ ByObject
Definition PrintConfig.hpp:312
FuzzySkinType
Definition PrintConfig.hpp:76
@ Disabled_fuzzy
Definition PrintConfig.hpp:82
WipeTowerType
Definition PrintConfig.hpp:113
@ Type2
Definition PrintConfig.hpp:115
ToolChangeOrderingType
Definition PrintConfig.hpp:491
@ Cyclic
Definition PrintConfig.hpp:493
SupportType
Definition PrintConfig.hpp:378
IroningType
Definition PrintConfig.hpp:202
@ NoIroning
Definition PrintConfig.hpp:203
zaa_minimize_perimeter_height preheat_steps((ConfigOptionInts, nozzle_temperature))((ConfigOptionBools
SupportMaterialStyle
Definition PrintConfig.hpp:362
@ smsTreeHybrid
Definition PrintConfig.hpp:363
@ smsTreeStrong
Definition PrintConfig.hpp:363
@ smsDefault
Definition PrintConfig.hpp:363
@ smsTreeOrganic
Definition PrintConfig.hpp:363
@ smsTreeSlim
Definition PrintConfig.hpp:363
WipeTowerWallType
Definition PrintConfig.hpp:605
@ wtwRib
Definition PrintConfig.hpp:608
@ wtwCone
Definition PrintConfig.hpp:607
DraftShield
Definition PrintConfig.hpp:477
@ dsEnabled
Definition PrintConfig.hpp:478
SeamScarfType
Definition PrintConfig.hpp:399
@ None
Definition PrintConfig.hpp:400
NoiseType
Definition PrintConfig.hpp:104
@ Perlin
Definition PrintConfig.hpp:106
@ Billow
Definition PrintConfig.hpp:107
@ Ripple
Definition PrintConfig.hpp:110
@ Classic
Definition PrintConfig.hpp:105
@ Voronoi
Definition PrintConfig.hpp:109
PerimeterGeneratorType
Definition PrintConfig.hpp:482
@ Arachne
Definition PrintConfig.hpp:487