three-slicer-viewer 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPONENTS.md +44 -0
- package/LICENSE +21 -0
- package/README.md +77 -0
- package/THIRD-PARTY-NOTICES.md +19 -0
- package/TOOLPATH_SPEC.md +173 -0
- package/VIEWER.md +423 -0
- package/data/config-schema-lean.json +1 -0
- package/data/preset-keys.json +1 -0
- package/data/ui-tree-keys.json +1 -0
- package/dist/components.js +206 -0
- package/dist/gcode_parse.js +190 -0
- package/dist/index.js +6416 -0
- package/dist/make_worker.js +26 -0
- package/dist/model_loaders.js +183 -0
- package/dist/parse_3mf-CQ5rAX6P.js +299 -0
- package/dist/parse_3mf.worker.js +10 -0
- package/dist/sl1_encode.worker.js +10 -0
- package/dist/sl1_write-CvrNejbW.js +302 -0
- package/dist/sla_reconstruct-CXkYhux2.js +176 -0
- package/dist/sla_reconstruct.worker.js +24 -0
- package/dist/sla_slice.worker.js +73 -0
- package/dist/toolpath.js +408 -0
- package/package.json +83 -0
- package/src/data.js +2 -0
- package/src/settings/data.js +6 -0
- package/src/settings/index.js +2 -0
- package/src/settings/kernel_setting_keys.js +132 -0
- package/src/settings/preset_file.js +99 -0
- package/src/settings/settings_core.js +638 -0
- package/src/settings/toggle_eval.js +90 -0
- package/types/components.d.ts +39 -0
- package/types/data.d.ts +3 -0
- package/types/gcode.d.ts +29 -0
- package/types/index.d.ts +7 -0
- package/types/loaders.d.ts +33 -0
- package/types/settings-keys.d.ts +1855 -0
- package/types/settings.d.ts +173 -0
- package/types/toggle.d.ts +30 -0
- package/types/toolpath.d.ts +138 -0
- package/types/viewer.d.ts +256 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"printer":["printer_technology","printable_area","extruder_printable_area","support_parallel_printheads","parallel_printheads_count","parallel_printheads_bed_exclude_areas","bed_exclude_area","bed_custom_texture","bed_custom_model","gcode_flavor","fan_kickstart","part_cooling_fan_min_pwm","fan_speedup_time","fan_speedup_overhangs","single_extruder_multi_material","manual_filament_change","file_start_gcode","machine_start_gcode","machine_end_gcode","before_layer_change_gcode","printing_by_object_gcode","layer_change_gcode","time_lapse_gcode","wrapping_detection_gcode","change_filament_gcode","change_extrusion_role_gcode","printer_model","printer_variant","printer_extruder_id","printer_extruder_variant","extruder_variant_list","default_nozzle_volume_type","printable_height","extruder_printable_height","extruder_clearance_radius","extruder_clearance_height_to_lid","extruder_clearance_height_to_rod","nozzle_height","master_extruder_id","default_print_profile","inherits","silent_mode","scan_first_layer","enable_power_loss_recovery","wrapping_detection_layers","wrapping_exclude_area","machine_load_filament_time","machine_unload_filament_time","machine_tool_change_time","time_cost","machine_pause_gcode","template_custom_gcode","nozzle_type","nozzle_hrc","auxiliary_fan","fan_direction","nozzle_volume","upward_compatible_machine","z_hop_types","travel_slope","retract_lift_enforce","support_chamber_temp_control","support_air_filtration","support_cooling_filter","cooling_filter_enabled","printer_structure","farthest_point_timelapse","best_object_pos","head_wrap_detect_zone","host_type","print_host","printhost_apikey","flashforge_serial_number","bbl_use_printhost","printer_agent","print_host_webui","printhost_cafile","printhost_port","printhost_authorization_type","printhost_user","printhost_password","printhost_ssl_ignore_revoke","thumbnails","thumbnails_format","use_relative_e_distances","extruder_type","use_firmware_retraction","printer_notes","grab_length","support_object_skip_flush","physical_extruder_map","cooling_tube_retraction","cooling_tube_length","high_current_on_filament_swap","parking_pos_retraction","extra_loading_move","wipe_tower_type","purge_in_prime_tower","enable_filament_ramming","tool_change_on_wipe_tower","z_offset","disable_m73","preferred_orientation","emit_machine_limits_to_gcode","pellet_modded_printer","support_multi_bed_types","use_3mf","default_bed_type","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance","adaptive_bed_mesh_margin","enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut","bed_temperature_formula","nozzle_flush_dataset","extruder_max_nozzle_count","group_algo_with_time","enable_pre_heating","hotend_heating_rate","hotend_cooling_rate","machine_hotend_change_time","machine_prepare_compensation_time","support_fast_purge_mode","deretract_speed_extruder_change","machine_max_acceleration_extruding","machine_max_acceleration_retracting","machine_max_acceleration_travel","machine_max_acceleration_x","machine_max_acceleration_y","machine_max_acceleration_z","machine_max_acceleration_e","machine_max_speed_x","machine_max_speed_y","machine_max_speed_z","machine_max_speed_e","machine_min_extruding_rate","machine_min_travel_rate","machine_max_jerk_x","machine_max_jerk_y","machine_max_jerk_z","machine_max_jerk_e","machine_max_junction_deviation","machine_max_printed_mass","resonance_avoidance","min_resonance_avoidance_speed","max_resonance_avoidance_speed","input_shaping_emit","input_shaping_type","input_shaping_freq_x","input_shaping_freq_y","input_shaping_damp_x","input_shaping_damp_y","default_filament_profile","deretraction_speed","extruder_colour","extruder_offset","max_layer_height","min_layer_height","nozzle_diameter","retract_after_wipe","retract_before_wipe","retract_length_toolchange","retract_lift_above","retract_lift_below","retract_restart_extra","retract_restart_extra_toolchange","retract_when_changing_layer","retraction_length","retraction_minimum_travel","retraction_speed","wipe","wipe_distance","z_hop"],"process":["layer_height","initial_layer_print_height","wall_loops","alternate_extra_wall","slice_closing_radius","spiral_mode","spiral_mode_smooth","spiral_mode_max_xy_smoothing","spiral_starting_flow_ratio","spiral_finishing_flow_ratio","slicing_mode","top_shell_layers","top_shell_thickness","top_surface_density","bottom_surface_density","bottom_shell_layers","bottom_shell_thickness","extra_perimeters_on_overhangs","ensure_vertical_shell_thickness","reduce_crossing_wall","detect_thin_wall","detect_overhang_wall","overhang_reverse","overhang_reverse_threshold","overhang_reverse_internal_only","wall_direction","seam_position","staggered_inner_seams","wall_sequence","is_infill_first","sparse_infill_density","fill_multiline","gyroid_optimized","sparse_infill_pattern","lateral_lattice_angle_1","lateral_lattice_angle_2","infill_overhang_angle","lightning_overhang_angle","lightning_prune_angle","lightning_straightening_angle","top_surface_pattern","top_surface_expansion","top_surface_expansion_margin","top_surface_expansion_direction","bottom_surface_pattern","top_surface_fill_order","bottom_surface_fill_order","infill_direction","solid_infill_direction","top_layer_direction","bottom_layer_direction","counterbore_hole_bridging","infill_shift_step","sparse_infill_rotate_template","solid_infill_rotate_template","symmetric_infill_y_axis","skeleton_infill_density","infill_lock_depth","skin_infill_depth","skin_infill_density","align_infill_direction_to_model","extra_solid_infills","center_of_surface_pattern","separated_infills","minimum_sparse_infill_area","reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target","ironing_type","ironing_pattern","ironing_flow","ironing_speed","ironing_spacing","ironing_angle","ironing_angle_fixed","ironing_inset","support_ironing","support_ironing_pattern","support_ironing_flow","support_ironing_spacing","max_travel_detour_distance","fuzzy_skin","fuzzy_skin_thickness","fuzzy_skin_point_distance","fuzzy_skin_first_layer","fuzzy_skin_noise_type","fuzzy_skin_mode","fuzzy_skin_scale","fuzzy_skin_octaves","fuzzy_skin_persistence","fuzzy_skin_ripples_per_layer","fuzzy_skin_ripple_offset","fuzzy_skin_layers_between_ripple_offset","max_volumetric_extrusion_rate_slope","max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only","inner_wall_speed","outer_wall_speed","sparse_infill_speed","internal_solid_infill_speed","top_surface_speed","support_speed","support_object_xy_distance","support_object_first_layer_gap","support_interface_speed","bridge_speed","internal_bridge_speed","gap_infill_speed","travel_speed","travel_speed_z","initial_layer_speed","outer_wall_acceleration","initial_layer_acceleration","top_surface_acceleration","default_acceleration","skirt_type","skirt_loops","skirt_speed","min_skirt_length","skirt_distance","skirt_start_angle","skirt_height","single_loop_draft_shield","draft_shield","brim_width","brim_object_gap","brim_flow_ratio","brim_use_efc_outline","combine_brims","brim_type","brim_ears_max_angle","brim_ears_detection_length","enable_support","support_type","support_threshold_angle","support_threshold_overlap","enforce_support_layers","raft_layers","raft_first_layer_density","raft_first_layer_expansion","raft_contact_distance","raft_expansion","support_base_pattern","support_base_pattern_spacing","support_expansion","support_style","print_extruder_id","print_extruder_variant","independent_support_layer_height","support_angle","support_interface_top_layers","support_interface_bottom_layers","support_interface_pattern","support_interface_spacing","support_interface_loop_pattern","support_top_z_distance","support_on_build_plate_only","support_critical_regions_only","bridge_no_support","thick_bridges","thick_internal_bridges","dont_filter_internal_bridges","enable_extra_bridge_layer","max_bridge_length","print_sequence","print_order","support_remove_small_overhang","filename_format","outer_wall_filament_id","inner_wall_filament_id","support_bottom_z_distance","sparse_infill_filament_id","internal_solid_filament_id","top_surface_filament_id","bottom_surface_filament_id","support_filament","support_interface_filament","support_interface_not_for_body","ooze_prevention","standby_temperature_delta","preheat_time","preheat_steps","interface_shells","line_width","initial_layer_line_width","inner_wall_line_width","outer_wall_line_width","sparse_infill_line_width","internal_solid_infill_line_width","skin_infill_line_width","skeleton_infill_line_width","top_surface_line_width","support_line_width","infill_wall_overlap","top_bottom_infill_wall_overlap","bridge_flow","bridge_line_width","internal_bridge_flow","elefant_foot_compensation","elefant_foot_compensation_layers","elefant_foot_layers_density","xy_contour_compensation","xy_hole_compensation","resolution","enable_prime_tower","prime_tower_enable_framework","prime_tower_width","prime_tower_brim_width","prime_tower_skip_points","prime_volume","prime_tower_infill_gap","prime_tower_flat_ironing","enable_tower_interface_features","enable_tower_interface_cooldown_during_tower","wipe_tower_no_sparse_layers","compatible_printers","compatible_printers_condition","inherits","flush_into_infill","flush_into_objects","flush_into_support","tree_support_branch_angle","tree_support_angle_slow","tree_support_wall_count","tree_support_top_rate","tree_support_branch_distance","tree_support_tip_diameter","tree_support_branch_diameter","tree_support_branch_diameter_angle","detect_narrow_internal_solid_infill","gcode_add_line_number","enable_arc_fitting","precise_z_height","infill_combination","infill_combination_max_layer_height","support_bottom_interface_spacing","enable_overhang_speed","slowdown_for_curled_perimeters","overhang_1_4_speed","overhang_2_4_speed","overhang_3_4_speed","overhang_4_4_speed","initial_layer_infill_speed","only_one_wall_top","timelapse_type","wall_generator","wall_transition_length","wall_transition_filter_deviation","wall_transition_angle","wall_distribution_count","min_feature_size","min_bead_width","post_process","slicing_pipeline_plugin","plugins","process_change_extrusion_role_gcode","min_length_factor","wall_maximum_resolution","wall_maximum_deviation","small_perimeter_speed","small_perimeter_threshold","small_support_perimeter_speed","small_support_perimeter_threshold","bridge_angle","internal_bridge_angle","relative_bridge_angle","filter_out_gap_fill","travel_acceleration","inner_wall_acceleration","min_width_top_surface","default_jerk","outer_wall_jerk","inner_wall_jerk","infill_jerk","top_surface_jerk","initial_layer_jerk","travel_jerk","default_junction_deviation","top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer","print_flow_ratio","seam_gap","set_other_flow_ratios","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","role_based_wipe_speed","wipe_speed","accel_to_decel_enable","accel_to_decel_factor","wipe_on_loops","wipe_before_external_loop","bridge_density","internal_bridge_density","precise_outer_wall","bridge_acceleration","sparse_infill_acceleration","internal_solid_infill_acceleration","tree_support_auto_brim","tree_support_brim_width","gcode_comments","gcode_label_objects","initial_layer_travel_speed","initial_layer_travel_acceleration","initial_layer_travel_jerk","exclude_object","slow_down_layers","infill_anchor","infill_anchor_max","initial_layer_min_bead_width","make_overhang_printable","make_overhang_printable_angle","make_overhang_printable_hole_size","notes","wipe_tower_cone_angle","wipe_tower_extra_spacing","wipe_tower_max_purge_speed","wipe_tower_wall_type","wipe_tower_extra_rib_length","wipe_tower_rib_width","wipe_tower_fillet_wall","wipe_tower_filament","wiping_volumes_extruders","wipe_tower_bridging","wipe_tower_extra_flow","single_extruder_multi_material_priming","toolchange_ordering","wipe_tower_rotation_angle","tree_support_branch_distance_organic","tree_support_branch_diameter_organic","tree_support_branch_angle_organic","hole_to_polyhole","hole_to_polyhole_threshold","hole_to_polyhole_twisted","hole_to_polyhole_max_edges","mmu_segmented_region_max_width","mmu_segmented_region_interlocking_depth","small_area_infill_flow_compensation","small_area_infill_flow_compensation_model","enable_wrapping_detection","seam_slope_type","seam_slope_conditional","scarf_angle_threshold","scarf_joint_speed","scarf_joint_flow_ratio","seam_slope_start_height","seam_slope_entire_loop","seam_slope_min_length","seam_slope_steps","seam_slope_inner_walls","scarf_overhang_threshold","interlocking_beam","interlocking_orientation","interlocking_beam_layer_count","interlocking_depth","interlocking_boundary_avoidance","interlocking_beam_width","calib_flowrate_topinfill_special_order","zaa_enabled","zaa_minimize_perimeter_height","zaa_dont_alternate_fill_direction","zaa_min_z","ironing_expansion"],"filament":["filament_colour","default_filament_colour","filament_diameter","pellet_flow_coefficient","volumetric_speed_coefficients","filament_type","filament_soluble","filament_is_support","filament_printable","filament_extruder_compatibility","filament_max_volumetric_speed","filament_adaptive_volumetric_speed","filament_flow_ratio","filament_density","filament_adhesiveness_category","filament_cost","filament_minimal_purge_on_wipe_tower","filament_tower_interface_pre_extrusion_dist","filament_tower_interface_pre_extrusion_length","filament_tower_ironing_area","filament_tower_interface_purge_volume","filament_tower_interface_print_temp","nozzle_temperature","nozzle_temperature_initial_layer","cool_plate_temp","textured_cool_plate_temp","eng_plate_temp","hot_plate_temp","textured_plate_temp","cool_plate_temp_initial_layer","textured_cool_plate_temp_initial_layer","eng_plate_temp_initial_layer","hot_plate_temp_initial_layer","textured_plate_temp_initial_layer","supertack_plate_temp_initial_layer","supertack_plate_temp","temperature_vitrification","reduce_fan_stop_start_freq","dont_slow_down_outer_wall","slow_down_for_layer_cooling","fan_min_speed","fan_max_speed","enable_overhang_bridge_fan","overhang_fan_speed","overhang_fan_threshold","close_fan_the_first_x_layers","close_additional_fan_first_x_layers","first_x_layer_fan_speed","full_fan_speed_layer","initial_layer_fan_speed","additional_fan_full_speed_layer","fan_cooling_layer_time","slow_down_layer_time","slow_down_min_speed","filament_start_gcode","filament_end_gcode","filament_change_extrusion_role_gcode","activate_air_filtration","activate_air_filtration_during_print","activate_air_filtration_on_completion","during_print_exhaust_fan_speed","complete_print_exhaust_fan_speed","filament_deretraction_speed","filament_retract_after_wipe","filament_retract_before_wipe","filament_retract_lift_above","filament_retract_lift_below","filament_retract_lift_enforce","filament_retract_restart_extra","filament_retract_when_changing_layer","filament_retraction_length","filament_retraction_minimum_travel","filament_retraction_speed","filament_wipe","filament_z_hop","filament_z_hop_types","filament_vendor","compatible_prints","compatible_prints_condition","compatible_printers","compatible_printers_condition","inherits","filament_wipe_distance","additional_cooling_fan_speed","nozzle_temperature_range_low","nozzle_temperature_range_high","filament_extruder_variant","enable_pressure_advance","pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_model","adaptive_pressure_advance_overhangs","adaptive_pressure_advance_bridges","chamber_temperature","filament_shrink","filament_shrinkage_compensation_z","support_material_interface_fan_speed","internal_bridge_fan_speed","filament_notes","ironing_fan_speed","filament_ironing_flow","filament_ironing_spacing","filament_ironing_inset","filament_ironing_speed","filament_loading_speed","filament_loading_speed_start","filament_unloading_speed","filament_unloading_speed_start","filament_toolchange_delay","filament_cooling_moves","filament_stamping_loading_speed","filament_stamping_distance","filament_cooling_initial_speed","filament_cooling_final_speed","filament_ramming_parameters","filament_multitool_ramming","filament_multitool_ramming_volume","filament_multitool_ramming_flow","activate_chamber_temp_control","chamber_minimal_temperature","filament_long_retractions_when_cut","filament_retraction_distances_when_cut","idle_temperature","filament_change_length","filament_flush_volumetric_speed","filament_flush_temp","filament_flush_temp_fast","filament_cooling_before_tower","filament_ramming_volumetric_speed","filament_ramming_volumetric_speed_nc","filament_ramming_travel_time","filament_ramming_travel_time_nc","filament_pre_cooling_temperature","filament_pre_cooling_temperature_nc","filament_preheat_temperature_delta","filament_retract_length_nc","filament_change_length_nc","filament_prime_volume","filament_prime_volume_nc","long_retractions_when_ec","retraction_distances_when_ec","filament_dev_ams_drying_ams_limitations","filament_dev_ams_drying_temperature","filament_dev_ams_drying_time","filament_dev_ams_drying_heat_distortion_temperature","filament_dev_chamber_drying_bed_temperature","filament_dev_chamber_drying_time","filament_dev_drying_softening_temperature","filament_dev_drying_cooling_temperature"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"TabPrint::build":["layer_height","initial_layer_print_height","line_width","initial_layer_line_width","outer_wall_line_width","inner_wall_line_width","top_surface_line_width","sparse_infill_line_width","internal_solid_infill_line_width","support_line_width","bridge_line_width","seam_position","staggered_inner_seams","seam_gap","seam_slope_type","seam_slope_conditional","scarf_angle_threshold","scarf_overhang_threshold","scarf_joint_speed","seam_slope_start_height","seam_slope_entire_loop","seam_slope_min_length","seam_slope_steps","scarf_joint_flow_ratio","seam_slope_inner_walls","role_based_wipe_speed","wipe_speed","wipe_on_loops","wipe_before_external_loop","slice_closing_radius","resolution","enable_arc_fitting","xy_hole_compensation","xy_contour_compensation","elefant_foot_compensation","elefant_foot_layers_density","elefant_foot_compensation_layers","precise_outer_wall","precise_z_height","hole_to_polyhole","hole_to_polyhole_threshold","hole_to_polyhole_twisted","hole_to_polyhole_max_edges","ironing_type","ironing_pattern","ironing_flow","ironing_spacing","ironing_inset","ironing_angle","ironing_angle_fixed","zaa_enabled","zaa_minimize_perimeter_height","zaa_min_z","zaa_dont_alternate_fill_direction","wall_generator","wall_transition_angle","wall_transition_filter_deviation","wall_transition_length","wall_distribution_count","initial_layer_min_bead_width","min_bead_width","min_feature_size","min_length_factor","wall_maximum_resolution","wall_maximum_deviation","wall_sequence","is_infill_first","wall_direction","print_flow_ratio","top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","set_other_flow_ratios","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","only_one_wall_first_layer","only_one_wall_top","min_width_top_surface","reduce_crossing_wall","max_travel_detour_distance","small_area_infill_flow_compensation","bridge_flow","internal_bridge_flow","bridge_density","internal_bridge_density","thick_bridges","thick_internal_bridges","enable_extra_bridge_layer","dont_filter_internal_bridges","counterbore_hole_bridging","detect_overhang_wall","make_overhang_printable","make_overhang_printable_angle","make_overhang_printable_hole_size","extra_perimeters_on_overhangs","overhang_reverse","overhang_reverse_internal_only","overhang_reverse_threshold","wall_loops","alternate_extra_wall","detect_thin_wall","top_shell_layers","top_shell_thickness","top_surface_density","top_surface_pattern","top_surface_fill_order","top_layer_direction","top_surface_expansion","top_surface_expansion_margin","top_surface_expansion_direction","bottom_shell_layers","bottom_shell_thickness","bottom_surface_density","bottom_surface_pattern","bottom_surface_fill_order","bottom_layer_direction","center_of_surface_pattern","top_bottom_infill_wall_overlap","sparse_infill_density","fill_multiline","sparse_infill_pattern","gyroid_optimized","infill_direction","sparse_infill_rotate_template","skin_infill_density","skeleton_infill_density","infill_lock_depth","skin_infill_depth","skin_infill_line_width","skeleton_infill_line_width","symmetric_infill_y_axis","infill_shift_step","lateral_lattice_angle_1","lateral_lattice_angle_2","infill_overhang_angle","lightning_overhang_angle","lightning_prune_angle","lightning_straightening_angle","infill_anchor_max","infill_anchor","internal_solid_infill_pattern","solid_infill_direction","solid_infill_rotate_template","gap_fill_target","filter_out_gap_fill","separated_infills","infill_wall_overlap","align_infill_direction_to_model","extra_solid_infills","bridge_angle","internal_bridge_angle","relative_bridge_angle","minimum_sparse_infill_area","infill_combination","infill_combination_max_layer_height","detect_narrow_internal_solid_infill","ensure_vertical_shell_thickness","initial_layer_speed","initial_layer_infill_speed","initial_layer_travel_speed","slow_down_layers","outer_wall_speed","inner_wall_speed","small_perimeter_speed","small_perimeter_threshold","sparse_infill_speed","internal_solid_infill_speed","top_surface_speed","gap_infill_speed","ironing_speed","support_speed","support_interface_speed","small_support_perimeter_speed","small_support_perimeter_threshold","enable_overhang_speed","slowdown_for_curled_perimeters","<custom-widget line:2887>","<custom-widget line:2892>","travel_speed","default_acceleration","outer_wall_acceleration","inner_wall_acceleration","bridge_acceleration","sparse_infill_acceleration","internal_solid_infill_acceleration","initial_layer_acceleration","initial_layer_travel_acceleration","top_surface_acceleration","travel_acceleration","accel_to_decel_enable","accel_to_decel_factor","default_junction_deviation","default_jerk","outer_wall_jerk","inner_wall_jerk","infill_jerk","top_surface_jerk","initial_layer_jerk","initial_layer_travel_jerk","travel_jerk","max_volumetric_extrusion_rate_slope","max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only","enable_support","support_type","support_style","support_threshold_angle","support_threshold_overlap","raft_first_layer_density","raft_first_layer_expansion","support_on_build_plate_only","support_critical_regions_only","support_remove_small_overhang","raft_layers","raft_contact_distance","support_filament","support_interface_filament","support_interface_not_for_body","support_ironing","support_ironing_pattern","support_ironing_flow","support_ironing_spacing","support_top_z_distance","support_bottom_z_distance","tree_support_wall_count","support_base_pattern","support_base_pattern_spacing","support_angle","support_interface_top_layers","support_interface_bottom_layers","support_interface_pattern","support_interface_spacing","support_bottom_interface_spacing","support_expansion","support_object_xy_distance","support_object_first_layer_gap","bridge_no_support","max_bridge_length","independent_support_layer_height","tree_support_tip_diameter","tree_support_branch_distance","tree_support_branch_distance_organic","tree_support_top_rate","tree_support_branch_diameter","tree_support_branch_diameter_organic","tree_support_branch_diameter_angle","tree_support_branch_angle","tree_support_branch_angle_organic","tree_support_angle_slow","tree_support_auto_brim","tree_support_brim_width","enable_prime_tower","prime_tower_skip_points","enable_tower_interface_features","enable_tower_interface_cooldown_during_tower","prime_tower_enable_framework","prime_tower_width","prime_volume","prime_tower_brim_width","prime_tower_infill_gap","wipe_tower_rotation_angle","wipe_tower_bridging","wipe_tower_extra_spacing","wipe_tower_extra_flow","wipe_tower_max_purge_speed","wipe_tower_wall_type","wipe_tower_cone_angle","wipe_tower_extra_rib_length","wipe_tower_rib_width","wipe_tower_fillet_wall","wipe_tower_no_sparse_layers","single_extruder_multi_material_priming","outer_wall_filament_id","inner_wall_filament_id","sparse_infill_filament_id","internal_solid_filament_id","top_surface_filament_id","bottom_surface_filament_id","wipe_tower_filament","ooze_prevention","standby_temperature_delta","preheat_time","preheat_steps","flush_into_infill","flush_into_objects","flush_into_support","interlocking_beam","toolchange_ordering","interface_shells","mmu_segmented_region_max_width","mmu_segmented_region_interlocking_depth","interlocking_beam_width","interlocking_orientation","interlocking_beam_layer_count","interlocking_depth","interlocking_boundary_avoidance","skirt_loops","skirt_type","min_skirt_length","skirt_distance","skirt_start_angle","skirt_speed","skirt_height","draft_shield","single_loop_draft_shield","brim_type","brim_width","brim_object_gap","brim_flow_ratio","brim_use_efc_outline","combine_brims","brim_ears_max_angle","brim_ears_detection_length","slicing_mode","print_sequence","print_order","spiral_mode","spiral_mode_smooth","spiral_mode_max_xy_smoothing","spiral_starting_flow_ratio","spiral_finishing_flow_ratio","timelapse_type","enable_wrapping_detection","fuzzy_skin","fuzzy_skin_mode","fuzzy_skin_noise_type","fuzzy_skin_point_distance","fuzzy_skin_thickness","fuzzy_skin_scale","fuzzy_skin_octaves","fuzzy_skin_persistence","fuzzy_skin_ripples_per_layer","fuzzy_skin_ripple_offset","fuzzy_skin_layers_between_ripple_offset","fuzzy_skin_first_layer","reduce_infill_retraction","gcode_add_line_number","gcode_comments","gcode_label_objects","exclude_object","print_plugin_config_overrides"],"TabPrintModel::build":[],"TabPrintPlate::build":[],"TabFilament::add_filament_overrides_page":["filament_retraction_length","filament_z_hop","filament_z_hop_types","filament_retract_lift_above","filament_retract_lift_below","filament_retract_lift_enforce","filament_retraction_speed","filament_deretraction_speed","filament_retract_restart_extra","filament_retraction_minimum_travel","filament_retract_when_changing_layer","filament_wipe","filament_wipe_distance","filament_retract_before_wipe","filament_retract_after_wipe","filament_long_retractions_when_cut","filament_retraction_distances_when_cut","filament_ironing_flow","filament_ironing_spacing","filament_ironing_inset","filament_ironing_speed"],"TabFilament::build":["filament_type","filament_vendor","filament_soluble","filament_is_support","filament_change_length","required_nozzle_HRC","default_filament_colour","filament_diameter","filament_adhesiveness_category","filament_density","filament_shrink","filament_shrinkage_compensation_z","filament_cost","temperature_vitrification","idle_temperature","<custom-widget line:4302>","pellet_flow_coefficient","filament_flow_ratio","enable_pressure_advance","pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_overhangs","adaptive_pressure_advance_bridges","activate_chamber_temp_control","<custom-widget line:4353>","<custom-widget line:4374>","<custom-widget line:4382>","<custom-widget line:4389>","<custom-widget line:4396>","<custom-widget line:4403>","<custom-widget line:4410>","<custom-widget line:4417>","filament_adaptive_volumetric_speed","filament_max_volumetric_speed","close_fan_the_first_x_layers","initial_layer_fan_speed","full_fan_speed_layer","<custom-widget line:4477>","<custom-widget line:4482>","reduce_fan_stop_start_freq","slow_down_for_layer_cooling","dont_slow_down_outer_wall","slow_down_min_speed","enable_overhang_bridge_fan","overhang_fan_threshold","overhang_fan_speed","internal_bridge_fan_speed","support_material_interface_fan_speed","ironing_fan_speed","additional_cooling_fan_speed","activate_air_filtration","<custom-widget line:4506>","<custom-widget line:4513>","filament_plugin_config_overrides","filament_minimal_purge_on_wipe_tower","filament_tower_interface_pre_extrusion_dist","filament_tower_interface_pre_extrusion_length","filament_tower_ironing_area","filament_tower_interface_purge_volume","filament_tower_interface_print_temp","long_retractions_when_ec","retraction_distances_when_ec","filament_loading_speed_start","filament_loading_speed","filament_unloading_speed_start","filament_unloading_speed","filament_toolchange_delay","filament_cooling_moves","filament_cooling_initial_speed","filament_cooling_final_speed","filament_stamping_loading_speed","filament_stamping_distance","filament_multitool_ramming","filament_multitool_ramming_volume","filament_multitool_ramming_flow"],"TabPrinter::build_fff":["parallel_printheads_count","printable_height","support_multi_bed_types","best_object_pos","z_offset","preferred_orientation","printer_structure","gcode_flavor","pellet_modded_printer","bbl_use_printhost","use_3mf","scan_first_layer","enable_power_loss_recovery","disable_m73","use_relative_e_distances","use_firmware_retraction","time_cost","printer_plugin_config_overrides","<custom-widget line:5072>","fan_kickstart","part_cooling_fan_min_pwm","extruder_clearance_radius","extruder_clearance_height_to_rod","extruder_clearance_height_to_lid","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance","adaptive_bed_mesh_margin","nozzle_type","nozzle_hrc","auxiliary_fan","fan_direction","support_chamber_temp_control","support_air_filtration","cooling_filter_enabled"],"TabPrinter::build_kinematics_page":["emit_machine_limits_to_gcode","resonance_avoidance","<custom-widget line:5386>","input_shaping_emit","input_shaping_type","<custom-widget line:5395>","<custom-widget line:5402>","machine_max_speed_x","machine_max_speed_y","machine_max_speed_z","machine_max_speed_e","machine_max_acceleration_x","machine_max_acceleration_y","machine_max_acceleration_z","machine_max_acceleration_e","machine_max_acceleration_extruding","machine_max_acceleration_retracting","machine_max_acceleration_travel","machine_max_junction_deviation","machine_max_jerk_x","machine_max_jerk_y","machine_max_jerk_z","machine_max_jerk_e"],"TabPrinter::build_unregular_pages":["single_extruder_multi_material","manual_filament_change","bed_temperature_formula","wipe_tower_type","purge_in_prime_tower","enable_filament_ramming","tool_change_on_wipe_tower","cooling_tube_retraction","cooling_tube_length","parking_pos_retraction","extra_loading_move","high_current_on_filament_swap","machine_load_filament_time","machine_unload_filament_time","machine_tool_change_time","nozzle_diameter","nozzle_volume","extruder_printable_height","min_layer_height","max_layer_height","extruder_offset","retraction_length","retract_restart_extra","retraction_speed","deretraction_speed","retraction_minimum_travel","retract_when_changing_layer","wipe","wipe_distance","retract_before_wipe","retract_after_wipe","retract_lift_enforce","z_hop_types","z_hop","travel_slope","retract_lift_above","retract_lift_below","retract_length_toolchange","retract_restart_extra_toolchange","long_retractions_when_cut","retraction_distances_when_cut"],"TabPrinter::build_sla":["max_print_height","display_width","display_height","<custom-widget line:3032>","display_orientation","display_mirror_x","display_mirror_y","<custom-widget line:3044>","<custom-widget line:3053>","absolute_correction","elefant_foot_compensation","elefant_foot_min_width","gamma_correction","min_exposure_time","max_exposure_time","min_initial_exposure_time","max_initial_exposure_time","sla_archive_format","sla_output_precision"],"TabSLAMaterial::build":["material_colour","bottle_cost","bottle_volume","bottle_weight","material_density","initial_layer_height","exposure_time","initial_exposure_time","<custom-widget line:5492>","zcorrection_layers","<custom-widget line:5502>","material_print_speed","area_fill","<custom-widget line:5560>","<custom-widget line:5590>"],"TabSLAPrint::build":["layer_height","faded_layers","supports_enable","support_tree_type","support_enforcers_only","support_points_density_relative","support_head_front_diameter","support_head_penetration","support_head_width","support_pillar_diameter","support_small_pillar_diameter_percent","support_max_bridges_on_pillar","support_pillar_connection_mode","support_buildplate_only","support_pillar_widening_factor","support_max_weight_on_model","support_base_diameter","support_base_height","support_base_safety_distance","support_object_elevation","<custom-widget line:5890>","support_critical_angle","support_max_bridge_length","support_max_pillar_link_distance","pad_enable","pad_wall_thickness","pad_wall_height","pad_brim_size","pad_max_merge_distance","pad_wall_slope","pad_around_object","pad_around_object_everywhere","pad_object_gap","pad_object_connector_stride","pad_object_connector_width","pad_object_connector_penetration","hollowing_enable","hollowing_min_thickness","hollowing_quality","hollowing_closing_distance","slice_closing_radius","slicing_mode"]}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import e, { useRef as J, useState as w, useLayoutEffect as T, useEffect as I, useMemo as j } from "react";
|
|
2
|
+
import { createPortal as W } from "react-dom";
|
|
3
|
+
import { uiTreeKeys as $, leanSchema as U } from "three-slicer-viewer/data";
|
|
4
|
+
import { printerTechnology as G, settingRaw as q } from "three-slicer-viewer/settings";
|
|
5
|
+
import { disabledKeys as H, makeCfg as Q } from "three-slicer-viewer/toggle";
|
|
6
|
+
function X({ css: t, className: a, children: n }) {
|
|
7
|
+
const r = J(null), [l] = w(() => {
|
|
8
|
+
const p = document.createElement("div");
|
|
9
|
+
return p.style.display = "contents", p;
|
|
10
|
+
});
|
|
11
|
+
return T(() => {
|
|
12
|
+
const p = r.current, d = p.shadowRoot || p.attachShadow({ mode: "open" });
|
|
13
|
+
let i = d.querySelector("style[data-ts-css]");
|
|
14
|
+
i || (i = document.createElement("style"), i.setAttribute("data-ts-css", ""), d.append(i)), i.textContent = t, d.contains(l) || d.append(l);
|
|
15
|
+
}, [t, l]), /* @__PURE__ */ e.createElement("div", { ref: r, className: a }, W(n, l));
|
|
16
|
+
}
|
|
17
|
+
const Y = ':host{display:contents}*{box-sizing:border-box}.row{display:grid;grid-template-columns:260px 220px 70px 1fr;gap:8px;align-items:center;padding:3px 0;border-bottom:1px dashed #f0f0f0}.row .lbl{color:#222;text-decoration:none}.row .lbl:hover{color:#0a7d4f;text-decoration:underline}.row .key{font-size:11px;color:#999;overflow:hidden;text-overflow:ellipsis}.row input[type=text],.row input:not([type]),.row select,.row textarea{width:100%;max-width:260px;padding:2px 6px}.inputwrap{display:inline-flex;align-items:center;gap:4px}.unit{color:#888;font-size:12px;white-space:nowrap}.pts{font-size:11px;color:#666}.badge{font-size:10px;padding:1px 6px;border-radius:8px;color:#fff;text-align:center}.mode-simple{background:#2e9e5b}.mode-advanced{background:#3673c3}.mode-expert{background:#d9822b}.mode-develop{background:#c0392b}.mode-none,.mode-undefined{background:#aaa}.muted{color:#999;font-weight:400;font-size:12px}.row.custom{grid-template-columns:1fr}.row.disabled{opacity:.42}.row.disabled input,.row.disabled select,.row.disabled textarea{cursor:not-allowed;background:#f2f2f2}.lbl-cell{display:inline-flex;align-items:center;gap:5px;min-width:0}.lbl-cell .lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dirty-dot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:#e8873a;box-shadow:0 0 0 2px #fff3e6}.override-dot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:#f0a542;border:0;padding:0;cursor:pointer;box-shadow:0 0 0 2px #fdf1dd}.override-dot:hover{background:#d98c26}.widget-cell{display:inline-flex;align-items:center;gap:6px;min-width:0}.reset-btn{flex:0 0 auto;border:1px solid #d8b48a;background:#fbf1e4;color:#b5701f;border-radius:5px;cursor:pointer;font-size:13px;line-height:1;padding:1px 5px}.reset-btn:hover{background:#f3e2cb}.settings-panel{flex:0 0 400px;width:400px;border-left:1px solid #e2e2e2;display:flex;flex-direction:column;min-height:0;background:#fff;color:#222;font:14px/1.5 -apple-system,Segoe UI,sans-serif}.settings-panel .sp-top{padding:10px 12px 8px;border-bottom:1px solid #eee}.sp-builder{display:flex;align-items:center;gap:8px;font-size:12px;color:#666}.sp-builder select{flex:1;padding:4px 6px}.sp-pages{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.sp-pages button{border:1px solid #e0e0e0;background:#fafafa;border-radius:6px;padding:4px 8px;font-size:12px;cursor:pointer}.sp-pages button.on{background:#e6f5ee;color:#0a7d4f;border-color:#b7e2cd;font-weight:700}.sp-modes{display:flex;gap:4px;margin-top:8px}.sp-modes button{border:0;background:none;font-size:11px;color:#888;padding:2px 6px;border-radius:6px;cursor:pointer}.sp-modes button.on{background:#eef2f0;color:#0a7d4f;font-weight:700}.settings-panel .sp-body{flex:1 1 auto;overflow-y:auto;padding:8px 14px 24px}.settings-panel .sp-body h2{font-size:16px}.settings-panel .row{grid-template-columns:1fr auto;grid-template-areas:"lbl badge" "key widget";row-gap:2px;padding:6px 0}.settings-panel .row .lbl{grid-area:lbl;font-weight:600}.settings-panel .row .badge{grid-area:badge;justify-self:end}.settings-panel .row .key{grid-area:key}.settings-panel .row .inputwrap,.settings-panel .row>select,.settings-panel .row>input,.settings-panel .row>textarea,.settings-panel .row>.pts,.settings-panel .row>.muted{grid-area:widget;justify-self:end}.settings-panel .row input:not([type=checkbox]):not([type=color]),.settings-panel .row select,.settings-panel .row textarea{max-width:200px}.settings-panel .row.custom{grid-template-columns:1fr;grid-template-areas:"lbl"}.sp-search{width:100%;box-sizing:border-box;padding:6px 9px;border:1px solid #d6d6d6;border-radius:6px;font-size:13px;margin-bottom:8px}:host(.sp-embedded) .settings-panel{position:static;width:auto;flex:none;border:0;height:auto}:host(.sp-embedded) .sp-body{padding:4px 2px 8px;max-height:460px}.bse{display:flex;flex-direction:column;gap:6px;min-width:0;max-width:220px}.bse-modes{display:flex;gap:4px}.bse-modes button{border:1px solid #e0e0e0;background:#fafafa;border-radius:6px;padding:2px 8px;font-size:11px;cursor:pointer}.bse-modes button.on{background:#e6f5ee;color:#0a7d4f;border-color:#b7e2cd;font-weight:700}.bse-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 8px}.bse-grid label{display:flex;align-items:center;gap:4px;font-size:11px;color:#666;white-space:nowrap}.bse-grid input{width:56px;padding:2px 4px;font-size:12px}.bse-json{width:100%;font:11px ui-monospace,monospace;padding:4px 6px;border:1px solid #d6d6d6;border-radius:6px;box-sizing:border-box}.bse-json.err{border-color:#d0435a;background:#fdf3f4}', R = (t, a, n, r) => [[n, r], [t + n, r], [t + n, a + r], [n, a + r]], V = (t) => {
|
|
18
|
+
const a = t / 2, n = 32;
|
|
19
|
+
return Array.from({ length: n }, (r, l) => {
|
|
20
|
+
const p = 2 * Math.PI * l / n;
|
|
21
|
+
return [+(a + a * Math.cos(p)).toFixed(2), +(a + a * Math.sin(p)).toFixed(2)];
|
|
22
|
+
});
|
|
23
|
+
}, L = (t) => {
|
|
24
|
+
const a = t.map((r) => r[0]), n = t.map((r) => r[1]);
|
|
25
|
+
return { x0: Math.min(...a), y0: Math.min(...n), w: Math.max(...a) - Math.min(...a), d: Math.max(...n) - Math.min(...n) };
|
|
26
|
+
};
|
|
27
|
+
function Z({ value: t, onChange: a, disabled: n }) {
|
|
28
|
+
const r = Array.isArray(t) && t.length >= 3 ? t : R(200, 200, 0, 0), l = L(r), [p, d] = w(r.length === 4 ? "rect" : r.length >= 12 ? "circle" : "custom"), [i, u] = w({ w: l.w, d: l.d, ox: l.x0, oy: l.y0 }), [x, g] = w(Math.round(l.w)), [c, b] = w(JSON.stringify(r)), [C, E] = w(!1);
|
|
29
|
+
I(() => {
|
|
30
|
+
const o = L(r);
|
|
31
|
+
u({ w: o.w, d: o.d, ox: o.x0, oy: o.y0 }), g(Math.round(o.w)), b(JSON.stringify(r)), E(!1);
|
|
32
|
+
}, [JSON.stringify(t)]);
|
|
33
|
+
const y = (o) => {
|
|
34
|
+
u(o);
|
|
35
|
+
const { w: m, d: h, ox: A, oy: M } = o;
|
|
36
|
+
m > 0 && h > 0 && a(R(m, h, A, M));
|
|
37
|
+
}, N = (o) => {
|
|
38
|
+
g(o), o > 0 && a(V(o));
|
|
39
|
+
}, _ = (o) => {
|
|
40
|
+
b(o);
|
|
41
|
+
try {
|
|
42
|
+
const m = JSON.parse(o);
|
|
43
|
+
if (!Array.isArray(m) || m.length < 3 || !m.every((h) => Array.isArray(h) && h.length === 2 && h.every(Number.isFinite))) throw 0;
|
|
44
|
+
E(!1), a(m);
|
|
45
|
+
} catch {
|
|
46
|
+
E(!0);
|
|
47
|
+
}
|
|
48
|
+
}, v = (o) => {
|
|
49
|
+
const m = parseFloat(o);
|
|
50
|
+
return Number.isFinite(m) ? m : 0;
|
|
51
|
+
};
|
|
52
|
+
return /* @__PURE__ */ e.createElement("div", { className: "bse", "data-testid": "bed-shape-editor" }, /* @__PURE__ */ e.createElement("div", { className: "bse-modes" }, [["rect", "Rectangular"], ["circle", "Circular"], ["custom", "Custom"]].map(([o, m]) => /* @__PURE__ */ e.createElement("button", { key: o, type: "button", className: p === o ? "on" : "", disabled: n, onClick: () => d(o) }, m))), p === "rect" && /* @__PURE__ */ e.createElement("div", { className: "bse-grid" }, /* @__PURE__ */ e.createElement("label", null, "Width ", /* @__PURE__ */ e.createElement(
|
|
53
|
+
"input",
|
|
54
|
+
{
|
|
55
|
+
type: "number",
|
|
56
|
+
min: "1",
|
|
57
|
+
value: i.w,
|
|
58
|
+
disabled: n,
|
|
59
|
+
"data-testid": "bed-w",
|
|
60
|
+
onChange: (o) => y({ ...i, w: v(o.target.value) })
|
|
61
|
+
}
|
|
62
|
+
), " mm"), /* @__PURE__ */ e.createElement("label", null, "Depth ", /* @__PURE__ */ e.createElement(
|
|
63
|
+
"input",
|
|
64
|
+
{
|
|
65
|
+
type: "number",
|
|
66
|
+
min: "1",
|
|
67
|
+
value: i.d,
|
|
68
|
+
disabled: n,
|
|
69
|
+
"data-testid": "bed-d",
|
|
70
|
+
onChange: (o) => y({ ...i, d: v(o.target.value) })
|
|
71
|
+
}
|
|
72
|
+
), " mm"), /* @__PURE__ */ e.createElement("label", null, "Origin X ", /* @__PURE__ */ e.createElement(
|
|
73
|
+
"input",
|
|
74
|
+
{
|
|
75
|
+
type: "number",
|
|
76
|
+
value: i.ox,
|
|
77
|
+
disabled: n,
|
|
78
|
+
onChange: (o) => y({ ...i, ox: v(o.target.value) })
|
|
79
|
+
}
|
|
80
|
+
)), /* @__PURE__ */ e.createElement("label", null, "Origin Y ", /* @__PURE__ */ e.createElement(
|
|
81
|
+
"input",
|
|
82
|
+
{
|
|
83
|
+
type: "number",
|
|
84
|
+
value: i.oy,
|
|
85
|
+
disabled: n,
|
|
86
|
+
onChange: (o) => y({ ...i, oy: v(o.target.value) })
|
|
87
|
+
}
|
|
88
|
+
))), p === "circle" && /* @__PURE__ */ e.createElement("div", { className: "bse-grid" }, /* @__PURE__ */ e.createElement("label", null, "Diameter ", /* @__PURE__ */ e.createElement(
|
|
89
|
+
"input",
|
|
90
|
+
{
|
|
91
|
+
type: "number",
|
|
92
|
+
min: "1",
|
|
93
|
+
value: x,
|
|
94
|
+
disabled: n,
|
|
95
|
+
"data-testid": "bed-dia",
|
|
96
|
+
onChange: (o) => N(v(o.target.value))
|
|
97
|
+
}
|
|
98
|
+
), " mm")), p === "custom" && /* @__PURE__ */ e.createElement(
|
|
99
|
+
"textarea",
|
|
100
|
+
{
|
|
101
|
+
className: "bse-json" + (C ? " err" : ""),
|
|
102
|
+
rows: 3,
|
|
103
|
+
value: c,
|
|
104
|
+
disabled: n,
|
|
105
|
+
"data-testid": "bed-json",
|
|
106
|
+
onChange: (o) => _(o.target.value),
|
|
107
|
+
placeholder: "[[0,0],[200,0],[200,200],[0,200]]"
|
|
108
|
+
}
|
|
109
|
+
));
|
|
110
|
+
}
|
|
111
|
+
const K = {
|
|
112
|
+
printable_area: Z
|
|
113
|
+
}, ee = ["all", "simple", "advanced", "expert", "develop"], B = (t) => t.replace("::build", "").replace("Tab", "").replace("_sla", " (SLA)"), te = (t) => /SLA|build_sla\b/.test(t) ? "SLA" : "FFF", ae = Object.fromEntries(Object.entries($).map(([t, a]) => [t, a.length ? [{ page: "Settings", groups: [{ group: B(t), options: a }] }] : []])), ne = { makeCfg: Q, disabledKeys: H }, re = (t) => Object.keys(t).filter((a) => t[a].length > 0);
|
|
114
|
+
function oe(t, a, n) {
|
|
115
|
+
if (!a || !(n in a)) return !1;
|
|
116
|
+
const r = t[n]?.default, l = Array.isArray(r) ? r[0] : r;
|
|
117
|
+
return String(a[n]) !== String(l ?? "");
|
|
118
|
+
}
|
|
119
|
+
function se(t, a, n) {
|
|
120
|
+
if (n === "all" || a.startsWith("<")) return !0;
|
|
121
|
+
const r = t[a]?.mode;
|
|
122
|
+
return n === "simple" ? r === "simple" : n === "advanced" ? r === "simple" || r === "advanced" : !0;
|
|
123
|
+
}
|
|
124
|
+
function le(t) {
|
|
125
|
+
return t ? t.gui_type === "color" ? "color" : t.enum_values ? "select" : t.type === "coBool" || t.type === "coBools" ? "checkbox" : t.multiline || t.is_code ? "textarea" : t.type === "coPoints" || t.type === "coPoint" ? "points" : "input" : "unknown";
|
|
126
|
+
}
|
|
127
|
+
function ie({ mode: t }) {
|
|
128
|
+
return /* @__PURE__ */ e.createElement("span", { className: `badge mode-${t ?? "none"}` }, t ?? "—");
|
|
129
|
+
}
|
|
130
|
+
function ce({ def: t, optKey: a, settings: n, setSettings: r, disabled: l, customWidgets: p }) {
|
|
131
|
+
const d = q(n, a), i = (c) => r((b) => ({ ...b, [a]: c })), u = p?.[a] ?? K[a];
|
|
132
|
+
if (u) return /* @__PURE__ */ e.createElement(u, { def: t, value: d, onChange: i, disabled: l });
|
|
133
|
+
const x = le(t), g = Array.isArray(d) ? d[0] : d;
|
|
134
|
+
switch (x) {
|
|
135
|
+
case "select":
|
|
136
|
+
return /* @__PURE__ */ e.createElement("select", { value: g ?? "", onChange: (c) => i(c.target.value), disabled: l }, t.enum_values.map((c, b) => /* @__PURE__ */ e.createElement("option", { key: c, value: c }, t.enum_labels?.[b] ?? c)));
|
|
137
|
+
case "checkbox":
|
|
138
|
+
return /* @__PURE__ */ e.createElement("input", { type: "checkbox", checked: Array.isArray(d) ? !!d[0] : !!d, onChange: (c) => i(c.target.checked), disabled: l });
|
|
139
|
+
case "color":
|
|
140
|
+
return /* @__PURE__ */ e.createElement("input", { type: "color", value: typeof g == "string" && g.startsWith("#") ? g : "#00ae42", onChange: (c) => i(c.target.value), disabled: l });
|
|
141
|
+
case "textarea":
|
|
142
|
+
return /* @__PURE__ */ e.createElement("textarea", { rows: 2, value: Array.isArray(d) ? d.join(`
|
|
143
|
+
`) : d ?? "", onChange: (c) => i(c.target.value), disabled: l });
|
|
144
|
+
case "points":
|
|
145
|
+
return /* @__PURE__ */ e.createElement("code", { className: "pts" }, JSON.stringify(d ?? []));
|
|
146
|
+
case "unknown":
|
|
147
|
+
return /* @__PURE__ */ e.createElement("span", { className: "muted" }, "No schema");
|
|
148
|
+
default:
|
|
149
|
+
return /* @__PURE__ */ e.createElement("span", { className: "inputwrap" }, /* @__PURE__ */ e.createElement("input", { value: g ?? "", onChange: (c) => i(c.target.value), disabled: l }), t.sidetext && /* @__PURE__ */ e.createElement("span", { className: "unit" }, t.sidetext));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function de({ schema: t, optKey: a, settings: n, setSettings: r, disabled: l, onOptionOpen: p, customWidgets: d, overridden: i, onRevertKey: u }) {
|
|
153
|
+
if (a.startsWith("<")) return /* @__PURE__ */ e.createElement("div", { className: "row custom" }, /* @__PURE__ */ e.createElement("span", { className: "muted" }, "⚙ Custom widget ", a));
|
|
154
|
+
const x = t[a], g = l ? l[a] : void 0, c = g != null, b = oe(t, n, a), C = () => r((y) => {
|
|
155
|
+
const N = { ...y };
|
|
156
|
+
return delete N[a], N;
|
|
157
|
+
}), E = x?.label || x?.full_label || a;
|
|
158
|
+
return /* @__PURE__ */ e.createElement("div", { className: "row" + (c ? " disabled" : ""), title: c ? `Disabled when: ${g}` : x?.tooltip ?? "", "data-testid": `row-${a}` }, /* @__PURE__ */ e.createElement("span", { className: "lbl-cell" }, i && /* @__PURE__ */ e.createElement(
|
|
159
|
+
"button",
|
|
160
|
+
{
|
|
161
|
+
type: "button",
|
|
162
|
+
className: "override-dot",
|
|
163
|
+
onClick: () => u?.(a),
|
|
164
|
+
title: "This plate's override — click to follow the global value again",
|
|
165
|
+
"data-testid": `override-${a}`
|
|
166
|
+
}
|
|
167
|
+
), b && /* @__PURE__ */ e.createElement("span", { className: "dirty-dot", title: "Changed from default", "data-testid": `dirty-${a}` }), p ? /* @__PURE__ */ e.createElement("button", { type: "button", className: "lbl lbl-link", onClick: () => p(a), title: "Details" }, E) : /* @__PURE__ */ e.createElement("span", { className: "lbl" }, E)), /* @__PURE__ */ e.createElement("code", { className: "key" }, a), /* @__PURE__ */ e.createElement(ie, { mode: x?.mode }), /* @__PURE__ */ e.createElement("span", { className: "widget-cell" }, /* @__PURE__ */ e.createElement(ce, { def: x, optKey: a, settings: n, setSettings: r, disabled: c, customWidgets: d }), b && /* @__PURE__ */ e.createElement("button", { className: "reset-btn", onClick: C, title: "Reset to default", "data-testid": `reset-${a}` }, "↺")));
|
|
168
|
+
}
|
|
169
|
+
function xe({
|
|
170
|
+
schema: t = U,
|
|
171
|
+
uiTree: a = ae,
|
|
172
|
+
toggle: n = ne,
|
|
173
|
+
settings: r,
|
|
174
|
+
setSettings: l,
|
|
175
|
+
onOptionOpen: p,
|
|
176
|
+
embedded: d = !1,
|
|
177
|
+
customWidgets: i,
|
|
178
|
+
only: u,
|
|
179
|
+
overriddenKeys: x,
|
|
180
|
+
onRevertKey: g
|
|
181
|
+
}) {
|
|
182
|
+
const c = j(() => re(a), [a]), [b, C] = w(u?.builder ?? c[0] ?? ""), [E, y] = w(0), [N, _] = w("all"), [v, o] = w(""), m = G(r), h = c.filter((s) => te(s) === m), A = u?.builder ?? (h.includes(b) ? b : h[0] ?? ""), M = a[u?.builder ?? A] ?? [], z = u?.page ? M.filter((s) => s.page === u.page) : M, O = z[Math.min(E, z.length - 1)], P = j(() => n.disabledKeys(n.makeCfg(r)), [r, n]), k = v.trim().toLowerCase(), S = j(() => k ? Object.entries(t).filter(([s, f]) => s.includes(k) || f.label?.toLowerCase().includes(k) || f.full_label?.toLowerCase().includes(k)).slice(0, 60).map(([s]) => s) : [], [k]), D = (s, f) => /* @__PURE__ */ e.createElement(
|
|
183
|
+
de,
|
|
184
|
+
{
|
|
185
|
+
schema: t,
|
|
186
|
+
key: s + f,
|
|
187
|
+
optKey: s,
|
|
188
|
+
settings: r,
|
|
189
|
+
setSettings: l,
|
|
190
|
+
disabled: P,
|
|
191
|
+
onOptionOpen: p,
|
|
192
|
+
customWidgets: i,
|
|
193
|
+
overridden: x?.includes(s),
|
|
194
|
+
onRevertKey: g
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
return /* @__PURE__ */ e.createElement(X, { css: Y, className: d ? "sp-embedded" : void 0 }, /* @__PURE__ */ e.createElement("div", { className: "settings-panel" }, !u && /* @__PURE__ */ e.createElement("div", { className: "sp-top" }, /* @__PURE__ */ e.createElement("input", { className: "sp-search", placeholder: `Search options (${Object.keys(t).length})…`, value: v, onChange: (s) => o(s.target.value), "data-testid": "opt-search" }), !k && /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("label", { className: "sp-builder" }, /* @__PURE__ */ e.createElement("span", null, "Settings group"), /* @__PURE__ */ e.createElement("select", { value: A, onChange: (s) => {
|
|
198
|
+
C(s.target.value), y(0);
|
|
199
|
+
} }, h.map((s) => /* @__PURE__ */ e.createElement("option", { key: s, value: s }, B(s))))), /* @__PURE__ */ e.createElement("div", { className: "sp-pages" }, z.map((s, f) => /* @__PURE__ */ e.createElement("button", { key: s.page + f, className: f === Math.min(E, z.length - 1) ? "on" : "", onClick: () => y(f) }, s.page))), /* @__PURE__ */ e.createElement("div", { className: "sp-modes" }, ee.map((s) => /* @__PURE__ */ e.createElement("button", { key: s, className: N === s ? "on" : "", onClick: () => _(s) }, s))))), /* @__PURE__ */ e.createElement("div", { className: "sp-body" }, k ? /* @__PURE__ */ e.createElement("section", { "data-testid": "search-results" }, /* @__PURE__ */ e.createElement("h3", null, "Search: “", v, "” — ", S.length, " hit", S.length === 1 ? "" : "s", S.length === 60 ? "+" : ""), S.map(D), !S.length && /* @__PURE__ */ e.createElement("p", { className: "muted" }, "No matches")) : O ? /* @__PURE__ */ e.createElement(e.Fragment, null, !u && /* @__PURE__ */ e.createElement("h2", null, O.page, " ", /* @__PURE__ */ e.createElement("span", { className: "muted" }, "Tab.cpp:", O.line)), O.groups.map((s) => {
|
|
200
|
+
const f = s.options.filter((F) => se(t, F, N) && !(u && F.startsWith("<")));
|
|
201
|
+
return f.length ? /* @__PURE__ */ e.createElement("section", { key: s.group + s.line }, /* @__PURE__ */ e.createElement("h3", null, s.group || "(untitled group)", " ", /* @__PURE__ */ e.createElement("span", { className: "muted" }, ":", s.line)), f.map(D)) : null;
|
|
202
|
+
})) : /* @__PURE__ */ e.createElement("p", { className: "muted" }, "No builder"))));
|
|
203
|
+
}
|
|
204
|
+
export {
|
|
205
|
+
xe as default
|
|
206
|
+
};
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
const it = {
|
|
2
|
+
// OrcaSlicer / PrusaSlicer ;TYPE: names
|
|
3
|
+
"outer wall": 1,
|
|
4
|
+
"external perimeter": 1,
|
|
5
|
+
"inner wall": 1,
|
|
6
|
+
perimeter: 1,
|
|
7
|
+
"internal perimeter": 1,
|
|
8
|
+
"overhang wall": 1,
|
|
9
|
+
"overhang perimeter": 1,
|
|
10
|
+
"sparse infill": 2,
|
|
11
|
+
"internal infill": 2,
|
|
12
|
+
"solid infill": 3,
|
|
13
|
+
"internal solid infill": 3,
|
|
14
|
+
"top solid infill": 3,
|
|
15
|
+
"top surface": 3,
|
|
16
|
+
"bottom surface": 3,
|
|
17
|
+
skirt: 4,
|
|
18
|
+
brim: 4,
|
|
19
|
+
"skirt/brim": 4,
|
|
20
|
+
support: 5,
|
|
21
|
+
"support material": 5,
|
|
22
|
+
"support material interface": 5,
|
|
23
|
+
"support interface": 5,
|
|
24
|
+
"support transition": 5,
|
|
25
|
+
raft: 6,
|
|
26
|
+
"gap fill": 7,
|
|
27
|
+
"gap infill": 7,
|
|
28
|
+
"thin wall": 8,
|
|
29
|
+
bridge: 9,
|
|
30
|
+
"bridge infill": 9,
|
|
31
|
+
"internal bridge": 9,
|
|
32
|
+
"internal bridge infill": 9,
|
|
33
|
+
ironing: 10,
|
|
34
|
+
"prime tower": 11,
|
|
35
|
+
"wipe tower": 11,
|
|
36
|
+
custom: 1,
|
|
37
|
+
// Cura ;TYPE: names
|
|
38
|
+
"wall-outer": 1,
|
|
39
|
+
"wall-inner": 1,
|
|
40
|
+
fill: 2,
|
|
41
|
+
skin: 3,
|
|
42
|
+
"support-interface": 5,
|
|
43
|
+
"prime-tower": 11
|
|
44
|
+
}, nt = [
|
|
45
|
+
["skirt/brim", 4],
|
|
46
|
+
["skirt", 4],
|
|
47
|
+
["walls", 1],
|
|
48
|
+
["thin-wall", 8],
|
|
49
|
+
["gap-fill", 7],
|
|
50
|
+
["bridge", 9],
|
|
51
|
+
["ironing", 10],
|
|
52
|
+
["support", 5],
|
|
53
|
+
["prime tower", 11],
|
|
54
|
+
["wipe_tower_real", 11]
|
|
55
|
+
], st = (w, c) => w === c || c.length < w.length && " (:/".includes(w[c.length]) && w.startsWith(c), at = {
|
|
56
|
+
1: 1,
|
|
57
|
+
2: 1,
|
|
58
|
+
3: 1,
|
|
59
|
+
4: 2,
|
|
60
|
+
5: 3,
|
|
61
|
+
6: 3,
|
|
62
|
+
7: 3,
|
|
63
|
+
8: 10,
|
|
64
|
+
9: 9,
|
|
65
|
+
10: 9,
|
|
66
|
+
11: 7,
|
|
67
|
+
12: 4,
|
|
68
|
+
13: 4,
|
|
69
|
+
14: 5,
|
|
70
|
+
15: 5,
|
|
71
|
+
16: 5,
|
|
72
|
+
17: 11
|
|
73
|
+
};
|
|
74
|
+
function rt(w, c = {}) {
|
|
75
|
+
const V = Math.PI / 4 * (c.filamentDiameter > 0 ? c.filamentDiameter : 1.75) ** 2, tt = c.defaultLayerHeight > 0 ? c.defaultLayerHeight : 0.2;
|
|
76
|
+
let f = 0, u = 0, m = 0, L = 0, x = !0, v = !0, E = 0, P = 1, S = 0, p = null;
|
|
77
|
+
const g = [];
|
|
78
|
+
let z = !1, I = !0, R = NaN, q = 0, H = 0, O = 0;
|
|
79
|
+
const j = /* @__PURE__ */ new Set([0]), W = (s) => {
|
|
80
|
+
p = { z: s, p: [], w: [] }, g.push(p), I = !1, R = NaN, P = 1, S = 0;
|
|
81
|
+
}, et = () => g.length > 1 ? g[g.length - 2].z : 0, C = (s, o, d, b, N, e, t) => {
|
|
82
|
+
const a = Math.hypot(b - s, N - o, e - d);
|
|
83
|
+
if (!(a < 1e-6))
|
|
84
|
+
if (t > 1e-6) {
|
|
85
|
+
O += t, I ? W(Number.isNaN(R) ? e : R) : !z && e > p.z + 1e-3 && W(e);
|
|
86
|
+
const r = P + E * 16;
|
|
87
|
+
p.p.push(s, o, d, r, b, N, e, r);
|
|
88
|
+
const i = Math.max(0.02, p.z - et() || tt), F = S > 0 ? S : t * V / (a * i) + i * (1 - Math.PI / 4);
|
|
89
|
+
p.w.push(Math.min(3, Math.max(0.05, F))), q++;
|
|
90
|
+
} else p && (p.p.push(s, o, d, E * 16, b, N, e, E * 16), p.w.push(0), H++);
|
|
91
|
+
};
|
|
92
|
+
for (const s of w.split(`
|
|
93
|
+
`)) {
|
|
94
|
+
const o = s.indexOf(";"), d = (o < 0 ? s : s.slice(0, o)).trim(), b = o < 0 ? "" : s.slice(o + 1).trim();
|
|
95
|
+
if (b && !d) {
|
|
96
|
+
const t = b.toLowerCase();
|
|
97
|
+
if (t.startsWith("type:")) {
|
|
98
|
+
P = it[t.slice(5).trim()] ?? 1;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (t.startsWith("_extrusion_role:")) {
|
|
102
|
+
P = at[parseInt(t.slice(16), 10)] ?? 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (t.startsWith("width:")) {
|
|
106
|
+
const i = parseFloat(t.slice(6));
|
|
107
|
+
S = i > 0 ? i : 0;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (t.startsWith("layer_change") || t.startsWith("layer:")) {
|
|
111
|
+
z = !0, I = !0;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (t.startsWith("z:")) {
|
|
115
|
+
const i = parseFloat(t.slice(2));
|
|
116
|
+
I && i > 0 && (z = !0, W(i));
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const a = /^layer \d+ z([-\d.]+)/.exec(t);
|
|
120
|
+
if (a) {
|
|
121
|
+
z = !0, W(parseFloat(a[1]));
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const r = nt.find(([i]) => st(t, i));
|
|
125
|
+
r && (P = r[1]);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (!d) continue;
|
|
129
|
+
const N = d.split(/\s+/), e = N[0].toUpperCase();
|
|
130
|
+
if (e === "G90") {
|
|
131
|
+
x = !0;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (e === "G91") {
|
|
135
|
+
x = !1;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (e === "M82") {
|
|
139
|
+
v = !0;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (e === "M83") {
|
|
143
|
+
v = !1;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (/^T\d+$/.test(e)) {
|
|
147
|
+
E = parseInt(e.slice(1), 10), j.add(E);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (e === "G92" || e === "G0" || e === "G1" || e === "G2" || e === "G3") {
|
|
151
|
+
let t = NaN, a = NaN, r = NaN, i = NaN, F = 0, D = 0;
|
|
152
|
+
for (let h = 1; h < N.length; h++) {
|
|
153
|
+
const n = N[h][0], l = parseFloat(N[h].slice(1));
|
|
154
|
+
Number.isNaN(l) || (n === "X" || n === "x" ? t = l : n === "Y" || n === "y" ? a = l : n === "Z" || n === "z" ? r = l : n === "E" || n === "e" ? i = l : n === "I" || n === "i" ? F = l : (n === "J" || n === "j") && (D = l));
|
|
155
|
+
}
|
|
156
|
+
if (e === "G92") {
|
|
157
|
+
Number.isNaN(t) || (f = t), Number.isNaN(a) || (u = a), Number.isNaN(r) || (m = r), Number.isNaN(i) || (L = i);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const k = Number.isNaN(t) ? f : x ? t : f + t, A = Number.isNaN(a) ? u : x ? a : u + a, Z = Number.isNaN(r) ? m : x ? r : m + r, K = Number.isNaN(i) ? 0 : v ? i - L : i;
|
|
161
|
+
if (e === "G2" || e === "G3") {
|
|
162
|
+
const h = f + F, n = u + D, l = Math.hypot(f - h, u - n), _ = Math.atan2(u - n, f - h);
|
|
163
|
+
let M = Math.atan2(A - n, k - h);
|
|
164
|
+
const T = e === "G3";
|
|
165
|
+
T && M <= _ + 1e-6 && (M += 2 * Math.PI), !T && M >= _ - 1e-6 && (M -= 2 * Math.PI);
|
|
166
|
+
const y = Math.max(1, Math.min(360, Math.ceil(Math.abs(M - _) * l / 0.3)));
|
|
167
|
+
let X = f, Y = u, J = m;
|
|
168
|
+
for (let G = 1; G <= y; G++) {
|
|
169
|
+
const U = _ + (M - _) * G / y, $ = G === y ? k : h + l * Math.cos(U), B = G === y ? A : n + l * Math.sin(U), Q = m + (Z - m) * G / y;
|
|
170
|
+
C(X, Y, J, $, B, Q, K / y), X = $, Y = B, J = Q;
|
|
171
|
+
}
|
|
172
|
+
} else
|
|
173
|
+
C(f, u, m, k, A, Z, K);
|
|
174
|
+
f = k, u = A, m = Z, Number.isNaN(i) || (L = v ? i : L + i);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
layers: g.map((s) => ({ z: s.z, paths: Float32Array.from(s.p), widths: Float32Array.from(s.w) })),
|
|
179
|
+
stats: {
|
|
180
|
+
layers: g.length,
|
|
181
|
+
path_segments: q,
|
|
182
|
+
travel_segments: H,
|
|
183
|
+
filament_mm: O,
|
|
184
|
+
tools: [...j].sort((s, o) => s - o)
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
export {
|
|
189
|
+
rt as parseGcode
|
|
190
|
+
};
|