// ===== AUTO-GENERATED by tools/parse_printconfig.py ===== // DO NOT EDIT MANUALLY. Re-run tools/run_codegen.py to regenerate. // // Provides the basic UI layout (add_options_page / new_optgroup / // append_single_option_line) for each settings tab. // Include from the corresponding Tab::build() after dynamic toggle logic. // Constants mirroring local variables from the original build functions. namespace { constexpr int gcode_field_height = 15; } namespace { constexpr int notes_field_height = 25; } inline void TabPrint_build_layout(TabPrint& tab) { auto page = tab.add_options_page(L("Quality"), "custom-gcode_quality"); { auto optgroup = page->new_optgroup(L("Layer height"), L"param_layer_height"); optgroup->append_single_option_line("layer_height", "quality_settings_layer_height"); optgroup->append_single_option_line("initial_layer_print_height", "quality_settings_layer_height"); } { auto optgroup = page->new_optgroup(L("Line width"), L"param_line_width"); optgroup->append_single_option_line("line_width", "quality_settings_line_width"); optgroup->append_single_option_line("initial_layer_line_width", "quality_settings_line_width"); optgroup->append_single_option_line("outer_wall_line_width", "quality_settings_line_width"); optgroup->append_single_option_line("inner_wall_line_width", "quality_settings_line_width"); optgroup->append_single_option_line("top_surface_line_width", "quality_settings_line_width"); optgroup->append_single_option_line("sparse_infill_line_width", "quality_settings_line_width"); optgroup->append_single_option_line("internal_solid_infill_line_width", "quality_settings_line_width"); optgroup->append_single_option_line("support_line_width", "quality_settings_line_width"); } { auto optgroup = page->new_optgroup(L("Seam"), L"param_seam"); optgroup->append_single_option_line("seam_position", "quality_settings_seam#seam-position"); optgroup->append_single_option_line("staggered_inner_seams", "quality_settings_seam#staggered-inner-seams"); optgroup->append_single_option_line("seam_gap", "quality_settings_seam#seam-gap"); optgroup->append_single_option_line("seam_slope_type", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("seam_slope_conditional", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("scarf_angle_threshold", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("scarf_overhang_threshold", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("scarf_joint_speed", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("seam_slope_start_height", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("seam_slope_entire_loop", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("seam_slope_min_length", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("seam_slope_steps", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("scarf_joint_flow_ratio", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("seam_slope_inner_walls", "quality_settings_seam#scarf-joint-seam"); optgroup->append_single_option_line("role_based_wipe_speed", "quality_settings_seam#role-based-wipe-speed"); optgroup->append_single_option_line("wipe_speed", "quality_settings_seam#wipe-speed"); optgroup->append_single_option_line("wipe_on_loops", "quality_settings_seam#wipe-on-loop-inward-movement"); optgroup->append_single_option_line("wipe_before_external_loop", "quality_settings_seam#wipe-before-external"); } { auto optgroup = page->new_optgroup(L("Precision"), L"param_precision"); optgroup->append_single_option_line("slice_closing_radius", "quality_settings_precision#slice-gap-closing-radius"); optgroup->append_single_option_line("resolution", "quality_settings_precision#resolution"); optgroup->append_single_option_line("enable_arc_fitting", "quality_settings_precision#arc-fitting"); optgroup->append_single_option_line("xy_hole_compensation", "quality_settings_precision#x-y-compensation"); optgroup->append_single_option_line("xy_contour_compensation", "quality_settings_precision#x-y-compensation"); optgroup->append_single_option_line("elefant_foot_compensation", "quality_settings_precision#elephant-foot-compensation"); optgroup->append_single_option_line("elefant_foot_layers_density", "quality_settings_precision#elephant-foot-compensation-density"); optgroup->append_single_option_line("elefant_foot_compensation_layers", "quality_settings_precision#elephant-foot-compensation"); optgroup->append_single_option_line("precise_outer_wall", "quality_settings_precision#precise-wall"); optgroup->append_single_option_line("precise_z_height", "quality_settings_precision#precise-z-height"); optgroup->append_single_option_line("hole_to_polyhole", "quality_settings_precision#polyholes"); optgroup->append_single_option_line("hole_to_polyhole_threshold", "quality_settings_precision#polyholes"); optgroup->append_single_option_line("hole_to_polyhole_twisted", "quality_settings_precision#polyholes"); } { auto optgroup = page->new_optgroup(L("Ironing"), L"param_ironing"); optgroup->append_single_option_line("ironing_type", "quality_settings_ironing#type"); optgroup->append_single_option_line("ironing_pattern", "quality_settings_ironing#pattern"); optgroup->append_single_option_line("ironing_flow", "quality_settings_ironing#flow"); optgroup->append_single_option_line("ironing_spacing", "quality_settings_ironing#line-spacing"); optgroup->append_single_option_line("ironing_inset", "quality_settings_ironing#inset"); optgroup->append_single_option_line("ironing_angle", "quality_settings_ironing#angle-offset"); optgroup->append_single_option_line("ironing_angle_fixed", "quality_settings_ironing#fixed-angle"); optgroup->append_single_option_line("zaa_enabled", "quality_settings_z_contouring"); optgroup->append_single_option_line("zaa_minimize_perimeter_height", "quality_settings_z_contouring#minimize-wall-height-angle"); optgroup->append_single_option_line("zaa_min_z", "quality_settings_z_contouring#minimum-z-height"); optgroup->append_single_option_line("zaa_dont_alternate_fill_direction", "quality_settings_z_contouring#dont-alternate-fill-direction"); } { auto optgroup = page->new_optgroup(L("Wall generator"), L"param_wall_generator"); optgroup->append_single_option_line("wall_generator", "quality_settings_wall_generator"); optgroup->append_single_option_line("wall_transition_angle", "quality_settings_wall_generator#wall-transitioning-threshhold-angle"); optgroup->append_single_option_line("wall_transition_filter_deviation", "quality_settings_wall_generator#wall-transitioning-filter-margin"); optgroup->append_single_option_line("wall_transition_length", "quality_settings_wall_generator#wall-transitioning-length"); optgroup->append_single_option_line("wall_distribution_count", "quality_settings_wall_generator#wall-distribution-count"); optgroup->append_single_option_line("initial_layer_min_bead_width", "quality_settings_wall_generator#first-layer-minimum-wall-width"); optgroup->append_single_option_line("min_bead_width", "quality_settings_wall_generator#minimum-wall-width"); optgroup->append_single_option_line("min_feature_size", "quality_settings_wall_generator#minimum-feature-size"); optgroup->append_single_option_line("min_length_factor", "quality_settings_wall_generator#minimum-wall-length"); optgroup->append_single_option_line("wall_maximum_resolution", "quality_settings_wall_generator#maximum-wall-resolution"); optgroup->append_single_option_line("wall_maximum_deviation", "quality_settings_wall_generator#maximum-wall-deviation"); } { auto optgroup = page->new_optgroup(L("Walls and surfaces"), L"param_wall_surface"); optgroup->append_single_option_line("wall_sequence", "quality_settings_wall_and_surfaces#walls-printing-order"); optgroup->append_single_option_line("is_infill_first", "quality_settings_wall_and_surfaces#print-infill-first"); optgroup->append_single_option_line("wall_direction", "quality_settings_wall_and_surfaces#wall-loop-direction"); optgroup->append_single_option_line("print_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("top_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("bottom_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("set_other_flow_ratios", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("first_layer_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("outer_wall_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("inner_wall_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("overhang_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("sparse_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("internal_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("gap_fill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("support_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("support_interface_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("only_one_wall_first_layer", "quality_settings_wall_and_surfaces#only-one-wall"); optgroup->append_single_option_line("only_one_wall_top", "quality_settings_wall_and_surfaces#only-one-wall"); optgroup->append_single_option_line("min_width_top_surface", "quality_settings_wall_and_surfaces#threshold"); optgroup->append_single_option_line("reduce_crossing_wall", "quality_settings_wall_and_surfaces#avoid-crossing-walls"); optgroup->append_single_option_line("max_travel_detour_distance", "quality_settings_wall_and_surfaces#max-detour-length"); optgroup->append_single_option_line("small_area_infill_flow_compensation", "quality_settings_wall_and_surfaces#small-area-flow-compensation"); { Option option = optgroup->get_option("small_area_infill_flow_compensation_model"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = 15; optgroup->append_single_option_line(option, "quality_settings_wall_and_surfaces#small-area-flow-compensation"); } } { auto optgroup = page->new_optgroup(L("Bridging"), L"param_bridge"); optgroup->append_single_option_line("bridge_flow", "quality_settings_bridging#flow-ratio"); optgroup->append_single_option_line("internal_bridge_flow", "quality_settings_bridging#flow-ratio"); optgroup->append_single_option_line("bridge_density", "quality_settings_bridging#bridge-density"); optgroup->append_single_option_line("internal_bridge_density", "quality_settings_bridging#bridge-density"); optgroup->append_single_option_line("thick_bridges", "quality_settings_bridging#thick-bridges"); optgroup->append_single_option_line("thick_internal_bridges", "quality_settings_bridging#thick-bridges"); optgroup->append_single_option_line("enable_extra_bridge_layer", "quality_settings_bridging#extra-bridge-layers"); optgroup->append_single_option_line("dont_filter_internal_bridges", "quality_settings_bridging#filter-out-small-internal-bridges"); optgroup->append_single_option_line("counterbore_hole_bridging", "quality_settings_bridging#bridge-counterbore-hole"); } { auto optgroup = page->new_optgroup(L("Overhangs"), L"param_overhang"); optgroup->append_single_option_line("detect_overhang_wall", "quality_settings_overhangs#detect-overhang-wall"); optgroup->append_single_option_line("make_overhang_printable", "quality_settings_overhangs#make-overhang-printable"); optgroup->append_single_option_line("make_overhang_printable_angle", "quality_settings_overhangs#maximum-angle"); optgroup->append_single_option_line("make_overhang_printable_hole_size", "quality_settings_overhangs#hole-area"); optgroup->append_single_option_line("extra_perimeters_on_overhangs", "quality_settings_overhangs#extra-perimeters-on-overhangs"); optgroup->append_single_option_line("overhang_reverse", "quality_settings_overhangs#reverse-on-even"); optgroup->append_single_option_line("overhang_reverse_internal_only", "quality_settings_overhangs#reverse-internal-only"); optgroup->append_single_option_line("overhang_reverse_threshold", "quality_settings_overhangs#reverse-threshold"); } auto page = tab.add_options_page(L("Strength"), "custom-gcode_strength"); { auto optgroup = page->new_optgroup(L("Walls"), L"param_wall"); optgroup->append_single_option_line("wall_loops", "strength_settings_walls#wall-loops"); optgroup->append_single_option_line("alternate_extra_wall", "strength_settings_walls#alternate-extra-wall"); optgroup->append_single_option_line("detect_thin_wall", "strength_settings_walls#detect-thin-wall"); } { auto optgroup = page->new_optgroup(L("Top/bottom shells"), L"param_shell"); optgroup->append_single_option_line("top_shell_layers", "strength_settings_top_bottom_shells#shell-layers"); optgroup->append_single_option_line("top_shell_thickness", "strength_settings_top_bottom_shells#shell-thickness"); optgroup->append_single_option_line("top_surface_density", "strength_settings_top_bottom_shells#surface-density"); optgroup->append_single_option_line("top_surface_pattern", "strength_settings_top_bottom_shells#surface-pattern"); optgroup->append_single_option_line("bottom_shell_layers", "strength_settings_top_bottom_shells#shell-layers"); optgroup->append_single_option_line("bottom_shell_thickness", "strength_settings_top_bottom_shells#shell-thickness"); optgroup->append_single_option_line("bottom_surface_density", "strength_settings_top_bottom_shells#surface-density"); optgroup->append_single_option_line("bottom_surface_pattern", "strength_settings_top_bottom_shells#surface-pattern"); optgroup->append_single_option_line("top_bottom_infill_wall_overlap", "strength_settings_top_bottom_shells#infillwall-overlap"); } { auto optgroup = page->new_optgroup(L("Infill"), L"param_infill"); optgroup->append_single_option_line("sparse_infill_density", "strength_settings_infill#sparse-infill-density"); optgroup->append_single_option_line("fill_multiline", "strength_settings_infill#fill-multiline"); optgroup->append_single_option_line("sparse_infill_pattern", "strength_settings_infill#sparse-infill-pattern"); optgroup->append_single_option_line("gyroid_optimized", "strength_settings_patterns#gyroid-optimized"); optgroup->append_single_option_line("infill_direction", "strength_settings_infill#direction"); optgroup->append_single_option_line("sparse_infill_rotate_template", "strength_settings_infill_rotation_template_metalanguage"); optgroup->append_single_option_line("skin_infill_density", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("skeleton_infill_density", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("infill_lock_depth", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("skin_infill_depth", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("skin_infill_line_width", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("skeleton_infill_line_width", "strength_settings_patterns#locked-zag"); optgroup->append_single_option_line("symmetric_infill_y_axis", "strength_settings_infill#symmetric-infill-y-axis"); optgroup->append_single_option_line("infill_shift_step", "strength_settings_patterns#cross-hatch"); optgroup->append_single_option_line("lateral_lattice_angle_1", "strength_settings_patterns#lateral-lattice"); optgroup->append_single_option_line("lateral_lattice_angle_2", "strength_settings_patterns#lateral-lattice"); optgroup->append_single_option_line("infill_overhang_angle", "strength_settings_patterns#lateral-honeycomb"); optgroup->append_single_option_line("infill_anchor_max", "strength_settings_infill#anchor"); optgroup->append_single_option_line("infill_anchor", "strength_settings_infill#anchor"); optgroup->append_single_option_line("internal_solid_infill_pattern", "strength_settings_infill#internal-solid-infill"); optgroup->append_single_option_line("solid_infill_direction", "strength_settings_infill#direction"); optgroup->append_single_option_line("solid_infill_rotate_template", "strength_settings_infill_rotation_template_metalanguage"); optgroup->append_single_option_line("gap_fill_target", "strength_settings_infill#apply-gap-fill"); optgroup->append_single_option_line("filter_out_gap_fill", "strength_settings_infill#filter-out-tiny-gaps"); optgroup->append_single_option_line("infill_wall_overlap", "strength_settings_infill#infill-wall-overlap"); } { auto optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("align_infill_direction_to_model", "strength_settings_advanced#align-infill-direction-to-model"); optgroup->append_single_option_line("extra_solid_infills", "strength_settings_infill#extra-solid-infill"); optgroup->append_single_option_line("bridge_angle", "strength_settings_advanced#bridge-infill-direction"); optgroup->append_single_option_line("internal_bridge_angle", "strength_settings_advanced#bridge-infill-direction"); optgroup->append_single_option_line("minimum_sparse_infill_area", "strength_settings_advanced#minimum-sparse-infill-threshold"); optgroup->append_single_option_line("infill_combination", "strength_settings_advanced#infill-combination"); optgroup->append_single_option_line("infill_combination_max_layer_height", "strength_settings_advanced#max-layer-height"); optgroup->append_single_option_line("detect_narrow_internal_solid_infill", "strength_settings_advanced#detect-narrow-internal-solid-infill"); optgroup->append_single_option_line("ensure_vertical_shell_thickness", "strength_settings_advanced#ensure-vertical-shell-thickness"); } auto page = tab.add_options_page(L("Speed"), "custom-gcode_speed"); { auto optgroup = page->new_optgroup(L("First layer speed"), L"param_speed_first", 15); optgroup->append_single_option_line("initial_layer_speed", "speed_settings_initial_layer_speed#initial-layer"); optgroup->append_single_option_line("initial_layer_infill_speed", "speed_settings_initial_layer_speed#initial-layer-infill"); optgroup->append_single_option_line("initial_layer_travel_speed", "speed_settings_initial_layer_speed#initial-layer-travel-speed"); optgroup->append_single_option_line("slow_down_layers", "speed_settings_initial_layer_speed#number-of-slow-layers"); } { auto optgroup = page->new_optgroup(L("Other layers speed"), L"param_speed", 15); optgroup->append_single_option_line("outer_wall_speed", "speed_settings_other_layers_speed#outer-wall"); optgroup->append_single_option_line("inner_wall_speed", "speed_settings_other_layers_speed#inner-wall"); optgroup->append_single_option_line("small_perimeter_speed", "speed_settings_other_layers_speed#small-perimeters"); optgroup->append_single_option_line("small_perimeter_threshold", "speed_settings_other_layers_speed#small-perimeters-threshold"); optgroup->append_single_option_line("sparse_infill_speed", "speed_settings_other_layers_speed#sparse-infill"); optgroup->append_single_option_line("internal_solid_infill_speed", "speed_settings_other_layers_speed#internal-solid-infill"); optgroup->append_single_option_line("top_surface_speed", "speed_settings_other_layers_speed#top-surface"); optgroup->append_single_option_line("gap_infill_speed", "speed_settings_other_layers_speed#gap-infill"); optgroup->append_single_option_line("ironing_speed", "speed_settings_other_layers_speed#ironing-speed"); optgroup->append_single_option_line("support_speed", "speed_settings_other_layers_speed#support"); optgroup->append_single_option_line("support_interface_speed", "speed_settings_other_layers_speed#support-interface"); } { auto optgroup = page->new_optgroup(L("Overhang speed"), L"param_overhang_speed", 15); optgroup->append_single_option_line("enable_overhang_speed", "speed_settings_overhang_speed#slow-down-for-overhang"); optgroup->append_single_option_line("slowdown_for_curled_perimeters", "speed_settings_overhang_speed#slow-down-for-curled-perimeters"); { Line line = {L("Overhang speed"), L("This is the speed for various overhang degrees. Overhang degrees are expressed as a percentage of line width. 0 speed means no slowing down for the overhang degree range and wall speed is used")}; line.label_path = "speed_settings_overhang_speed#speed"; line.append_option(optgroup->get_option("overhang_1_4_speed")); line.append_option(optgroup->get_option("overhang_2_4_speed")); line.append_option(optgroup->get_option("overhang_3_4_speed")); line.append_option(optgroup->get_option("overhang_4_4_speed")); optgroup->append_line(line); } optgroup->append_separator(); { Line line = {L("Bridge"), L("Set speed for external and internal bridges")}; line.append_option(optgroup->get_option("bridge_speed")); line.append_option(optgroup->get_option("internal_bridge_speed")); optgroup->append_line(line); } } { auto optgroup = page->new_optgroup(L("Travel speed"), L"param_travel_speed", 15); optgroup->append_single_option_line("travel_speed", "speed_settings_travel"); } { auto optgroup = page->new_optgroup(L("Acceleration"), L"param_acceleration", 15); optgroup->append_single_option_line("default_acceleration", "speed_settings_acceleration#normal-printing"); optgroup->append_single_option_line("outer_wall_acceleration", "speed_settings_acceleration#outer-wall"); optgroup->append_single_option_line("inner_wall_acceleration", "speed_settings_acceleration#inner-wall"); optgroup->append_single_option_line("bridge_acceleration", "speed_settings_acceleration#bridge"); optgroup->append_single_option_line("sparse_infill_acceleration", "speed_settings_acceleration#sparse-infill"); optgroup->append_single_option_line("internal_solid_infill_acceleration", "speed_settings_acceleration#internal-solid-infill"); optgroup->append_single_option_line("initial_layer_acceleration", "speed_settings_acceleration#initial-layer"); optgroup->append_single_option_line("initial_layer_travel_acceleration", "speed_settings_acceleration#initial-layer-travel"); optgroup->append_single_option_line("top_surface_acceleration", "speed_settings_acceleration#top-surface"); optgroup->append_single_option_line("travel_acceleration", "speed_settings_acceleration#travel"); optgroup->append_single_option_line("accel_to_decel_enable", "speed_settings_acceleration"); optgroup->append_single_option_line("accel_to_decel_factor", "speed_settings_acceleration"); } { auto optgroup = page->new_optgroup(L("Jerk(XY)"), L"param_jerk", 15); optgroup->append_single_option_line("default_junction_deviation", "speed_settings_jerk_xy#junction-deviation"); optgroup->append_single_option_line("default_jerk", "speed_settings_jerk_xy#default"); optgroup->append_single_option_line("outer_wall_jerk", "speed_settings_jerk_xy#outer-wall"); optgroup->append_single_option_line("inner_wall_jerk", "speed_settings_jerk_xy#inner-wall"); optgroup->append_single_option_line("infill_jerk", "speed_settings_jerk_xy#infill"); optgroup->append_single_option_line("top_surface_jerk", "speed_settings_jerk_xy#top-surface"); optgroup->append_single_option_line("initial_layer_jerk", "speed_settings_jerk_xy#initial-layer"); optgroup->append_single_option_line("initial_layer_travel_jerk", "speed_settings_jerk_xy#initial-layer-travel"); optgroup->append_single_option_line("travel_jerk", "speed_settings_jerk_xy#travel"); } { auto optgroup = page->new_optgroup(L("Advanced"), L"param_advanced", 15); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope", "speed_settings_advanced"); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_segment_length", "speed_settings_advanced"); optgroup->append_single_option_line("extrusion_rate_smoothing_external_perimeter_only", "speed_settings_advanced"); } auto page = tab.add_options_page(L("Support"), "custom-gcode_support"); { auto optgroup = page->new_optgroup(L("Support"), L"param_support"); optgroup->append_single_option_line("enable_support", "support_settings_support"); optgroup->append_single_option_line("support_type", "support_settings_support#type"); optgroup->append_single_option_line("support_style", "support_settings_support#style"); optgroup->append_single_option_line("support_threshold_angle", "support_settings_support#threshold-angle"); optgroup->append_single_option_line("support_threshold_overlap", "support_settings_support#threshold-overlap"); optgroup->append_single_option_line("raft_first_layer_density", "support_settings_support#initial-layer-density"); optgroup->append_single_option_line("raft_first_layer_expansion", "support_settings_support#initial-layer-expansion"); optgroup->append_single_option_line("support_on_build_plate_only", "support_settings_support#on-build-plate-only"); optgroup->append_single_option_line("support_critical_regions_only", "support_settings_support#support-critical-regions-only"); optgroup->append_single_option_line("support_remove_small_overhang", "support_settings_support#ignore-small-overhangs"); } { auto optgroup = page->new_optgroup(L("Raft"), L"param_raft"); optgroup->append_single_option_line("raft_layers", "support_settings_raft"); optgroup->append_single_option_line("raft_contact_distance", "support_settings_raft"); } { auto optgroup = page->new_optgroup(L("Support filament"), L"param_support_filament"); optgroup->append_single_option_line("support_filament", "support_settings_filament#base"); optgroup->append_single_option_line("support_interface_filament", "support_settings_filament#interface"); optgroup->append_single_option_line("support_interface_not_for_body", "support_settings_filament#avoid-interface-filament-for-base"); } { auto optgroup = page->new_optgroup(L("Support ironing"), L"param_ironing"); optgroup->append_single_option_line("support_ironing", "support_settings_ironing"); optgroup->append_single_option_line("support_ironing_pattern", "support_settings_ironing#pattern"); optgroup->append_single_option_line("support_ironing_flow", "support_settings_ironing#flow"); optgroup->append_single_option_line("support_ironing_spacing", "support_settings_ironing#line-spacing"); } { auto optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("support_top_z_distance", "support_settings_advanced#z-distance"); optgroup->append_single_option_line("support_bottom_z_distance", "support_settings_advanced#z-distance"); optgroup->append_single_option_line("tree_support_wall_count", "support_settings_advanced#support-wall-loops"); optgroup->append_single_option_line("support_base_pattern", "support_settings_advanced#base-pattern"); optgroup->append_single_option_line("support_base_pattern_spacing", "support_settings_advanced#base-pattern-spacing"); optgroup->append_single_option_line("support_angle", "support_settings_advanced#pattern-angle"); optgroup->append_single_option_line("support_interface_top_layers", "support_settings_advanced#interface-layers"); optgroup->append_single_option_line("support_interface_bottom_layers", "support_settings_advanced#interface-layers"); optgroup->append_single_option_line("support_interface_pattern", "support_settings_advanced#interface-pattern"); optgroup->append_single_option_line("support_interface_spacing", "support_settings_advanced#interface-spacing"); optgroup->append_single_option_line("support_bottom_interface_spacing", "support_settings_advanced#interface-spacing"); optgroup->append_single_option_line("support_expansion", "support_settings_advanced#normal-support-expansion"); optgroup->append_single_option_line("support_object_xy_distance", "support_settings_advanced#supportobject-xy-distance"); optgroup->append_single_option_line("support_object_first_layer_gap", "support_settings_advanced#supportobject-first-layer-gap"); optgroup->append_single_option_line("bridge_no_support", "support_settings_advanced#dont-support-bridges"); optgroup->append_single_option_line("max_bridge_length", "support_settings_advanced"); optgroup->append_single_option_line("independent_support_layer_height", "support_settings_advanced#independent-support-layer-height"); } { auto optgroup = page->new_optgroup(L("Tree supports"), L"param_support_tree"); optgroup->append_single_option_line("tree_support_tip_diameter", "support_settings_tree#tip-diameter"); optgroup->append_single_option_line("tree_support_branch_distance", "support_settings_tree#branch-distance"); optgroup->append_single_option_line("tree_support_branch_distance_organic", "support_settings_tree#branch-distance"); optgroup->append_single_option_line("tree_support_top_rate", "support_settings_tree#branch-density"); optgroup->append_single_option_line("tree_support_branch_diameter", "support_settings_tree#branch-diameter"); optgroup->append_single_option_line("tree_support_branch_diameter_organic", "support_settings_tree#branch-diameter"); optgroup->append_single_option_line("tree_support_branch_diameter_angle", "support_settings_tree#branch-diameter-angle"); optgroup->append_single_option_line("tree_support_branch_angle", "support_settings_tree#branch-angle"); optgroup->append_single_option_line("tree_support_branch_angle_organic", "support_settings_tree#branch-angle"); optgroup->append_single_option_line("tree_support_angle_slow", "support_settings_tree#preferred-branch-angle"); optgroup->append_single_option_line("tree_support_auto_brim", "support_settings_tree"); optgroup->append_single_option_line("tree_support_brim_width", "support_settings_tree"); } auto page = tab.add_options_page(L("Multimaterial"), "custom-gcode_multi_material"); { auto optgroup = page->new_optgroup(L("Prime tower"), L"param_tower"); optgroup->append_single_option_line("enable_prime_tower", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("prime_tower_skip_points", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("enable_tower_interface_features", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("enable_tower_interface_cooldown_during_tower", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("prime_tower_enable_framework", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("prime_tower_width", "multimaterial_settings_prime_tower#width"); optgroup->append_single_option_line("prime_volume", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("prime_tower_brim_width", "multimaterial_settings_prime_tower#brim-width"); optgroup->append_single_option_line("prime_tower_infill_gap", "multimaterial_settings_prime_tower"); optgroup->append_single_option_line("wipe_tower_rotation_angle", "multimaterial_settings_prime_tower#wipe-tower-rotation-angle"); optgroup->append_single_option_line("wipe_tower_bridging", "multimaterial_settings_prime_tower#maximal-bridging-distance"); optgroup->append_single_option_line("wipe_tower_extra_spacing", "multimaterial_settings_prime_tower#wipe-tower-purge-lines-spacing"); optgroup->append_single_option_line("wipe_tower_extra_flow", "multimaterial_settings_prime_tower#extra-flow-for-purge"); optgroup->append_single_option_line("wipe_tower_max_purge_speed", "multimaterial_settings_prime_tower#maximum-wipe-tower-print-speed"); optgroup->append_single_option_line("wipe_tower_wall_type", "multimaterial_settings_prime_tower#wall-type"); optgroup->append_single_option_line("wipe_tower_cone_angle", "multimaterial_settings_prime_tower#stabilization-cone-apex-angle"); optgroup->append_single_option_line("wipe_tower_extra_rib_length", "multimaterial_settings_prime_tower#extra-rib-length"); optgroup->append_single_option_line("wipe_tower_rib_width", "multimaterial_settings_prime_tower#rib-width"); optgroup->append_single_option_line("wipe_tower_fillet_wall", "multimaterial_settings_prime_tower#fillet-wall"); optgroup->append_single_option_line("wipe_tower_no_sparse_layers", "multimaterial_settings_prime_tower#no-sparse-layers"); optgroup->append_single_option_line("single_extruder_multi_material_priming", "multimaterial_settings_prime_tower"); } { auto optgroup = page->new_optgroup(L("Filament for Features"), L"param_filament_for_features"); optgroup->append_single_option_line("wall_filament", "multimaterial_settings_filament_for_features#walls"); optgroup->append_single_option_line("sparse_infill_filament", "multimaterial_settings_filament_for_features#infill"); optgroup->append_single_option_line("solid_infill_filament", "multimaterial_settings_filament_for_features#solid-infill"); optgroup->append_single_option_line("wipe_tower_filament", "multimaterial_settings_filament_for_features#wipe-tower"); } { auto optgroup = page->new_optgroup(L("Ooze prevention"), L"param_ooze_prevention"); optgroup->append_single_option_line("ooze_prevention", "multimaterial_settings_ooze_prevention"); optgroup->append_single_option_line("standby_temperature_delta", "multimaterial_settings_ooze_prevention#temperature-variation"); optgroup->append_single_option_line("preheat_time", "multimaterial_settings_ooze_prevention#preheat-time"); optgroup->append_single_option_line("preheat_steps", "multimaterial_settings_ooze_prevention#preheat-steps"); } { auto optgroup = page->new_optgroup(L("Flush options"), L"param_flush"); optgroup->append_single_option_line("flush_into_infill", "multimaterial_settings_flush_options#flush-into-objects-infill"); optgroup->append_single_option_line("flush_into_objects", "multimaterial_settings_flush_options"); optgroup->append_single_option_line("flush_into_support", "multimaterial_settings_flush_options#flush-into-objects-support"); } { auto optgroup = page->new_optgroup(L("Advanced"), L"advanced"); optgroup->append_single_option_line("interlocking_beam", "multimaterial_settings_advanced#interlocking-beam"); optgroup->append_single_option_line("interface_shells", "multimaterial_settings_advanced#interface-shells"); optgroup->append_single_option_line("mmu_segmented_region_max_width", "multimaterial_settings_advanced#maximum-width-of-segmented-region"); optgroup->append_single_option_line("mmu_segmented_region_interlocking_depth", "multimaterial_settings_advanced#interlocking-depth-of-segmented-region"); optgroup->append_single_option_line("interlocking_beam_width", "multimaterial_settings_advanced#interlocking-beam-width"); optgroup->append_single_option_line("interlocking_orientation", "multimaterial_settings_advanced#interlocking-direction"); optgroup->append_single_option_line("interlocking_beam_layer_count", "multimaterial_settings_advanced#interlocking-beam-layers"); optgroup->append_single_option_line("interlocking_depth", "multimaterial_settings_advanced#interlocking-depth"); optgroup->append_single_option_line("interlocking_boundary_avoidance", "multimaterial_settings_advanced#interlocking-boundary-avoidance"); } auto page = tab.add_options_page(L("Others"), "custom-gcode_other"); { auto optgroup = page->new_optgroup(L("Skirt"), L"param_skirt"); optgroup->append_single_option_line("skirt_loops", "others_settings_skirt#loops"); optgroup->append_single_option_line("skirt_type", "others_settings_skirt#type"); optgroup->append_single_option_line("min_skirt_length", "others_settings_skirt#minimum-extrusion-length"); optgroup->append_single_option_line("skirt_distance", "others_settings_skirt#distance"); optgroup->append_single_option_line("skirt_start_angle", "others_settings_skirt#start-point"); optgroup->append_single_option_line("skirt_speed", "others_settings_skirt#speed"); optgroup->append_single_option_line("skirt_height", "others_settings_skirt#height"); optgroup->append_single_option_line("draft_shield", "others_settings_skirt#shield"); optgroup->append_single_option_line("single_loop_draft_shield", "others_settings_skirt#single-loop-after-first-layer"); } { auto optgroup = page->new_optgroup(L("Brim"), L"param_adhension"); optgroup->append_single_option_line("brim_type", "others_settings_brim#type"); optgroup->append_single_option_line("brim_width", "others_settings_brim#width"); optgroup->append_single_option_line("brim_object_gap", "others_settings_brim#brim-object-gap"); optgroup->append_single_option_line("brim_flow_ratio", "others_settings_brim#brim-flow-ratio"); optgroup->append_single_option_line("brim_use_efc_outline", "others_settings_brim#brim-use-efc-outline"); optgroup->append_single_option_line("combine_brims", "others_settings_brim#combine-brims"); optgroup->append_single_option_line("brim_ears_max_angle", "others_settings_brim#ear-max-angle"); optgroup->append_single_option_line("brim_ears_detection_length", "others_settings_brim#ear-detection-radius"); } { auto optgroup = page->new_optgroup(L("Special mode"), L"param_special"); optgroup->append_single_option_line("slicing_mode", "others_settings_special_mode#slicing-mode"); optgroup->append_single_option_line("print_sequence", "others_settings_special_mode#print-sequence"); optgroup->append_single_option_line("print_order", "others_settings_special_mode#intra-layer-order"); optgroup->append_single_option_line("spiral_mode", "others_settings_special_mode#spiral-vase"); optgroup->append_single_option_line("spiral_mode_smooth", "others_settings_special_mode#smooth-spiral"); optgroup->append_single_option_line("spiral_mode_max_xy_smoothing", "others_settings_special_mode#max-xy-smoothing"); optgroup->append_single_option_line("spiral_starting_flow_ratio", "others_settings_special_mode#spiral-starting-flow-ratio"); optgroup->append_single_option_line("spiral_finishing_flow_ratio", "others_settings_special_mode#spiral-finishing-flow-ratio"); optgroup->append_single_option_line("timelapse_type", "others_settings_special_mode#timelapse"); optgroup->append_single_option_line("enable_wrapping_detection"); } { auto optgroup = page->new_optgroup(L("Fuzzy Skin"), L"fuzzy_skin"); optgroup->append_single_option_line("fuzzy_skin", "others_settings_fuzzy_skin"); optgroup->append_single_option_line("fuzzy_skin_mode", "others_settings_fuzzy_skin#fuzzy-skin-mode"); optgroup->append_single_option_line("fuzzy_skin_noise_type", "others_settings_fuzzy_skin#noise-type"); optgroup->append_single_option_line("fuzzy_skin_point_distance", "others_settings_fuzzy_skin#point-distance"); optgroup->append_single_option_line("fuzzy_skin_thickness", "others_settings_fuzzy_skin#skin-thickness"); optgroup->append_single_option_line("fuzzy_skin_scale", "others_settings_fuzzy_skin#skin-feature-size"); optgroup->append_single_option_line("fuzzy_skin_octaves", "others_settings_fuzzy_skin#skin-noise-octaves"); optgroup->append_single_option_line("fuzzy_skin_persistence", "others_settings_fuzzy_skin#skin-noise-persistence"); optgroup->append_single_option_line("fuzzy_skin_ripples_per_layer", "others_settings_fuzzy_skin#ripples-per-layer"); optgroup->append_single_option_line("fuzzy_skin_ripple_offset", "others_settings_fuzzy_skin#ripple-offset"); optgroup->append_single_option_line("fuzzy_skin_layers_between_ripple_offset", "others_settings_fuzzy_skin#layers-between-ripple-offset"); optgroup->append_single_option_line("fuzzy_skin_first_layer", "others_settings_fuzzy_skin#apply-fuzzy-skin-to-first-layer"); } { auto optgroup = page->new_optgroup(L("G-code output"), L"param_gcode"); optgroup->append_single_option_line("reduce_infill_retraction", "others_settings_g_code_output#reduce-infill-retraction"); optgroup->append_single_option_line("gcode_add_line_number", "others_settings_g_code_output#add-line-number"); optgroup->append_single_option_line("gcode_comments", "others_settings_g_code_output#verbose-g-code"); optgroup->append_single_option_line("gcode_label_objects", "others_settings_g_code_output#label-objects"); optgroup->append_single_option_line("exclude_object", "others_settings_g_code_output#exclude-objects"); { Option option = optgroup->get_option("filename_format"); option.opt.is_code = true; option.opt.multiline = true; optgroup->append_single_option_line(option, "others_settings_g_code_output#filename-format"); } } { auto optgroup = page->new_optgroup(L("Change extrusion role G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("process_change_extrusion_role_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = 15; optgroup->append_single_option_line(option); } } { auto optgroup = page->new_optgroup(L("Post-processing Scripts"), L"param_gcode", 0); { Option option = optgroup->get_option("post_process"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = 15; optgroup->append_single_option_line(option, "others_settings_post_processing_scripts"); } } { auto optgroup = page->new_optgroup(L("Notes"), L"note", 0); { Option option = optgroup->get_option("notes"); option.opt.full_width = true; option.opt.height = 25; optgroup->append_single_option_line(option, "others_settings_notes"); } } } inline void TabFilament_build_layout(TabFilament& tab) { auto page = tab.add_options_page(L("Filament"), "custom-gcode_filament"); { auto optgroup = page->new_optgroup(L("Basic information"), L"param_information"); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->append_single_option_line("filament_type", "material_basic_information#type"); optgroup->append_single_option_line("filament_vendor", "material_basic_information#vendor"); optgroup->append_single_option_line("filament_soluble", "material_basic_information#soluble-material"); optgroup->append_single_option_line("filament_is_support", "material_basic_information#support-material"); optgroup->append_single_option_line("filament_change_length", "material_basic_information#filament-ramming-length"); optgroup->append_single_option_line("required_nozzle_HRC", "material_basic_information#required-nozzle-hrc"); optgroup->append_single_option_line("default_filament_colour", "material_basic_information#default-color"); optgroup->append_single_option_line("filament_diameter", "material_basic_information#diameter"); optgroup->append_single_option_line("filament_adhesiveness_category", "material_basic_information#adhesiveness-category"); optgroup->append_single_option_line("filament_density", "material_basic_information#density"); optgroup->append_single_option_line("filament_shrink", "material_basic_information#shrinkage-xy"); optgroup->append_single_option_line("filament_shrinkage_compensation_z", "material_basic_information#shrinkage-z"); optgroup->append_single_option_line("filament_cost", "material_basic_information#price"); optgroup->append_single_option_line("temperature_vitrification", "material_basic_information#softening-temperature"); optgroup->append_single_option_line("idle_temperature", "material_basic_information#idle-temperature"); { Line line = {L("Recommended nozzle temperature"), L("Recommended nozzle temperature range of this filament. 0 means no set")}; line.append_option(optgroup->get_option("nozzle_temperature_range_low")); line.append_option(optgroup->get_option("nozzle_temperature_range_high")); optgroup->append_line(line); } } { auto optgroup = page->new_optgroup(L("Flow ratio and Pressure Advance"), L"param_flow_ratio_and_pressure_advance"); optgroup->append_single_option_line("pellet_flow_coefficient", "printer_basic_information_advanced#pellet-modded-printer"); optgroup->append_single_option_line("filament_flow_ratio", "material_flow_ratio_and_pressure_advance#flow-ratio"); optgroup->append_single_option_line("enable_pressure_advance", "material_flow_ratio_and_pressure_advance#pressure-advance"); optgroup->append_single_option_line("pressure_advance", "material_flow_ratio_and_pressure_advance#pressure-advance"); optgroup->append_single_option_line("adaptive_pressure_advance", "material_flow_ratio_and_pressure_advance#enable-adaptive-pressure-advance-beta"); optgroup->append_single_option_line("adaptive_pressure_advance_overhangs", "material_flow_ratio_and_pressure_advance#enable-adaptive-pressure-advance-for-overhangs-beta"); optgroup->append_single_option_line("adaptive_pressure_advance_bridges", "material_flow_ratio_and_pressure_advance#pressure-advance-for-bridges"); { Option option = optgroup->get_option("adaptive_pressure_advance_model"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = 15; optgroup->append_single_option_line(option); } } { auto optgroup = page->new_optgroup(L("Print chamber temperature"), L"param_chamber_temp"); optgroup->append_single_option_line("activate_chamber_temp_control", "material_temperatures#print-chamber-temperature"); optgroup->append_single_option_line("chamber_temperature", "material_temperatures#print-chamber-temperature"); } { auto optgroup = page->new_optgroup(L("Print temperature"), L"param_extruder_temp"); { Line line = {L("Nozzle"), L("Nozzle temperature when printing")}; line.label_path = "material_temperatures#nozzle"; line.append_option(optgroup->get_option("nozzle_temperature_initial_layer")); line.append_option(optgroup->get_option("nozzle_temperature")); optgroup->append_line(line); } } { auto optgroup = page->new_optgroup(L("Bed temperature"), L"param_bed_temp"); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; } { auto optgroup = page->new_optgroup(L("Volumetric speed limitation"), L"param_volumetric_speed"); optgroup->append_single_option_line("filament_adaptive_volumetric_speed", "material_volumetric_speed_limitation#adaptive-volumetric-speed"); optgroup->append_single_option_line("filament_max_volumetric_speed", "material_volumetric_speed_limitation#max-volumetric-speed"); } auto page = tab.add_options_page(L("Cooling"), "custom-gcode_cooling_fan"); { auto optgroup = page->new_optgroup(L("Cooling for specific layer"), L"param_cooling_specific_layer"); optgroup->append_single_option_line("close_fan_the_first_x_layers", "material_cooling#no-cooling-for-the-first"); optgroup->append_single_option_line("full_fan_speed_layer", "material_cooling#full-fan-speed-at-layer"); } { auto optgroup = page->new_optgroup(L("Part cooling fan"), L"param_cooling_part_fan"); { Line line = {L("Min fan speed threshold"), L("Part cooling fan speed will start to run at min speed when the estimated layer time is no longer than the layer time in setting. When layer time is shorter than threshold, fan speed is interpolated between the minimum and maximum fan speed according to layer printing time")}; line.label_path = "material_cooling#material-part-cooling-fan"; line.append_option(optgroup->get_option("fan_min_speed")); line.append_option(optgroup->get_option("fan_cooling_layer_time")); optgroup->append_line(line); } { Line line = {L("Max fan speed threshold"), L("Part cooling fan speed will be max when the estimated layer time is shorter than the setting value")}; line.label_path = "material_cooling#material-part-cooling-fan"; line.append_option(optgroup->get_option("fan_max_speed")); line.append_option(optgroup->get_option("slow_down_layer_time")); optgroup->append_line(line); } optgroup->append_single_option_line("reduce_fan_stop_start_freq", "material_cooling#keep-fan-always-on"); optgroup->append_single_option_line("slow_down_for_layer_cooling", "material_cooling#slow-printing-down-for-better-layer-cooling"); optgroup->append_single_option_line("dont_slow_down_outer_wall", "material_cooling#dont-slow-down-outer-walls"); optgroup->append_single_option_line("slow_down_min_speed", "material_cooling#min-print-speed"); optgroup->append_single_option_line("enable_overhang_bridge_fan", "material_cooling#force-cooling-for-overhangs-and-bridges"); optgroup->append_single_option_line("overhang_fan_threshold", "material_cooling#overhang-cooling-activation-threshold"); optgroup->append_single_option_line("overhang_fan_speed", "material_cooling#overhangs-and-external-bridges-fan-speed"); optgroup->append_single_option_line("internal_bridge_fan_speed", "material_cooling#internal-bridges-fan-speed"); optgroup->append_single_option_line("support_material_interface_fan_speed", "material_cooling#support-interface-fan-speed"); optgroup->append_single_option_line("ironing_fan_speed", "material_cooling#ironing-fan-speed"); } { auto optgroup = page->new_optgroup(L("Auxiliary part cooling fan"), L"param_cooling_aux_fan"); optgroup->append_single_option_line("additional_cooling_fan_speed", "material_cooling#auxiliary-part-cooling-fan"); } { auto optgroup = page->new_optgroup(L("Exhaust fan"), L"param_cooling_exhaust"); optgroup->append_single_option_line("activate_air_filtration", "material_cooling#activate-air-filtration"); } auto page = tab.add_options_page(L("Advanced"), "custom-gcode_advanced"); { auto optgroup = page->new_optgroup(L("Filament start G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("filament_start_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option); } } { auto optgroup = page->new_optgroup(L("Change extrusion role G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("filament_change_extrusion_role_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option); } } { auto optgroup = page->new_optgroup(L("Filament end G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("filament_end_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option); } } auto page = tab.add_options_page(L("Multimaterial"), "custom-gcode_multi_material"); { auto optgroup = page->new_optgroup(L("Wipe tower parameters"), L"param_tower"); optgroup->append_single_option_line("filament_minimal_purge_on_wipe_tower", "material_multimaterial#multimaterial-wipe-tower-parameters"); optgroup->append_single_option_line("filament_tower_interface_pre_extrusion_dist", "material_multimaterial#multimaterial-wipe-tower-parameters"); optgroup->append_single_option_line("filament_tower_interface_pre_extrusion_length", "material_multimaterial#multimaterial-wipe-tower-parameters"); optgroup->append_single_option_line("filament_tower_ironing_area", "material_multimaterial#multimaterial-wipe-tower-parameters"); optgroup->append_single_option_line("filament_tower_interface_purge_volume", "material_multimaterial#multimaterial-wipe-tower-parameters"); optgroup->append_single_option_line("filament_tower_interface_print_temp", "material_multimaterial#multimaterial-wipe-tower-parameters"); } { auto optgroup = page->new_optgroup(L("Multi Filament")); optgroup->append_single_option_line("long_retractions_when_ec", "material_multimaterial#multi-filament"); optgroup->append_single_option_line("retraction_distances_when_ec", "material_multimaterial#multi-filament"); } { auto optgroup = page->new_optgroup(L("Tool change parameters with single extruder MM printers"), L"param_toolchange"); optgroup->append_single_option_line("filament_loading_speed_start", "material_multimaterial#loading-speed-at-the-start"); optgroup->append_single_option_line("filament_loading_speed", "material_multimaterial#loading-speed"); optgroup->append_single_option_line("filament_unloading_speed_start", "material_multimaterial#unloading-speed-at-the-start"); optgroup->append_single_option_line("filament_unloading_speed", "material_multimaterial#unloading-speed"); optgroup->append_single_option_line("filament_toolchange_delay", "material_multimaterial#delay-after-unloading"); optgroup->append_single_option_line("filament_cooling_moves", "material_multimaterial#number-of-cooling-moves"); optgroup->append_single_option_line("filament_cooling_initial_speed", "material_multimaterial#speed-of-the-first-cooling-move"); optgroup->append_single_option_line("filament_cooling_final_speed", "material_multimaterial#speed-of-the-last-cooling-move"); optgroup->append_single_option_line("filament_stamping_loading_speed", "material_multimaterial#stamping-loading-speed"); optgroup->append_single_option_line("filament_stamping_distance", "material_multimaterial#stamping-distance"); } { auto optgroup = page->new_optgroup(L("Tool change parameters with multi extruder MM printers"), L"param_toolchange_multi_extruder"); optgroup->append_single_option_line("filament_multitool_ramming", "material_multimaterial#tool-change-parameters-with-multi-extruder"); optgroup->append_single_option_line("filament_multitool_ramming_volume", "material_multimaterial#multi-tool-ramming-volume"); optgroup->append_single_option_line("filament_multitool_ramming_flow", "material_multimaterial#multi-tool-ramming-flow"); } auto page = tab.add_options_page(L("Dependencies"), "advanced"); { auto optgroup = page->new_optgroup(L("Compatible printers"), L"param_dependencies_printers"); { Option option = optgroup->get_option("compatible_printers_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option, "material_dependencies#compatible-printers"); } } { auto optgroup = page->new_optgroup(L("Compatible process profiles"), L"param_dependencies_presets"); { Option option = optgroup->get_option("compatible_prints_condition"); option.opt.full_width = true; optgroup->append_single_option_line(option, "material_dependencies#compatible-process-profiles"); } } auto page = tab.add_options_page(L("Notes"), "custom-gcode_note"); { auto optgroup = page->new_optgroup(L("Notes"), L"note", 0); { Option option = optgroup->get_option("filament_notes"); option.opt.full_width = true; option.opt.height = notes_field_height; optgroup->append_single_option_line(option); } } } inline void TabPrinter_build_fff_layout(TabPrinter& tab) { auto page = tab.add_options_page(L("Basic information"), "custom-gcode_object-info"); { auto optgroup = page->new_optgroup(L("Printable space"), L"param_printable_space"); { Option option = optgroup->get_option("bed_exclude_area"); option.opt.full_width = true; optgroup->append_single_option_line(option, "printer_basic_information_printable_space#excluded-bed-area"); } optgroup->append_single_option_line("printable_height", "printer_basic_information_printable_space#printable-height"); optgroup->append_single_option_line("support_multi_bed_types", "printer_basic_information_printable_space#support-multi-bed-types"); optgroup->append_single_option_line("best_object_pos", "printer_basic_information_printable_space#best-object-position"); optgroup->append_single_option_line("z_offset", "printer_basic_information_printable_space#z-offset"); optgroup->append_single_option_line("preferred_orientation", "printer_basic_information_printable_space#preferred-orientation"); } { auto optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->append_single_option_line("printer_structure", "printer_basic_information_advanced#printer-structure"); optgroup->append_single_option_line("gcode_flavor", "printer_basic_information_advanced#g-code-flavor"); optgroup->append_single_option_line("pellet_modded_printer", "printer_basic_information_advanced#pellet-modded-printer"); optgroup->append_single_option_line("bbl_use_printhost", "printer_basic_information_advanced#use-3rd-party-print-host"); optgroup->append_single_option_line("scan_first_layer", "printer_basic_information_advanced#scan-first-layer"); optgroup->append_single_option_line("enable_power_loss_recovery", "printer_basic_information_advanced#power-loss-recovery"); optgroup->append_single_option_line("disable_m73", "printer_basic_information_advanced#disable-set-remaining-print-time"); { Option option = optgroup->get_option("thumbnails"); option.opt.full_width = true; optgroup->append_single_option_line(option, "printer_basic_information_advanced#g-code-thumbnails"); } optgroup->append_single_option_line("use_relative_e_distances", "printer_basic_information_advanced#use-relative-e-distances"); optgroup->append_single_option_line("use_firmware_retraction", "printer_basic_information_advanced#use-firmware-retraction"); optgroup->append_single_option_line("time_cost", "printer_basic_information_advanced#time-cost"); } { auto optgroup = page->new_optgroup(L("Cooling Fan"), L"param_cooling_fan"); optgroup->append_single_option_line("fan_kickstart", "printer_basic_information_cooling_fan#fan-kick-start-time"); optgroup->append_single_option_line("part_cooling_fan_min_pwm", "printer_basic_information_cooling_fan#minimum-non-zero-part-cooling-fan-speed"); } { auto optgroup = page->new_optgroup(L("Extruder Clearance"), L"param_extruder_clearance"); optgroup->append_single_option_line("extruder_clearance_radius", "printer_basic_information_extruder_clearance#radius"); optgroup->append_single_option_line("extruder_clearance_height_to_rod", "printer_basic_information_extruder_clearance#height-to-rod"); optgroup->append_single_option_line("extruder_clearance_height_to_lid", "printer_basic_information_extruder_clearance#height-to-lid"); } { auto optgroup = page->new_optgroup(L("Adaptive bed mesh"), L"param_adaptive_mesh"); optgroup->append_single_option_line("bed_mesh_min", "printer_basic_information_adaptive_bed_mesh#bed-mesh"); optgroup->append_single_option_line("bed_mesh_max", "printer_basic_information_adaptive_bed_mesh#bed-mesh"); optgroup->append_single_option_line("bed_mesh_probe_distance", "printer_basic_information_adaptive_bed_mesh#probe-point-distance"); optgroup->append_single_option_line("adaptive_bed_mesh_margin", "printer_basic_information_adaptive_bed_mesh#mesh-margin"); } { auto optgroup = page->new_optgroup(L("Accessory"), L"param_accessory"); optgroup->append_single_option_line("nozzle_type", "printer_basic_information_accessory#nozzle-type"); optgroup->append_single_option_line("nozzle_hrc", "printer_basic_information_accessory#nozzle-hrc"); optgroup->append_single_option_line("auxiliary_fan", "printer_basic_information_accessory#auxiliary-part-cooling-fan"); optgroup->append_single_option_line("support_chamber_temp_control", "printer_basic_information_accessory#support-controlling-chamber-temperature"); optgroup->append_single_option_line("support_air_filtration", "printer_basic_information_accessory#support-air-filtration"); } auto page = tab.add_options_page(L("Machine G-code"), "custom-gcode_gcode"); { auto optgroup = page->new_optgroup(L("File header G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("file_start_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = 8; optgroup->append_single_option_line(option); } } { auto optgroup = page->new_optgroup(L("Machine start G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("machine_start_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#machine-start-g-code"); } } { auto optgroup = page->new_optgroup(L("Machine end G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("machine_end_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#machine-end-g-code"); } } { auto optgroup = page->new_optgroup(L("Printing by object G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("printing_by_object_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#printing-by-object-g-code"); } } { auto optgroup = page->new_optgroup(L("Before layer change G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("before_layer_change_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#before-layer-change-g-code"); } } { auto optgroup = page->new_optgroup(L("Layer change G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("layer_change_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#layer-change-g-code"); } } { auto optgroup = page->new_optgroup(L("Timelapse G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("time_lapse_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#timelapse-g-code"); } } { auto optgroup = page->new_optgroup(L("Clumping Detection G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("wrapping_detection_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#clumping-detection-g-code"); } } { auto optgroup = page->new_optgroup(L("Change filament G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("change_filament_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#change-filament-g-code"); } } { auto optgroup = page->new_optgroup(L("Change extrusion role G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("change_extrusion_role_gcode"); option.opt.full_width = true; option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#change-extrusion-role-g-code"); } } { auto optgroup = page->new_optgroup(L("Pause G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("machine_pause_gcode"); option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#pause-g-code"); } } { auto optgroup = page->new_optgroup(L("Template Custom G-code"), L"param_gcode", 0); optgroup->m_on_change = [&tab, &optgroup_title = optgroup->title](const t_config_option_key& opt_key, const boost::any& value) { validate_custom_gcode_cb(&tab, optgroup_title, opt_key, value); }; optgroup->edit_custom_gcode = [&tab](const t_config_option_key& opt_key) { tab.edit_custom_gcode(opt_key); }; { Option option = optgroup->get_option("template_custom_gcode"); option.opt.is_code = true; option.opt.height = gcode_field_height; optgroup->append_single_option_line(option, "printer_machine_gcode#template-custom-g-code"); } } auto page = tab.add_options_page(L("Notes"), "custom-gcode_note"); { auto optgroup = page->new_optgroup(L("Notes"), L"note", 0); { Option option = optgroup->get_option("printer_notes"); option.opt.full_width = true; option.opt.height = notes_field_height; optgroup->append_single_option_line(option); } } } inline void TabPrinter_build_kinematics_layout(TabPrinter& tab) { auto page = tab.add_options_page(L("Motion ability"), "custom-gcode_motion"); { auto optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("emit_machine_limits_to_gcode", "printer_motion_ability#emit-limits-to-g-code"); } { auto optgroup = page->new_optgroup(L("Resonance Compensation"), L"param_resonance_avoidance"); optgroup->append_single_option_line("resonance_avoidance", "printer_motion_ability#resonance-avoidance"); optgroup->append_single_option_line("input_shaping_emit", "printer_motion_ability#input-shaping"); optgroup->append_single_option_line("input_shaping_type", "printer_motion_ability#input-shaping-type"); } { auto optgroup = page->new_optgroup(L("Speed limitation"), L"param_speed"); } { auto optgroup = page->new_optgroup(L("Acceleration limitation"), L"param_acceleration"); } { auto optgroup = page->new_optgroup(L("Jerk limitation"), L"param_jerk"); } }