From 2a69c932d2780cb1e7208a4f7e7ac8f158e5feec Mon Sep 17 00:00:00 2001 From: bartoolina Date: Wed, 17 Dec 2025 13:56:55 +0100 Subject: [PATCH] dodalem pliki z machine_setup_files --- custom_config.yml | 83 + pbsplash.png | Bin 0 -> 136130 bytes probe_basic.var | 210 ++ probe_basic_postgui.hal | 25 + probe_basic_required_ini_items.ini | 38 + python/remap.py | 19 + python/stdglue.py | 165 ++ python/toplevel.py | 19 + subroutines/clamptool.ngc | 12 + subroutines/extendatc.ngc | 27 + subroutines/go_to_g30.ngc | 10 + subroutines/go_to_home.ngc | 20 + subroutines/go_to_zero.ngc | 20 + subroutines/load_spindle_safety.ngc | 48 + subroutines/load_spindle_safety_2.ngc | 48 + subroutines/m10.ngc | 39 + subroutines/m11.ngc | 50 + subroutines/m12.ngc | 50 + subroutines/m13.ngc | 42 + subroutines/m21.ngc | 45 + subroutines/m22.ngc | 42 + subroutines/m23.ngc | 0 subroutines/m24.ngc | 14 + subroutines/m25.ngc | 15 + subroutines/m26.ngc | 0 subroutines/m6_tool_call_atc_page.ngc | 25 + subroutines/m6_tool_call_main_panel.ngc | 26 + subroutines/m6_tool_call_tool_page.ngc | 26 + subroutines/move_head_above_carousel.ngc | 19 + subroutines/move_tool_to_carousel_height.ngc | 18 + subroutines/on_abort.ngc | 9 + subroutines/orientspindle.ngc | 11 + subroutines/probe_back_left_inside_corner.ngc | 122 + subroutines/probe_back_left_top_corner.ngc | 118 + .../probe_back_right_inside_corner.ngc | 122 + subroutines/probe_back_right_top_corner.ngc | 117 + subroutines/probe_back_top_side.ngc | 91 + subroutines/probe_cal_reset.ngc | 8 + subroutines/probe_cal_round_boss.ngc | 329 +++ subroutines/probe_cal_round_pocket.ngc | 223 ++ subroutines/probe_cal_square_boss.ngc | 224 ++ subroutines/probe_cal_square_pocket.ngc | 178 ++ .../probe_corner_x_minus_edge_angle.ngc | 173 ++ .../probe_corner_x_plus_edge_angle.ngc | 173 ++ .../probe_corner_y_minus_edge_angle.ngc | 173 ++ .../probe_corner_y_plus_edge_angle.ngc | 173 ++ .../probe_front_left_inside_corner.ngc | 123 + subroutines/probe_front_left_top_corner.ngc | 119 + .../probe_front_right_inside_corner.ngc | 123 + subroutines/probe_front_right_top_corner.ngc | 120 + subroutines/probe_front_top_side.ngc | 92 + subroutines/probe_left_top_side.ngc | 92 + subroutines/probe_rect_boss.ngc | 185 ++ subroutines/probe_rect_pocket.ngc | 139 ++ .../probe_rect_pocket_center_start.ngc | 121 + subroutines/probe_ridge_x.ngc | 129 + subroutines/probe_ridge_y.ngc | 129 + subroutines/probe_right_top_side.ngc | 91 + subroutines/probe_round_boss.ngc | 293 +++ subroutines/probe_round_pocket.ngc | 184 ++ .../probe_round_pocket_center_start.ngc | 167 ++ subroutines/probe_spindle_nose.ngc | 77 + subroutines/probe_top_back_edge_angle.ngc | 131 + subroutines/probe_top_front_edge_angle.ngc | 131 + subroutines/probe_top_left_edge_angle.ngc | 131 + subroutines/probe_top_right_edge_angle.ngc | 131 + subroutines/probe_valley_x.ngc | 109 + subroutines/probe_valley_x_center_start.ngc | 91 + subroutines/probe_valley_y.ngc | 107 + subroutines/probe_valley_y_center_start.ngc | 91 + subroutines/probe_x_minus.ngc | 85 + subroutines/probe_x_minus_wco.ngc | 105 + subroutines/probe_x_plus.ngc | 85 + subroutines/probe_x_plus_wco.ngc | 105 + subroutines/probe_y_minus.ngc | 85 + subroutines/probe_y_minus_wco.ngc | 105 + subroutines/probe_y_plus.ngc | 85 + subroutines/probe_y_plus_wco.ngc | 105 + subroutines/probe_z_minus_sub.ngc | 84 + subroutines/probe_z_minus_wco.ngc | 91 + subroutines/program_coolant.ngc | 45 + subroutines/rack_id_calc.ngc | 139 ++ subroutines/reset_all_data.ngc | 41 + subroutines/retractatc.ngc | 15 + subroutines/set_g30_position.ngc | 19 + subroutines/store_tool_in_carousel.ngc | 16 + subroutines/surface_scan_param_update.ngc | 21 + subroutines/surface_test.ngc | 44 + subroutines/tool_setter_param_update.ngc | 45 + subroutines/tool_touch_off.ngc | 101 + subroutines/toolchange.ngc | 137 ++ subroutines/toolsetter_wco.ngc | 95 + subroutines/touch_probe_param_update.ngc | 75 + subroutines/unclamptool.ngc | 12 + subroutines/unload_spindle.ngc | 17 + .../update_programmable_coolant_params.ngc | 22 + subroutines/x_data_reset.ngc | 17 + subroutines/y_data_reset.ngc | 17 + .../template_user_atc_buttons.py | 23 + .../template_user_atc_buttons.ui | 868 +++++++ .../template_user_atc_buttons_ui.py | 445 ++++ .../template_user_rack_atc_buttons.py | 23 + .../template_user_rack_atc_buttons.ui | 699 ++++++ .../template_user_rack_atc_buttons_ui.py | 354 +++ .../template_user_buttons.py | 23 + .../template_user_buttons.ui | 410 ++++ .../template_user_buttons_ui.py | 205 ++ user_dro_display/user_dros/dros_user.py | 23 + user_dro_display/user_dros/dros_user.ui | 2148 +++++++++++++++++ user_dro_display/user_dros/dros_user_ui.py | 1047 ++++++++ .../user_dros/offset_dros_user.ui | 2024 ++++++++++++++++ .../user_dros/offset_dros_user_ui.py | 1085 +++++++++ user_dro_display/xyz_dros/dros_xyz.py | 23 + user_dro_display/xyz_dros/dros_xyz.ui | 1353 +++++++++++ user_dro_display/xyz_dros/dros_xyz_ui.py | 654 +++++ user_dro_display/xyz_dros/offset_dros_xyz.ui | 1026 ++++++++ .../xyz_dros/offset_dros_xyz_ui.py | 560 +++++ user_dro_display/xyza_dros/dros_xyza.py | 23 + user_dro_display/xyza_dros/dros_xyza.ui | 1639 +++++++++++++ user_dro_display/xyza_dros/dros_xyza_ui.py | 795 ++++++ .../xyza_dros/offset_dros_xyza.ui | 1363 +++++++++++ .../xyza_dros/offset_dros_xyza_ui.py | 734 ++++++ user_dro_display/xyzab_dros/dros_xyzab.py | 23 + user_dro_display/xyzab_dros/dros_xyzab.ui | 1846 ++++++++++++++ user_dro_display/xyzab_dros/dros_xyzab_ui.py | 900 +++++++ .../xyzab_dros/offset_dros_xyzab.ui | 1686 +++++++++++++ .../xyzab_dros/offset_dros_xyzab_ui.py | 907 +++++++ user_dro_display/xyzac_dros/dros_xyzac.py | 23 + user_dro_display/xyzac_dros/dros_xyzac.ui | 1849 ++++++++++++++ user_dro_display/xyzac_dros/dros_xyzac_ui.py | 901 +++++++ .../xyzac_dros/offset_dros_xyzac.ui | 1701 +++++++++++++ .../xyzac_dros/offset_dros_xyzac_ui.py | 912 +++++++ user_dro_display/xyzbc_dros/dros_xyzbc.py | 23 + user_dro_display/xyzbc_dros/dros_xyzbc.ui | 1862 ++++++++++++++ user_dro_display/xyzbc_dros/dros_xyzbc_ui.py | 906 +++++++ .../xyzbc_dros/offset_dros_xyzbc.ui | 1702 +++++++++++++ .../xyzbc_dros/offset_dros_xyzbc_ui.py | 913 +++++++ user_tabs/template_main/template_main.py | 23 + user_tabs/template_main/template_main.ui | 28 + user_tabs/template_main/template_main_ui.py | 26 + .../template_sidebar/template_sidebar.py | 23 + .../template_sidebar/template_sidebar.ui | 28 + .../template_sidebar/template_sidebar_ui.py | 26 + 143 files changed, 42173 insertions(+) create mode 100644 custom_config.yml create mode 100644 pbsplash.png create mode 100644 probe_basic.var create mode 100644 probe_basic_postgui.hal create mode 100644 probe_basic_required_ini_items.ini create mode 100644 python/remap.py create mode 100644 python/stdglue.py create mode 100644 python/toplevel.py create mode 100644 subroutines/clamptool.ngc create mode 100644 subroutines/extendatc.ngc create mode 100644 subroutines/go_to_g30.ngc create mode 100644 subroutines/go_to_home.ngc create mode 100644 subroutines/go_to_zero.ngc create mode 100644 subroutines/load_spindle_safety.ngc create mode 100644 subroutines/load_spindle_safety_2.ngc create mode 100644 subroutines/m10.ngc create mode 100644 subroutines/m11.ngc create mode 100644 subroutines/m12.ngc create mode 100644 subroutines/m13.ngc create mode 100644 subroutines/m21.ngc create mode 100644 subroutines/m22.ngc create mode 100644 subroutines/m23.ngc create mode 100644 subroutines/m24.ngc create mode 100644 subroutines/m25.ngc create mode 100644 subroutines/m26.ngc create mode 100644 subroutines/m6_tool_call_atc_page.ngc create mode 100644 subroutines/m6_tool_call_main_panel.ngc create mode 100644 subroutines/m6_tool_call_tool_page.ngc create mode 100644 subroutines/move_head_above_carousel.ngc create mode 100644 subroutines/move_tool_to_carousel_height.ngc create mode 100644 subroutines/on_abort.ngc create mode 100644 subroutines/orientspindle.ngc create mode 100644 subroutines/probe_back_left_inside_corner.ngc create mode 100644 subroutines/probe_back_left_top_corner.ngc create mode 100644 subroutines/probe_back_right_inside_corner.ngc create mode 100644 subroutines/probe_back_right_top_corner.ngc create mode 100644 subroutines/probe_back_top_side.ngc create mode 100644 subroutines/probe_cal_reset.ngc create mode 100644 subroutines/probe_cal_round_boss.ngc create mode 100644 subroutines/probe_cal_round_pocket.ngc create mode 100644 subroutines/probe_cal_square_boss.ngc create mode 100644 subroutines/probe_cal_square_pocket.ngc create mode 100644 subroutines/probe_corner_x_minus_edge_angle.ngc create mode 100644 subroutines/probe_corner_x_plus_edge_angle.ngc create mode 100644 subroutines/probe_corner_y_minus_edge_angle.ngc create mode 100644 subroutines/probe_corner_y_plus_edge_angle.ngc create mode 100644 subroutines/probe_front_left_inside_corner.ngc create mode 100644 subroutines/probe_front_left_top_corner.ngc create mode 100644 subroutines/probe_front_right_inside_corner.ngc create mode 100644 subroutines/probe_front_right_top_corner.ngc create mode 100644 subroutines/probe_front_top_side.ngc create mode 100644 subroutines/probe_left_top_side.ngc create mode 100644 subroutines/probe_rect_boss.ngc create mode 100644 subroutines/probe_rect_pocket.ngc create mode 100644 subroutines/probe_rect_pocket_center_start.ngc create mode 100644 subroutines/probe_ridge_x.ngc create mode 100644 subroutines/probe_ridge_y.ngc create mode 100644 subroutines/probe_right_top_side.ngc create mode 100644 subroutines/probe_round_boss.ngc create mode 100644 subroutines/probe_round_pocket.ngc create mode 100644 subroutines/probe_round_pocket_center_start.ngc create mode 100644 subroutines/probe_spindle_nose.ngc create mode 100644 subroutines/probe_top_back_edge_angle.ngc create mode 100644 subroutines/probe_top_front_edge_angle.ngc create mode 100644 subroutines/probe_top_left_edge_angle.ngc create mode 100644 subroutines/probe_top_right_edge_angle.ngc create mode 100644 subroutines/probe_valley_x.ngc create mode 100644 subroutines/probe_valley_x_center_start.ngc create mode 100644 subroutines/probe_valley_y.ngc create mode 100644 subroutines/probe_valley_y_center_start.ngc create mode 100644 subroutines/probe_x_minus.ngc create mode 100644 subroutines/probe_x_minus_wco.ngc create mode 100644 subroutines/probe_x_plus.ngc create mode 100644 subroutines/probe_x_plus_wco.ngc create mode 100644 subroutines/probe_y_minus.ngc create mode 100644 subroutines/probe_y_minus_wco.ngc create mode 100644 subroutines/probe_y_plus.ngc create mode 100644 subroutines/probe_y_plus_wco.ngc create mode 100644 subroutines/probe_z_minus_sub.ngc create mode 100644 subroutines/probe_z_minus_wco.ngc create mode 100644 subroutines/program_coolant.ngc create mode 100644 subroutines/rack_id_calc.ngc create mode 100644 subroutines/reset_all_data.ngc create mode 100644 subroutines/retractatc.ngc create mode 100644 subroutines/set_g30_position.ngc create mode 100644 subroutines/store_tool_in_carousel.ngc create mode 100644 subroutines/surface_scan_param_update.ngc create mode 100644 subroutines/surface_test.ngc create mode 100644 subroutines/tool_setter_param_update.ngc create mode 100644 subroutines/tool_touch_off.ngc create mode 100644 subroutines/toolchange.ngc create mode 100644 subroutines/toolsetter_wco.ngc create mode 100644 subroutines/touch_probe_param_update.ngc create mode 100644 subroutines/unclamptool.ngc create mode 100644 subroutines/unload_spindle.ngc create mode 100644 subroutines/update_programmable_coolant_params.ngc create mode 100644 subroutines/x_data_reset.ngc create mode 100644 subroutines/y_data_reset.ngc create mode 100644 user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.py create mode 100644 user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.ui create mode 100644 user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons_ui.py create mode 100644 user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.py create mode 100644 user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.ui create mode 100644 user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons_ui.py create mode 100644 user_buttons/template_user_buttons/template_user_buttons.py create mode 100644 user_buttons/template_user_buttons/template_user_buttons.ui create mode 100644 user_buttons/template_user_buttons/template_user_buttons_ui.py create mode 100644 user_dro_display/user_dros/dros_user.py create mode 100644 user_dro_display/user_dros/dros_user.ui create mode 100644 user_dro_display/user_dros/dros_user_ui.py create mode 100644 user_dro_display/user_dros/offset_dros_user.ui create mode 100644 user_dro_display/user_dros/offset_dros_user_ui.py create mode 100644 user_dro_display/xyz_dros/dros_xyz.py create mode 100644 user_dro_display/xyz_dros/dros_xyz.ui create mode 100644 user_dro_display/xyz_dros/dros_xyz_ui.py create mode 100644 user_dro_display/xyz_dros/offset_dros_xyz.ui create mode 100644 user_dro_display/xyz_dros/offset_dros_xyz_ui.py create mode 100644 user_dro_display/xyza_dros/dros_xyza.py create mode 100644 user_dro_display/xyza_dros/dros_xyza.ui create mode 100644 user_dro_display/xyza_dros/dros_xyza_ui.py create mode 100644 user_dro_display/xyza_dros/offset_dros_xyza.ui create mode 100644 user_dro_display/xyza_dros/offset_dros_xyza_ui.py create mode 100644 user_dro_display/xyzab_dros/dros_xyzab.py create mode 100644 user_dro_display/xyzab_dros/dros_xyzab.ui create mode 100644 user_dro_display/xyzab_dros/dros_xyzab_ui.py create mode 100644 user_dro_display/xyzab_dros/offset_dros_xyzab.ui create mode 100644 user_dro_display/xyzab_dros/offset_dros_xyzab_ui.py create mode 100644 user_dro_display/xyzac_dros/dros_xyzac.py create mode 100644 user_dro_display/xyzac_dros/dros_xyzac.ui create mode 100644 user_dro_display/xyzac_dros/dros_xyzac_ui.py create mode 100644 user_dro_display/xyzac_dros/offset_dros_xyzac.ui create mode 100644 user_dro_display/xyzac_dros/offset_dros_xyzac_ui.py create mode 100644 user_dro_display/xyzbc_dros/dros_xyzbc.py create mode 100644 user_dro_display/xyzbc_dros/dros_xyzbc.ui create mode 100644 user_dro_display/xyzbc_dros/dros_xyzbc_ui.py create mode 100644 user_dro_display/xyzbc_dros/offset_dros_xyzbc.ui create mode 100644 user_dro_display/xyzbc_dros/offset_dros_xyzbc_ui.py create mode 100644 user_tabs/template_main/template_main.py create mode 100644 user_tabs/template_main/template_main.ui create mode 100644 user_tabs/template_main/template_main_ui.py create mode 100644 user_tabs/template_sidebar/template_sidebar.py create mode 100644 user_tabs/template_sidebar/template_sidebar.ui create mode 100644 user_tabs/template_sidebar/template_sidebar_ui.py diff --git a/custom_config.yml b/custom_config.yml new file mode 100644 index 0000000..93ff230 --- /dev/null +++ b/custom_config.yml @@ -0,0 +1,83 @@ +# example of a machine specific settings +windows: + mainwindow: + kwargs: + confirm_exit: false + +data_plugins: + tooltable: + provider: qtpyvcp.plugins.tool_table:ToolTable + kwargs: + columns: TZDR + + offsettable: + provider: qtpyvcp.plugins.offset_table:OffsetTable + kwargs: + columns: "XYZR" + +settings: + + # VTK backplot view settings + + backplot.show-grid: + default_value: false + + backplot.show-program-bounds: + default_value: false + + backplot.show-program-labels: + default_value: false + + backplot.show-program-ticks: + default_value: false + + backplot.show-machine-bounds: + default_value: false + + backplot.show-machine-labels: + default_value: false + + backplot.show-machine-ticks: + default_value: false + + backplot.perspective-view: + default_value: false + + backplot.multitool-colors: + default_value: True + + rack-atc-setup.user-param-1: + description: user param label name + default_value: user param 1 + persistent: true + + rack-atc-setup.user-param-2: + description: user param label name + default_value: user param 2 + persistent: true + + rack-atc-setup.user-param-3: + description: user param label name + default_value: user param 3 + persistent: true + + rack-atc-setup.user-param-4: + description: user param label name + default_value: user param 4 + persistent: true + + rack-atc-setup.user-param-5: + description: user param label name + default_value: user param 5 + persistent: true + + tool-setter-probe.user-param-name-1: + description: tool setter user param 1 + default_value: user param 1 + persistent: true + + tool-setter-probe.user-param-name-2: + description: tool setter user param 2 + default_value: user param 2 + persistent: true + diff --git a/pbsplash.png b/pbsplash.png new file mode 100644 index 0000000000000000000000000000000000000000..720d6f967942e25edbf320b57caad83e1f073d25 GIT binary patch literal 136130 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 Xf0TdJ{c7qn1|aZs^>bP0l+XkKipYy- literal 0 HcmV?d00001 diff --git a/probe_basic.var b/probe_basic.var new file mode 100644 index 0000000..4e52f40 --- /dev/null +++ b/probe_basic.var @@ -0,0 +1,210 @@ +3000 0.000000 +3001 0.000000 +3002 0.000000 +3003 0.000000 +3004 0.000000 +3005 0.000000 +3006 0.000000 +3007 0.000000 +3008 0.000000 +3009 0.000000 +3010 0.000000 +3011 0.000000 +3012 0.000000 +3013 0.000000 +3014 0.000000 +3015 0.000000 +3016 0.000000 +3017 0.000000 +3018 0.000000 +3019 0.000000 +3020 0.000000 +3021 0.000000 +3022 0.000000 +3023 0.000000 +3024 0.000000 +3025 0.000000 +3026 0.000000 +3027 0.000000 +3028 0.000000 +3029 0.000000 +3030 0.000000 +3031 0.000000 +3032 0.000000 +3033 0.000000 +3034 0.000000 +3035 0.000000 +3036 0.000000 +3037 0.000000 +3038 0.000000 +3039 0.000000 +3050 0.000000 +3051 0.000000 +3052 0.000000 +3053 0.000000 +3054 0.000000 +3979 0.000000 +3980 6.000000 +3981 0.000000 +3982 0.000000 +3983 0.000000 +3984 0.000000 +3985 0.000000 +3986 0.000000 +3987 0.000000 +3988 0.000000 +3989 0.000000 +3990 0.000000 +3991 0.000000 +3992 0.000000 +3993 0.000000 +3994 0.000000 +3995 0.000000 +3996 0.000000 +3997 0.000000 +3998 0.000000 +3999 0.000000 +4000 0.000000 +4001 0.000000 +4002 0.000000 +4003 0.000000 +4004 0.000000 +4005 0.000000 +4006 0.000000 +4007 0.000000 +4008 0.000000 +4009 0.000000 +4010 0.000000 +4011 0.000000 +4012 0.000000 +4013 0.000000 +4014 0.000000 +4015 0.000000 +4016 0.000000 +4017 0.000000 +4018 0.000000 +4019 0.000000 +4020 0.000000 +4021 0.000000 +4022 0.000000 +4023 0.000000 +4024 0.000000 +5161 0.000000 +5162 0.000000 +5163 0.000000 +5164 0.000000 +5165 0.000000 +5166 0.000000 +5167 0.000000 +5168 0.000000 +5169 0.000000 +5181 0.000000 +5182 0.000000 +5183 0.000000 +5184 0.000000 +5185 0.000000 +5186 0.000000 +5187 0.000000 +5188 0.000000 +5189 0.000000 +5210 0.000000 +5211 0.000000 +5212 0.000000 +5213 0.000000 +5214 0.000000 +5215 0.000000 +5216 0.000000 +5217 0.000000 +5218 0.000000 +5219 0.000000 +5220 1.000000 +5221 0.000000 +5222 0.000000 +5223 0.000000 +5224 0.000000 +5225 0.000000 +5226 0.000000 +5227 0.000000 +5228 0.000000 +5229 0.000000 +5230 0.000000 +5241 0.000000 +5242 0.000000 +5243 0.000000 +5244 0.000000 +5245 0.000000 +5246 0.000000 +5247 0.000000 +5248 0.000000 +5249 0.000000 +5250 0.000000 +5261 0.000000 +5262 0.000000 +5263 0.000000 +5264 0.000000 +5265 0.000000 +5266 0.000000 +5267 0.000000 +5268 0.000000 +5269 0.000000 +5270 0.000000 +5281 0.000000 +5282 0.000000 +5283 0.000000 +5284 0.000000 +5285 0.000000 +5286 0.000000 +5287 0.000000 +5288 0.000000 +5289 0.000000 +5290 0.000000 +5301 0.000000 +5302 0.000000 +5303 0.000000 +5304 0.000000 +5305 0.000000 +5306 0.000000 +5307 0.000000 +5308 0.000000 +5309 0.000000 +5310 0.000000 +5321 0.000000 +5322 0.000000 +5323 0.000000 +5324 0.000000 +5325 0.000000 +5326 0.000000 +5327 0.000000 +5328 0.000000 +5329 0.000000 +5330 0.000000 +5341 0.000000 +5342 0.000000 +5343 0.000000 +5344 0.000000 +5345 0.000000 +5346 0.000000 +5347 0.000000 +5348 0.000000 +5349 0.000000 +5350 0.000000 +5361 0.000000 +5362 0.000000 +5363 0.000000 +5364 0.000000 +5365 0.000000 +5366 0.000000 +5367 0.000000 +5368 0.000000 +5369 0.000000 +5370 0.000000 +5381 0.000000 +5382 0.000000 +5383 0.000000 +5384 0.000000 +5385 0.000000 +5386 0.000000 +5387 0.000000 +5388 0.000000 +5389 0.000000 +5390 0.000000 diff --git a/probe_basic_postgui.hal b/probe_basic_postgui.hal new file mode 100644 index 0000000..762c968 --- /dev/null +++ b/probe_basic_postgui.hal @@ -0,0 +1,25 @@ +loadrt time +loadrt not + +addf time.0 servo-thread +addf not.0 servo-thread + +net prog-running not.0.in <= halui.program.is-idle +net prog-paused halui.program.is-paused => time.0.pause +net cycle-timer time.0.start <= not.0.out +net cycle-seconds qtpyvcp.timerseconds.in <= time.0.seconds +net cycle-minutes qtpyvcp.timerminutes.in <= time.0.minutes +net cycle-hours qtpyvcp.timerhours.in <= time.0.hours +# *** Time items required for Probe Basic to run *** + +# ---manual tool change signals--- +net tool-change-request => qtpyvcp_manualtoolchange.change +net tool-change-confirmed <= qtpyvcp_manualtoolchange.changed +net tool-number => qtpyvcp_manualtoolchange.number + +# *** Probe graphic simulation trigger push probe tip *** +# net probe-in => qtpyvcp.probe-in.out +net probe-in <= qtpyvcp.probe-led.on + +# *** Set line below for actual spindle readout from your hal file *** +# net spindle-rpm-filtered scale_to_rpm.out => qtpyvcp.spindle-encoder-rpm.in diff --git a/probe_basic_required_ini_items.ini b/probe_basic_required_ini_items.ini new file mode 100644 index 0000000..4a0bd35 --- /dev/null +++ b/probe_basic_required_ini_items.ini @@ -0,0 +1,38 @@ +# These ini configuration items are required for probe basic. +# please compare contrast to your machine ini configuration +# and edit any matching existing items and/or add any items +# that are not under the corresponding ini sections. + +[DISPLAY] +DISPLAY = probe_basic +OPEN_FILE = ~/linuxcnc/nc_files/pb_examples/blank.ngc +CONFIG_FILE = custom_config.yml +MAX_FEED_OVERRIDE = 2.000000 # Recommended Setting for Probe Basic +MAX_SPINDLE_OVERRIDE = 2.000000 # Recommended Setting for Probe Basic +MIN_SPINDLE_OVERRIDE = 0.500000 # Recommended Setting for Probe Basic +INTRO_GRAPHIC = pbsplash.png # Recommended Setting for Probe Basic +INTRO_TIME = 5 # Recommended Setting for Probe Basic +INCREMENTS = JOG .01in .001in .0001in # REQUIRED Setting for Probe Basic +GEOMETRY = xyz # REQUIRED Setting for Probe Basic +USER_TABS_PATH = user_tabs/ # REQUIRED Setting for Probe Basic +USER_BUTTONS_PATH = user_buttons/ # REQUIRED Setting for Probe Basic +USER_DROS_PATH = user_dro_display/ # REQUIRED Setting for Probe Basic +DRO_DISPLAY = xyz # REQUIRED Setting for Probe Basic, Options: xyz, xyza, xyzab, xyzac, xyzbc, user +# ATC tab display options, 0 = no atc tab displayed, 1 = Carousel atc display, 2 = rack atc display +ATC_TAB_DISPLAY = 0 +#USER_ATC_BUTTONS_PATH = user_atc_buttons/ + +[RS274NGC] +RS274NGC_STARTUP_CODE = F10 S300 G20 G17 G40 G49 G54 G64 P.001 G80 G90 G91.1 G92.1 G94 G97 G98 +PARAMETER_FILE = linuxcnc.var +OWORD_NARGS = 1 +NO_DOWNCASE_OWORD = 1 +SUBROUTINE_PATH = subroutines + +[HAL] +HALUI = halui +POSTGUI_HALFILE = probe_basic_postgui.hal +TWOPASS = one + +[TRAJ] +AXES = 3 # or number of axes of your machine \ No newline at end of file diff --git a/python/remap.py b/python/remap.py new file mode 100644 index 0000000..f95dc2a --- /dev/null +++ b/python/remap.py @@ -0,0 +1,19 @@ +# This is a component of LinuxCNC +# Copyright 2011, 2012, 2013, 2014 Dewey Garrett , +# Michael Haberler , Norbert Schechner +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +from stdglue import * diff --git a/python/stdglue.py b/python/stdglue.py new file mode 100644 index 0000000..ff7ea5d --- /dev/null +++ b/python/stdglue.py @@ -0,0 +1,165 @@ + +#NOTE: +# The legacy names *selected_pocket* and *current_pocket* actually reference +# a sequential tooldata index for tool items loaded from a tool +# table ([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM) + +# stdglue - canned prolog and epilog functions for the remappable builtin codes (T,M6,M61,S,F) +# +# we dont use argspec to avoid the generic error message of the argspec prolog and give more +# concise ones here + + +import emccanon + +from linuxcnc import version +from interpreter import * +from emccanon import MESSAGE + +throw_exceptions = 1 + +VERSION = version + +# used so screens can get info. +# add this to toplevel to call it: + +# import remap +# def __init__(self): +# if self.task: +# remap.build_hal(self) + +def build_hal(self): + import hal + try: + h=hal.component('remapStat') + h.newpin("tool", hal.HAL_S32, hal.HAL_OUT) + h.newpin("wear", hal.HAL_S32, hal.HAL_OUT) + h.ready() + self.hal_tool_comp = h + except Exception as e: + print(e) + +# REMAP=T prolog=prepare_prolog ngc=prepare epilog=prepare_epilog +# exposed parameters: # # + +def prepare_prolog(self,**words): + try: + cblock = self.blocks[self.remap_level] + if not cblock.t_flag: + self.set_errormsg("T requires a tool number") + return INTERP_ERROR + tool = cblock.t_number + if tool: + (status, pocket) = self.find_tool_pocket(tool) + if status != INTERP_OK: + self.set_errormsg("T%d: pocket not found" % (tool)) + return status + else: + pocket = -1 # this is a T0 - tool unload + self.params["tool"] = tool + self.params["pocket"] = pocket + return INTERP_OK + except Exception as e: + self.set_errormsg("T%d/prepare_prolog: %s" % (int(words['t']), e)) + return INTERP_ERROR + +def prepare_epilog(self, **words): + try: + if not self.value_returned: + r = self.blocks[self.remap_level].executing_remap + self.set_errormsg("the %s remap procedure %s did not return a value" + % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py)) + return INTERP_ERROR + if self.blocks[self.remap_level].builtin_used: + #print "---------- T builtin recursion, nothing to do" + return INTERP_OK + else: + if self.return_value > 0: + self.selected_tool = int(self.params["tool"]) + self.selected_pocket = int(self.params["pocket"]) + emccanon.SELECT_TOOL(self.selected_tool) + return INTERP_OK + else: + self.set_errormsg("T%d: aborted (return code %.1f)" % (int(self.params["tool"]),self.return_value)) + return INTERP_ERROR + except Exception as e: + self.set_errormsg("T%d/prepare_epilog: %s" % (tool,e)) + return INTERP_ERROR + +# REMAP=M6 modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog +# exposed parameters: +# # +# # +# # +# # + +def change_prolog(self, **words): + try: + # this is relevant only when using iocontrol-v2. + if self.params[5600] > 0.0: + if self.params[5601] < 0.0: + self.set_errormsg("Toolchanger hard fault %d" % (int(self.params[5601]))) + return INTERP_ERROR + print("change_prolog: Toolchanger soft fault %d" % int(self.params[5601])) + + if self.selected_pocket < 0: + self.set_errormsg("M6: no tool prepared") + return INTERP_ERROR + if self.cutter_comp_side: + self.set_errormsg("Cannot change tools with cutter radius compensation on") + return INTERP_ERROR + self.params["tool_in_spindle"] = self.current_tool + self.params["selected_tool"] = self.selected_tool + self.params["current_pocket"] = self.current_pocket + self.params["selected_pocket"] = self.selected_pocket + return INTERP_OK + except Exception as e: + self.set_errormsg("M6/change_prolog: %s" % (e)) + return INTERP_ERROR + +def change_epilog(self, **words): + try: + if not self.value_returned: + r = self.blocks[self.remap_level].executing_remap + self.set_errormsg("the %s remap procedure %s did not return a value" + % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py)) + yield INTERP_ERROR + # this is relevant only when using iocontrol-v2. + if self.params[5600] > 0.0: + if self.params[5601] < 0.0: + self.set_errormsg("Toolchanger hard fault %d" % (int(self.params[5601]))) + yield INTERP_ERROR + print("change_epilog: Toolchanger soft fault %d" % int(self.params[5601])) + + if self.blocks[self.remap_level].builtin_used: + #print "---------- M6 builtin recursion, nothing to do" + yield INTERP_OK + else: + if self.return_value > 0.0: + + # commit change + + self.selected_pocket = int(self.params["selected_pocket"]) + + if "2.9" in VERSION: + emccanon.CHANGE_TOOL(self.selected_pocket) + elif "2.10" in VERSION: + emccanon.SELECT_TOOL(self.selected_tool) + emccanon.CHANGE_TOOL() + + self.current_pocket = self.selected_pocket + self.selected_pocket = -1 + self.selected_tool = -1 + # cause a sync() + self.set_tool_parameters() + self.toolchange_flag = True + yield INTERP_EXECUTE_FINISH + else: + # yield to print any messages from the NGC program + yield INTERP_EXECUTE_FINISH + self.set_errormsg("M6 aborted (return code %.1f)" % (self.return_value)) + yield INTERP_ERROR + except Exception as e: + self.set_errormsg("M6/change_epilog: %s" % (e)) + yield INTERP_ERROR + diff --git a/python/toplevel.py b/python/toplevel.py new file mode 100644 index 0000000..299cba5 --- /dev/null +++ b/python/toplevel.py @@ -0,0 +1,19 @@ +# This is a component of LinuxCNC +# Copyright 2011, 2013, 2014 Dewey Garrett , +# Michael Haberler , Norbert Schechner +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +import remap diff --git a/subroutines/clamptool.ngc b/subroutines/clamptool.ngc new file mode 100644 index 0000000..8b1a7b1 --- /dev/null +++ b/subroutines/clamptool.ngc @@ -0,0 +1,12 @@ +o sub + +M65 P2 ; clamp the tool + +M66 P5 L3 Q2 ; check the clamped tool sensor +o100 if [#5399 LT 0] + (abort, Failed to release tool) ; abort if the sensor does not activate in 2 seconds +o100 endif + +o endsub [1] + +M2 diff --git a/subroutines/extendatc.ngc b/subroutines/extendatc.ngc new file mode 100644 index 0000000..2bdc02c --- /dev/null +++ b/subroutines/extendatc.ngc @@ -0,0 +1,27 @@ +o sub + +; # is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT) +; # is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT) + +# = -3.9000 +o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]] + # = #<_ini[atc]z_tool_change_height> +o100 endif +# = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01] +o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]] + # = #<_ini[atc]z_tool_clearance_height> +o110 endif + +G0 G53 Z# ; move z to clear height + +M65 P1 ; Turn off carousel home solenoid +M64 P0 ; Move Carousel OUT +M66 P1 L3 Q5 ; check for carousel out position sensor +o120 if [#5399 LT 0] + M65 P0 ; switch off atc out solenoid + (abort, ATC not in position) +o120 endif + +o endsub [1] + +M2 diff --git a/subroutines/go_to_g30.ngc b/subroutines/go_to_g30.ngc new file mode 100644 index 0000000..71956e0 --- /dev/null +++ b/subroutines/go_to_g30.ngc @@ -0,0 +1,10 @@ +o sub + +M73 +G90 +G53 G0 Z0 +G30 + +o endsub + +M2 diff --git a/subroutines/go_to_home.ngc b/subroutines/go_to_home.ngc new file mode 100644 index 0000000..2756d9f --- /dev/null +++ b/subroutines/go_to_home.ngc @@ -0,0 +1,20 @@ +o sub + +M73 +G90 +G53 G0 Z0 +G53 G0 X0 Y0 + +o100 if [EXISTS[#<_ini[traj]axes>]] + # = #<_ini[traj]axes> +o100 endif + +o110 if [# EQ 4] + G53 G0 A0 +o110 else if [# EQ 5] + G53 G0 A0 C0 +o110 endif + +o endsub + +M2 diff --git a/subroutines/go_to_zero.ngc b/subroutines/go_to_zero.ngc new file mode 100644 index 0000000..289a6d7 --- /dev/null +++ b/subroutines/go_to_zero.ngc @@ -0,0 +1,20 @@ +o sub + +M73 +G90 +G53 G0 Z0 +G0 X0 Y0 + +o100 if [EXISTS[#<_ini[traj]axes>]] + # = #<_ini[traj]axes> +o100 endif + +o110 if [# EQ 4] + G0 A0 +o110 else if [# EQ 5] + G0 A0 C0 +o110 endif + +o endsub + +M2 diff --git a/subroutines/load_spindle_safety.ngc b/subroutines/load_spindle_safety.ngc new file mode 100644 index 0000000..fafb7f5 --- /dev/null +++ b/subroutines/load_spindle_safety.ngc @@ -0,0 +1,48 @@ +(author: Chris P) +(version: 0.5) +(date: 06/27/24) + +(load tool in spindle safety macro) +; This is called form the ATC page +; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently) +; Parameters #4001 to #4024 are used to track which tool is in which pocket (persistently) +; Parameter #4000 is not populated just used in the maths to calculate the above numbers +; #: The number of pockets the ATC platter has, This is user set in the INI file via #<_ini[atc]pockets> + +o sub +(PRINT, o) + +# = #1 ; this is the value form the ATC tab +# = #3014 + +; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings +# = 12 +o101 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o101 endif + +#10 = 0 +#11 = 0 ; 1 if tool is already stored in carousel + +o110 while [#10 LT #] + #10 = [#10+1] + o120 if [# EQ #[4000 + #10]] + (DEBUG, the tool you are trying to load is already stored in carousel pocket %d#10) + #11 = 1 + o120 endif +o110 endwhile + +o130 if [#11 EQ 0] + M61 Q# G43 H# + #3991 = # +o130 endif + +o140 if [# EQ #] + S0 M5 +o140 endif + +o call + +o endsub + +M2 (end program) diff --git a/subroutines/load_spindle_safety_2.ngc b/subroutines/load_spindle_safety_2.ngc new file mode 100644 index 0000000..c4e879b --- /dev/null +++ b/subroutines/load_spindle_safety_2.ngc @@ -0,0 +1,48 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(load tool in spindle safety macro) +; This is called form the Tool page +; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently) +; Parameters #4001 to #4024 are used to track which tool is in which pocket (persistently) +; Parameter #4000 is not populated just used in the maths to calculate the above numbers +; #: The number of pockets the ATC platter has, This is user set in the INI file via #<_ini[atc]pockets> + +o sub +(PRINT, o) + +# = #1 ; this is the value form the TOOL tab +# = #3014 + +; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings +# = 12 +o101 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o101 endif + +#10 = 0 +#11 = 0 ; 1 if tool is already stored in carousel + +o110 while [#10 LT #] + #10 = [#10+1] + o120 if [# EQ #[4000 + #10]] + (DEBUG, the tool you are trying to load is already stored in carousel pocket %d#10) + #11 = 1 + o120 endif +o110 endwhile + +o130 if [#11 EQ 0] + M61 Q# G43 H# + #3991 = # +o130 endif + +o140 if [# EQ #] + S0 M5 +o140 endif + +o call + +o endsub + +M2 (end program) diff --git a/subroutines/m10.ngc b/subroutines/m10.ngc new file mode 100644 index 0000000..c868b5a --- /dev/null +++ b/subroutines/m10.ngc @@ -0,0 +1,39 @@ +o sub + +; Move tool carousel best direction to pocket P +; Parameter #3989 is used to track if the carousel is homed (M13) (volatile) +; Parameter #3990 is used to track the current tool pocket (persistently) +; #: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets> +(PRINT, o P#

) + +o100 if [#3989 NE 1] + M13 +o100 endif + +; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings +# = 12 +o110 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o110 endif + +# = [#3990 - #

] +(PRINT, o P#

, steps=#) +o120 if [# GT [# / 2]] + #=[# - #] +o120 endif + +o130 if [# LT -[# / 2]] + #=[# + #] +o130 endif + +o140 if [# GT 0] + M12 P[#] +o140 elseif [# LT 0] + #=[# * -1] + M11 P[#] +o140 endif + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m11.ngc b/subroutines/m11.ngc new file mode 100644 index 0000000..24860d5 --- /dev/null +++ b/subroutines/m11.ngc @@ -0,0 +1,50 @@ +o sub + +; Move tool carousel CW Parameter P number of steps +; Without parameter one step CW. +; Parameter #3989 is used to track if the carousel is homed (M13) (volatile) +; Parameter #3990 is used to track the current tool pocket (persistently) +; #: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets> +(PRINT, o P#

) + +o100 if [#3989 NE 1] + (PRINT, atc not homed, homing) + M13 +o100 endif + +; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings +# = 12 +o110 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o110 endif + +o120 if [EXISTS[#

]] + # = #

+o120 else + # = 1 + (tells the atc widget move 1 step forward) +o120 endif + +(tells the atc widget how many steps to move and start moving forward) +(DEBUG, EVAL[vcp.getWidget{"dynatc"}.rotate{#, "cw"}]) + +M64 P4 ; Move atc motor FWD + +o130 do + M66 P4 L1 Q3 ; wait for rising edge on rotation index + o131 if [#5399 LT 0] + M65 P4 ; Stop atc motor + (abort, Failed to get rotation index) + o131 endif + #3990 = [[[#3990+2] MOD #]-1] ; Pocket is no.1-# + # = [#-1] +o130 while [# GT 0] + +M65 P4 ; Stop motor + +#<_my_current_pocket> = #3990 + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m12.ngc b/subroutines/m12.ngc new file mode 100644 index 0000000..5159535 --- /dev/null +++ b/subroutines/m12.ngc @@ -0,0 +1,50 @@ +o sub + +; Move tool carousel CCW Parameter P number of steps +; Without parameter one step CCW. +; Parameter #3989 is used to track if the carousel is homed (M13) (volatile) +; Parameter #3990 is used to track the current tool pocket (persistently) +; #: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets> +(PRINT, o P#

) + +o100 if [#3989 NE 1] + (PRINT, atc not homed, homing) + M13 +o100 endif + +; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings +# = 12 +o110 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o110 endif + +o120 if [EXISTS[#

]] + # = #

+o120 else + #=1 + (tells the atc widget move 1 step reverse) +o120 endif + +(tells the atc widget how many steps to move and start moving reverse) +(DEBUG, EVAL[vcp.getWidget{"dynatc"}.rotate{#, "ccw"}]) + +M64 P3 ; Move atc motor REV + +o130 do + M66 P4 L1 Q3 ; wait for rising edge on rotation index + o131 if [#5399 LT 0] + M65 P3 ; Stop atc motor + (abort, Failed to get rotation index) + o131 endif + #3990 = [[[#3990-2] MOD #]+1] ; Pocket is no.1-# + # = [#-1] +o130 while [# GT 0] + +M65 P3 ; Stop motor + +#<_my_current_pocket> = #3990 + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m13.ngc b/subroutines/m13.ngc new file mode 100644 index 0000000..e5f3110 --- /dev/null +++ b/subroutines/m13.ngc @@ -0,0 +1,42 @@ +o sub + +; Move tool carousel CW until ATC zero +; Parameter #3989 is used to track if the carousel is homed (M13) (volatile) +; Parameter #3990 is used to track the current tool pocket (persistently) +; #: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets> +(PRINT, o) + +(DEBUG, EVAL[vcp.getWidget{"dynatc"}.atc_message{"REFERENCING"}]) + +M64 P4 ; Move Motor FWD +M66 P4 L1 Q20 ; wait for rising edge on home index +o100 if [#5399 LT 0] + M65 P4 ; stop motor + (abort, Failed to home carousel) +o100 endif + +#3990 = 1 +M65 P4 ; Stop motor +#3989 = 1 + +(DEBUG, EVAL[vcp.getWidget{"dynatc"}.atc_message{}]) + +# = 12 +o110 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o110 endif + +#1 = 0 + +o120 while [#1 LT #] + #1 = [#1+1] + #2 = #[4000+#1] + (DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#1, #2}]) +o120 endwhile + +M61 Q#3991 G43 H#3991 + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m21.ngc b/subroutines/m21.ngc new file mode 100644 index 0000000..4c146a8 --- /dev/null +++ b/subroutines/m21.ngc @@ -0,0 +1,45 @@ +o sub + +; Move Carousel to the tool change position - OUT +; then unload any tool in the spindle into the current pocket +; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently) +; # is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT) +; # is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT) +(PRINT, o) + +# = -3.9000 +o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]] + # = #<_ini[atc]z_tool_change_height> +o100 endif +# = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01] +o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]] + # = #<_ini[atc]z_tool_clearance_height> +o110 endif + +M65 P1 ; switch off carousel in solenoid +M66 P1 L3 Q1 + +M5 M9 +G90 +G0 G53 Z# ; rapid move to above the tool change height + +;M19 R0 Q3 ; orient spindle + +M64 P0 ; Move Carousel out +M66 P1 L3 Q5 ; check for carousel out sensor +o120 if [#5399 LT 0] + M65 P0 ; switch off atc out solenoid + (abort, ATC not in position) +o120 endif + +M24 ; activate drawbar, release the tool +M5 ; turn off spindle lock + +G0 G53 Z# ; move z to clear height + +#3991 = 0; save fact there is now no tool in the spindle + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m22.ngc b/subroutines/m22.ngc new file mode 100644 index 0000000..605338e --- /dev/null +++ b/subroutines/m22.ngc @@ -0,0 +1,42 @@ +o sub + +; Move Carousel to the home position - IN +; after loading any tool in the current pocket to the spindle +; # is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT) +; # is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT) +(PRINT, o) + +# = -3.9000 +o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]] + # = #<_ini[atc]z_tool_change_height> +o100 endif +# = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01] +o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]] + # = #<_ini[atc]z_tool_clearance_height> +o110 endif + +;M19 R0 Q2 +M24 +;M19 R0 Q1 +;G90 +G0 G53 Z# ; rapid move to above the tool change height +M65 P2 ; release the drawbar to clamp the tool +M5 +M66 P5 L3 Q1 ; check the tool clamped sensor +o120 if [#5399 LT 0] + (abort, Failed to reclamp tool) +o120 endif + +M65 P0 ; Move Carousel home +M66 P0 L3 Q4 ; check carousel in position sensor +o130 if [#5399 LT 0] + M65 P1 ; turn off the solenoid to send atc home + (abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds +o130 endif + +;M65 P1 ; Turn off carousel home position solenoid + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m23.ngc b/subroutines/m23.ngc new file mode 100644 index 0000000..e69de29 diff --git a/subroutines/m24.ngc b/subroutines/m24.ngc new file mode 100644 index 0000000..3745496 --- /dev/null +++ b/subroutines/m24.ngc @@ -0,0 +1,14 @@ +o sub +(PRINT, o) + +M64 P2 ; unclamp the tool +M66 P2 L3 Q2 ; check the unclamped tool sensor +o100 if [#5399 LT 0] + M65 P2 ; turn off the drawbar + (abort, failed to release tool) ; abort if the sensor does not activate in 3 seconds +o100 endif + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m25.ngc b/subroutines/m25.ngc new file mode 100644 index 0000000..a1a7ac9 --- /dev/null +++ b/subroutines/m25.ngc @@ -0,0 +1,15 @@ +o sub +(PRINT, o) + +M64 P0 ; Move Carousel out + +M66 P1 L3 Q5 ; check for carousel out sensor +o100 if [#5399 LT 0] + M65 P0 ; switch off atc out solenoid + (abort, ATC not in position) +o100 endif + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/m26.ngc b/subroutines/m26.ngc new file mode 100644 index 0000000..e69de29 diff --git a/subroutines/m6_tool_call_atc_page.ngc b/subroutines/m6_tool_call_atc_page.ngc new file mode 100644 index 0000000..5a32dcf --- /dev/null +++ b/subroutines/m6_tool_call_atc_page.ngc @@ -0,0 +1,25 @@ +(author: Chris P) +(version: 0.3) +(date: 06/27/24) + +(m6 tool call with g43 offset applied) + +o sub + +# = #1 +# = #3014 + +T# M6 +o100 if [1 EQ 1] + G43 H# +o100 endif + +o110 if [# EQ #] + S0 M5 +o110 endif + +o call + +o endsub + +M2 (end program) diff --git a/subroutines/m6_tool_call_main_panel.ngc b/subroutines/m6_tool_call_main_panel.ngc new file mode 100644 index 0000000..2f32dec --- /dev/null +++ b/subroutines/m6_tool_call_main_panel.ngc @@ -0,0 +1,26 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(m6 tool call with g43 offset applied) + +o sub + +# = #1 +# = #3014 + +T# M6 + +o100 if [1 EQ 1] + G43 H# +o100 endif + +o110 if [# EQ #] + S0 M5 +o110 endif + +o call + +o endsub + +M2 (end program) diff --git a/subroutines/m6_tool_call_tool_page.ngc b/subroutines/m6_tool_call_tool_page.ngc new file mode 100644 index 0000000..2765e6c --- /dev/null +++ b/subroutines/m6_tool_call_tool_page.ngc @@ -0,0 +1,26 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(m6 tool call with g43 offset applied) + +o sub + +# = #1 +# = #3014 + +T# M6 + +o100 if [1 EQ 1] + G43 H# +o100 endif + +o110 if [# EQ #] + S0 M5 +o110 endif + +o call + +o endsub + +M2 (end program) diff --git a/subroutines/move_head_above_carousel.ngc b/subroutines/move_head_above_carousel.ngc new file mode 100644 index 0000000..61d754f --- /dev/null +++ b/subroutines/move_head_above_carousel.ngc @@ -0,0 +1,19 @@ +o sub + +; # is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT) +; # is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT) + +# = -3.9000 +o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]] + # = #<_ini[atc]z_tool_change_height> +o100 endif +# = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01] +o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]] + # = #<_ini[atc]z_tool_clearance_height> +o110 endif + +G0 G53 Z# ; move z to clear height + +o endsub [1] + +M2 diff --git a/subroutines/move_tool_to_carousel_height.ngc b/subroutines/move_tool_to_carousel_height.ngc new file mode 100644 index 0000000..42144db --- /dev/null +++ b/subroutines/move_tool_to_carousel_height.ngc @@ -0,0 +1,18 @@ +o sub +; # is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT) +; # is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT) + +# = -3.9000 +o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]] + # = #<_ini[atc]z_tool_change_height> +o100 endif +# = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01] +o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]] + # = #<_ini[atc]z_tool_clearance_height> +o110 endif + +G0 G53 Z# ; rapid move to above the tool change height + +o endsub [1] + +M2 diff --git a/subroutines/on_abort.ngc b/subroutines/on_abort.ngc new file mode 100644 index 0000000..da9f690 --- /dev/null +++ b/subroutines/on_abort.ngc @@ -0,0 +1,9 @@ +% +o sub + +G90 +G40 +G49 + +o endsub +% diff --git a/subroutines/orientspindle.ngc b/subroutines/orientspindle.ngc new file mode 100644 index 0000000..1776e94 --- /dev/null +++ b/subroutines/orientspindle.ngc @@ -0,0 +1,11 @@ +o sub +; Orient the spindle with platter +(PRINT, o) + +M5 M9 ; stop all spindle motion and coolant +M19 R0 Q4 ; orient spindle +M5 ; turn off spindle lock + +o endsub [1] + +M2 diff --git a/subroutines/probe_back_left_inside_corner.ngc b/subroutines/probe_back_left_inside_corner.ngc new file mode 100644 index 0000000..59fd36a --- /dev/null +++ b/subroutines/probe_back_left_inside_corner.ngc @@ -0,0 +1,122 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe back left inside corner for x,y,z 0,0,0 position) +(Start probe position is over back left inside corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Traverse Workpiece Top at Z Clearance Height plane) + G91 + F[#] + G38.3 X[#] Y-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + G90 + (Current X Position including offsets in current program units) + # = #5420 + + (Call sub "probe_x_minus_sub" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (move to X start Position) + G90 + F[#] + G38.3 X[#] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (move to Y start Position) + G90 + F[#] + G38.3 Y[#] + + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_back_left_top_corner.ngc b/subroutines/probe_back_left_top_corner.ngc new file mode 100644 index 0000000..3aa726e --- /dev/null +++ b/subroutines/probe_back_left_top_corner.ngc @@ -0,0 +1,118 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe back left top corner for x,y,z 0,0,0 position) +(Start probe position is over back left corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane) + F[#] + G38.3 X[#] Y[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_back_right_inside_corner.ngc b/subroutines/probe_back_right_inside_corner.ngc new file mode 100644 index 0000000..99e16fc --- /dev/null +++ b/subroutines/probe_back_right_inside_corner.ngc @@ -0,0 +1,122 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe back right inside corner for x,y,z 0,0,0 position) +(Start probe position is over back right inside corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width X and Y) + G91 + F[#] + G38.3 X-[#] Y-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + G90 + (Current X Position including offsets in current program units) + # = #5420 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (move to X start Position) + G90 + F[#] + G38.3 X[#] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (move to Y start Position) + G90 + F[#] + G38.3 Y[#] + + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_back_right_top_corner.ngc b/subroutines/probe_back_right_top_corner.ngc new file mode 100644 index 0000000..423ad59 --- /dev/null +++ b/subroutines/probe_back_right_top_corner.ngc @@ -0,0 +1,117 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe back right top corner for x,y,z 0,0,0 position) +(Start probe position is over back right corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + (Probe Y Positioning Move) + F[#] + G38.3 X-[#] Y[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_back_top_side.ngc b/subroutines/probe_back_top_side.ngc new file mode 100644 index 0000000..b85e5d4 --- /dev/null +++ b/subroutines/probe_back_top_side.ngc @@ -0,0 +1,91 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(Probe back top side for y,z 0,0 position) +(Start probe position is over back edge of stock) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe Y Positioning Move, Step Off Width) + G91 + F[#] + G38.3 Y[#] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 Y[#] + + (probe mode rules for WCO or probe position measuring only) + o120 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 Y[# + #] + o120 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_cal_reset.ngc b/subroutines/probe_cal_reset.ngc new file mode 100644 index 0000000..081bbe5 --- /dev/null +++ b/subroutines/probe_cal_reset.ngc @@ -0,0 +1,8 @@ +o sub + + #3032 = 0 + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + +o endsub + +M2 (end program) diff --git a/subroutines/probe_cal_round_boss.ngc b/subroutines/probe_cal_round_boss.ngc new file mode 100644 index 0000000..d52bcd1 --- /dev/null +++ b/subroutines/probe_cal_round_boss.ngc @@ -0,0 +1,329 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe calibration offset using defined diam round boss) +(Start probe position is over center of stock in X and Y axis) +(within max z distance, ensure all settings have been) +(set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3033 (=0) + # = #3036 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + # = #[5203 + [20 * #5220]] + + (clear current probe calibration offset) + #3032 = 0 + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [#] + + (remove probe tip diam and cal offset from probed width calculations) + # = [#] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[#/2 + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Rapid Speed) + G91 + F[#] + G38.3 X[# + # + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[#/2 + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at Rapid Speed) + G91 + F[#] + G38.3 Y[# + # + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Move to z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Move to Y Center) + G90 + F[#] + G38.3 Y[#] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[#/2 + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Rapid Speed) + F[#] + G38.3 X[# + # + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate X Width Probed) + o110 if [# GT #] + # = [# - #] + o110 else + # = [# - #] + o110 endif + + (Completed probed width calculations) + # = [# - #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[#/2 + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at Rapid Speed) + F[#] + G38.3 Y[# + # + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + o120 if [# GT #] + # = [# - #] + o120 else + # = [# - #] + o return + o120 endif + + (Completed probed width calculations) + # = [# - #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + # = [[# + #] / 2] + + #1010 = # + (DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + o130 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o130 else + # = [[# - #] / 2] + # = [#] + o130 endif + + o140 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o140 else + # = [[# - #] / 2] + # = [#] + o140 endif + + # = [[# + #] / 2] + + o150 if [# EQ 0] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o150 else if [# EQ 1] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o150 else + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o150 endif + + # = [# + #] + + # = [# + #] + + (probe mode rules for WCO or probe position measuring only) + o160 if [# EQ 0] + (Record XY Zero in selected WCO) + G10 L2 P#5220 X[#] Y[#] + o160 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_cal_round_pocket.ngc b/subroutines/probe_cal_round_pocket.ngc new file mode 100644 index 0000000..825c0e4 --- /dev/null +++ b/subroutines/probe_cal_round_pocket.ngc @@ -0,0 +1,223 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe calibration offset using defined diam round pocket) +(Start probe position is over left side edge of pocket wall) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3033 (=0) + # = #3036 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (clear current probe calibration offset) + #3032 = 0 + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [#] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x-) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+) + o call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+) + o call [#3014][#3015][#3016][3017][#3018 + #3033 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y-) + o call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Probe Completion Move to Z Clearance Plane, Y Zero) + G90 + F[#] + G38.3 Y[#] + + (Call sub "probe_x_minus" to Probe x-) + o call [#3014][#3015][#3016][3017][#3018 + #3033 / 2][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+) + o call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+) + o call [#3014][#3015][#3016][3017][#3018 + #3033 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y-) + o call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed diameter calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + # = [[# + #] / 2] + + #1010 = # + (DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}]) + + G90 + F[#] + G38.3 Y[#] + G91 + F[#] + G38.3 Z[#] + + o110 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o110 else + # = [[# - #] / 2] + # = [#] + o110 endif + + o120 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o120 else + # = [[# - #] / 2] + # = [#] + o120 endif + + # = [[# + #] / 2] + + o130 if [# EQ 0] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 else if [# EQ 1] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 else + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 endif + + # = [# + #] + + # = [# + #] + + (probe mode rules for WCO or probe position measuring only) + o140 if [# EQ 0] + (Record Y Zero in selected WCO) + G10 L2 P#5220 X[#] Y[#] + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_cal_square_boss.ngc b/subroutines/probe_cal_square_boss.ngc new file mode 100644 index 0000000..5ceceb7 --- /dev/null +++ b/subroutines/probe_cal_square_boss.ngc @@ -0,0 +1,224 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe calibration offset using defined width square boss) +(Start probe position is over center of stock in X and Y axis) +(within max z distance, ensure all settings have been) +(set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3034 (=0) + # = #3035 (=0) + # = #3036 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + # = #[5203 + [20 * #5220]] + + (clear current probe calibration offset) + #3032 = 0 + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [#] + + (remove probe tip diam and cal offset from probed width calculations) + # = [#] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[#/2 + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Traverse Speed) + G91 + F[#] + G38.3 X[# + # + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# - #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[#/2 + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at traverse Speed) + G91 + F[#] + G38.3 Y[# + # + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# - #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + o110 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o110 else + # = [[# - #] / 2] + # = [#] + o110 endif + + o120 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o120 else + # = [[# - #] / 2] + # = [#] + o120 endif + + # = [[# + #] / 2] + + o130 if [# EQ 0] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 else if [# EQ 1] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 else + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 endif + + # = [# + #] + + # = [# + #] + + (probe mode rules for WCO or probe position measuring only) + o140 if [# EQ 0] + (Record XY Zero in selected WCO) + G10 L2 P#5220 X[#] Y[#] + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_cal_square_pocket.ngc b/subroutines/probe_cal_square_pocket.ngc new file mode 100644 index 0000000..3acb363 --- /dev/null +++ b/subroutines/probe_cal_square_pocket.ngc @@ -0,0 +1,178 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe calibration offset using defined width square pocket) +(Start probe position is over left side edge of pocket wall) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3034 (=0) + # = #3035 (=0) + # = #3036 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (clear current probe calibration offset) + #3032 = 0 + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [#] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3034][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3035 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3035][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + G90 + F[#] + G38.3 Y[#] + G91 + F[#] + G38.3 Z[#] + + o110 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o110 else + # = [[# - #] / 2] + # = [#] + o110 endif + + o120 if [# GT #] + (calculate calibration error and adjust calibration offset) + # = [[# - #] / 2] + # = [#] + o120 else + # = [[# - #] / 2] + # = [#] + o120 endif + + # = [[# + #] / 2] + + o130 if [# EQ 0] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 else if [# EQ 1] + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 else + #3032 = [ABS[#]] + (DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}]) + o130 endif + + # = [# + #] + + # = [# + #] + + (probe mode rules for WCO or probe position measuring only) + o140 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[#] Y[#] + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_corner_x_minus_edge_angle.ngc b/subroutines/probe_corner_x_minus_edge_angle.ngc new file mode 100644 index 0000000..080e8bb --- /dev/null +++ b/subroutines/probe_corner_x_minus_edge_angle.ngc @@ -0,0 +1,173 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Corner X minus Edge Angle for x,y,z 0,0,0 position) +(Start probe position is over front right corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5420 + + # = #5421 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 y-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5420 + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane) + F[#] + G38.3 X[#] Y[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5421 + + (Call sub "probe_x_minus" to Probe X- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 Y[#] + + # = #5421 + + (Call sub "probe_x_minus" to Probe X- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o130 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o130 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + # = [# + [# - #] * COS[-#] - [# - #] * SIN[-#]] + + # = [# + [# - #] * SIN[-#] + [# - #] * COS[-#]] + + # = [# + [# - #] * COS[#] - [# - #] * SIN[#]] + + # = [# + [# - #] * SIN[#] + [# - #] * COS[#]] + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO,Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o140 endif + + (probe mode rules for WCO,Rotation and probe position measuring only) + o150 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] R[#] + o150 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_corner_x_plus_edge_angle.ngc b/subroutines/probe_corner_x_plus_edge_angle.ngc new file mode 100644 index 0000000..745ea6b --- /dev/null +++ b/subroutines/probe_corner_x_plus_edge_angle.ngc @@ -0,0 +1,173 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Corner X plus Edge Angle for x,y,z 0,0,0 position) +(Start probe position is over back left corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5420 + + # = #5421 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 y[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5420 + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane) + F[#] + G38.3 X-[#] Y-[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5421 + + (Call sub "probe_x_plus" to Probe X+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 Y-[#] + + # = #5421 + + (Call sub "probe_x_plus" to Probe X+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o130 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o130 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + # = [# + [# - #] * COS[-#] - [# - #] * SIN[-#]] + + # = [# + [# - #] * SIN[-#] + [# - #] * COS[-#]] + + # = [# + [# - #] * COS[#] - [# - #] * SIN[#]] + + # = [# + [# - #] * SIN[#] + [# - #] * COS[#]] + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO,Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o140 endif + + (probe mode rules for WCO,Rotation and probe position measuring only) + o150 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] R[#] + o150 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_corner_y_minus_edge_angle.ngc b/subroutines/probe_corner_y_minus_edge_angle.ngc new file mode 100644 index 0000000..2492d9d --- /dev/null +++ b/subroutines/probe_corner_y_minus_edge_angle.ngc @@ -0,0 +1,173 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Corner Y minus Edge Angle for x,y,z 0,0,0 position) +(Start probe position is over back right corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5420 + + # = #5421 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5421 + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane) + F[#] + G38.3 X-[#] Y[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5420 + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 X-[#] + + # = #5420 + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o130 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o130 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + # = [# + [# - #] * COS[-#] - [# - #] * SIN[-#]] + + # = [# + [# - #] * SIN[-#] + [# - #] * COS[-#]] + + # = [# + [# - #] * COS[#] - [# - #] * SIN[#]] + + # = [# + [# - #] * SIN[#] + [# - #] * COS[#]] + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO,Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o140 endif + + (probe mode rules for WCO,Rotation and probe position measuring only) + o150 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] R[#] + o150 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_corner_y_plus_edge_angle.ngc b/subroutines/probe_corner_y_plus_edge_angle.ngc new file mode 100644 index 0000000..ac817a1 --- /dev/null +++ b/subroutines/probe_corner_y_plus_edge_angle.ngc @@ -0,0 +1,173 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Corner Y Plus Edge Angle for x,y,z 0,0,0 position) +(Start probe position is over front left corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5420 + + # = #5421 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5421 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane) + F[#] + G38.3 X[#] Y-[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + # = #5420 + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 X[#] + + # = #5420 + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o130 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o130 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + # = [# + [# - #] * COS[-#] - [# - #] * SIN[-#]] + + # = [# + [# - #] * SIN[-#] + [# - #] * COS[-#]] + + # = [# + [# - #] * COS[#] - [# - #] * SIN[#]] + + # = [# + [# - #] * SIN[#] + [# - #] * COS[#]] + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO,Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o140 endif + + (probe mode rules for WCO,Rotation and probe position measuring only) + o150 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[# + #] R[#] + o150 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_front_left_inside_corner.ngc b/subroutines/probe_front_left_inside_corner.ngc new file mode 100644 index 0000000..76a3fca --- /dev/null +++ b/subroutines/probe_front_left_inside_corner.ngc @@ -0,0 +1,123 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe front left inside corner for x,y,z 0,0,0 position) +(Start probe position is over front left inside corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Traverse Workpiece Top at Z Clearance Height plane) + G91 + F[#] + G38.3 X[#] Y[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + G90 + (Current X Position including offsets in current program units) + # = #5420 + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (move to X start Position) + G90 + F[#] + G38.3 X[#] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (move to Y start Position) + G90 + F[#] + G38.3 Y[#] + + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_front_left_top_corner.ngc b/subroutines/probe_front_left_top_corner.ngc new file mode 100644 index 0000000..0c3fc33 --- /dev/null +++ b/subroutines/probe_front_left_top_corner.ngc @@ -0,0 +1,119 @@ +(author: Chris P) +(version: 0.5) +(date: 06/27/24) + +(Probe front left top corner for x,y,z 0,0,0 position) +(Start probe position is over front left corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane) + F[#] + G38.3 X[#] Y-[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_front_right_inside_corner.ngc b/subroutines/probe_front_right_inside_corner.ngc new file mode 100644 index 0000000..cdf536c --- /dev/null +++ b/subroutines/probe_front_right_inside_corner.ngc @@ -0,0 +1,123 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe front right inside corner for x,y,z 0,0,0 position) +(Start probe position is over front right inside corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width X and Y) + G91 + F[#] + G38.3 X-[#] Y[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + G90 + (Current X Position including offsets in current program units) + # = #5420 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (move to X start Position) + G90 + F[#] + G38.3 X[#] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (move to Y start Position) + G90 + F[#] + G38.3 Y[#] + + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_front_right_top_corner.ngc b/subroutines/probe_front_right_top_corner.ngc new file mode 100644 index 0000000..209692d --- /dev/null +++ b/subroutines/probe_front_right_top_corner.ngc @@ -0,0 +1,120 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe front right top corner for x,y,z 0,0,0 position) +(Start probe position is over front right corner of stock) +(inside the step off width square and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Y Positioning Move, up to Z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Probe Y Positioning Move, Traverse Workpiece Top at Z Clearance Height plane) + F[#] + G38.3 X-[#] Y-[#] + + (Probe Y Positioning Move,to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + (Probe Completion Move to Z Clearance Plane, and XY Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_front_top_side.ngc b/subroutines/probe_front_top_side.ngc new file mode 100644 index 0000000..dd48f34 --- /dev/null +++ b/subroutines/probe_front_top_side.ngc @@ -0,0 +1,92 @@ +(author: Chris P) +(version: 0.5) +(date: 06/27/24) + +(Probe front top side for y,z 0,0 position) +(Start probe position is over front edge of stock) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe Y Positioning Move, Step Off Width) + G91 + F[#] + G38.3 Y-[#] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 Y[#] + + (probe mode rules for WCO or probe position measuring only) + o120 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 Y[# + #] + o120 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_left_top_side.ngc b/subroutines/probe_left_top_side.ngc new file mode 100644 index 0000000..74425fd --- /dev/null +++ b/subroutines/probe_left_top_side.ngc @@ -0,0 +1,92 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(Probe left top side for x,z 0,0 position) +(Start probe position is over left side edge of stock) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (probe mode rules for WCO or probe position measuring only) + o120 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + o120 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_rect_boss.ngc b/subroutines/probe_rect_boss.ngc new file mode 100644 index 0000000..c6b5deb --- /dev/null +++ b/subroutines/probe_rect_boss.ngc @@ -0,0 +1,185 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Boss in X and Y Axes, find center and z 0 position) +(Start probe position is over center of stock in X and Y axis) +(within max z distance, ensure all settings have been) +(set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3026 (=0) + # = #3027 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + # = #[5203 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[[#/2] + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Rapid Speed) + G91 + F[#] + G38.3 X[# + # + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# - #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[[#/2] + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at Rapid Speed) + G91 + F[#] + G38.3 Y[# + # + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# - #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record XY Zero in selected WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_rect_pocket.ngc b/subroutines/probe_rect_pocket.ngc new file mode 100644 index 0000000..0f2ebc7 --- /dev/null +++ b/subroutines/probe_rect_pocket.ngc @@ -0,0 +1,139 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe rect pocket center measure x and widths, find xy center position) +(Start probe position is over left side edge of pocket wall) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3026 (=0) + # = #3027 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3026][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3027 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3027][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + G90 + F[#] + G38.3 Y[#] + G91 + F[#] + G38.3 Z[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_rect_pocket_center_start.ngc b/subroutines/probe_rect_pocket_center_start.ngc new file mode 100644 index 0000000..063a498 --- /dev/null +++ b/subroutines/probe_rect_pocket_center_start.ngc @@ -0,0 +1,121 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe rect pocket center measure x and y widths, find xy center position) +(Start probe position is rough center of pocket probe tip below top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3026 (=0) + # = #3027 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3026 / 2][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3026][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to X Zero, Y Zero) + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3027 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3027][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + G90 + F[#] + G38.3 Y[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X and Y Zero in selected WCO) + G10 L2 P#5220 X[# + #] Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_ridge_x.ngc b/subroutines/probe_ridge_x.ngc new file mode 100644 index 0000000..a3d0a9a --- /dev/null +++ b/subroutines/probe_ridge_x.ngc @@ -0,0 +1,129 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Ridge in X Axis to find center and z 0 position) +(Start probe position is over center of stock in the X axis) +(within max z distance, ensure all settings have been) +(set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3028 (=0) + # = #3029 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5203 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[[#/2] + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Rapid Speed) + F[#] + G38.3 X[# + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# - #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_ridge_y.ngc b/subroutines/probe_ridge_y.ngc new file mode 100644 index 0000000..d21311c --- /dev/null +++ b/subroutines/probe_ridge_y.ngc @@ -0,0 +1,129 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Ridge in Y Axis to find center and z 0 position) +(Start probe position is over center of stock in the Y axis) +(within max z distance, ensure all settings have been) +(set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + # = #3014 + # = #3015 + # = #3016 + # = #3017 + # = #3018 + # = #3019 + # = #3020 + # = #3021 + # = #3022 + # = #3023 + # = #3024 + # = #3028 + # = #3029 + # = #3030 + # = #3032 + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + # = #[5203 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[[#/2] + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at Rapid Speed) + F[#] + G38.3 Y[# + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# - #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 Y[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record Y Zero in selected WCO) + G10 L2 P#5220 Y[# + #] + (Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero) + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_right_top_side.ngc b/subroutines/probe_right_top_side.ngc new file mode 100644 index 0000000..8fe5e59 --- /dev/null +++ b/subroutines/probe_right_top_side.ngc @@ -0,0 +1,91 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(Probe right top side for x,z 0,0 position) +(Start probe position is over right side edge of stock) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (probe mode rules for WCO or probe position measuring only) + o120 if [# EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] + o120 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_round_boss.ngc b/subroutines/probe_round_boss.ngc new file mode 100644 index 0000000..7b15891 --- /dev/null +++ b/subroutines/probe_round_boss.ngc @@ -0,0 +1,293 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Boss in X and Y Axes, find center, Diam and z 0 position) +(Start probe position is over center of stock in X and Y axis) +(within max z distance, ensure all settings have been) +(set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3025 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + # = #[5203 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[[# / 2] + [#]] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Rapid Speed) + G91 + F[#] + G38.3 X[# + # + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[[# / 2] + [#]] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at Rapid Speed) + G91 + F[#] + G38.3 Y[# + # + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Move to z clearance plane) + G91 + F[#] + G38.3 Z[#] + + (Move to Y Center) + G90 + F[#] + G38.3 Y[#] + + (Probe X Positioning Move, X hint/2 + Step Off Width) + G91 + F[#] + G38.3 X-[[# / 2] + [#]] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in X, X Hint + Step Off Width at Rapid Speed) + F[#] + G38.3 X[# + # + #] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate X Width Probed) + o110 if [# GT #] + # = [# - #] + o110 else + # = [# - #] + o110 endif + + (Completed probed width calculations) + # = [# - #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] + + (Probe Y Positioning Move, Y hint/2 + Step Off Width) + G91 + F[#] + G38.3 Y-[[# / 2] + [#]] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (first side Probe Completion Move to Z Clearance Plane) + G91 + F[#] + G38.3 Z[#] + + (Positioning move in Y, Y Hint + Step Off Width at Rapid Speed) + F[#] + G38.3 Y[# + # + #] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (probed center calulation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + o120 if [# GT #] + # = [# - #] + o120 else + # = [# - #] + o120 endif + + (Completed probed width calculations) + # = [# - #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + # = [[# + #] / 2] + + #1010 = # + (DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}]) + + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + # = [# + #] + + # = [# + #] + + (probe mode rules for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record XY Zero in selected WCO) + G10 L2 P#5220 X[#] Y[#] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_round_pocket.ngc b/subroutines/probe_round_pocket.ngc new file mode 100644 index 0000000..bbcafd7 --- /dev/null +++ b/subroutines/probe_round_pocket.ngc @@ -0,0 +1,184 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe round pocket center measure x and y Diam, find xy center position) +(Start probe position is over left side edge of pocket wall) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3025 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x-) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y-) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Probe Completion Move to Z Clearance Plane, Y Zero) + G90 + F[#] + G38.3 Y[#] + + (Call sub "probe_x_minus" to Probe x-) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y-) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed diameter calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + # = [[# + #] / 2] + + #1010 = # + (DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}]) + + G90 + F[#] + G38.3 Y[#] + G91 + F[#] + G38.3 Z[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record Y Zero in selected WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_round_pocket_center_start.ngc b/subroutines/probe_round_pocket_center_start.ngc new file mode 100644 index 0000000..bad31c5 --- /dev/null +++ b/subroutines/probe_round_pocket_center_start.ngc @@ -0,0 +1,167 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe round pocket center start measure x and y Diam, find xy center position) +(Start probe position is rough center of pocket a safe distance below top edge) +(no z move will be initiated in this routine. end position is hole center) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3025 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + (Call sub "probe_x_minus" to Probe x-) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to X Zero) + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y-) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Probe Completion Move to Y Zero) + G90 + F[#] + G38.3 Y[#] + + (Call sub "probe_x_minus" to Probe x-) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + G90 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe Y+) + o call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus" to Probe Y-) + o call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed diameter calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + # = [[# + #] / 2] + + #1010 = # + (DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}]) + + G90 + F[#] + G38.3 Y[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record Y Zero in selected WCO) + G10 L2 P#5220 X[# + #] + G10 L2 P#5220 Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_spindle_nose.ngc b/subroutines/probe_spindle_nose.ngc new file mode 100644 index 0000000..67e98bf --- /dev/null +++ b/subroutines/probe_spindle_nose.ngc @@ -0,0 +1,77 @@ +(author: Chris P) +(version: 0.0) +(date: 12/26/24) + +(Probe Spindle Nose in Z Minus direction over tool setter and set Spindle Zero Distance) +(Start probe position is over toolsetter platter within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + + # = #3004 (=10.0) + # = #3005 (=0) + # = #3006 (=50) + # = #3007 (=12.5) + # = #3009 (=0.1000) + + (Cancel G92 offsets) + G92.1 + + o100 if [2 EQ 2] + G49 + o100 endif + + # = #5422 + + (Initial Fast Z- Probe) + G91 + F[#] + G38.2 Z-[#] + # = #5063 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Z# + F[#] + (return from sub) + o return + o110 endif + + (Move up retract_distance height for slow probe) + G90 + G1 F[#] Z[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Z- Probe) + G91 + F[#] + G38.2 Z-[# * 2] + # = #5063 + G90 + G1 F[#] Z[# + #] + o120 endif + + (defines the edge as z_probed_position for DRO reporting) + # = # + + (output to gui DRO "Z PROBED POSITION") + #1009 = # + #3010 = [ABS[# - #]] + # = [#3010 * 1.001] + #3007 = # + + (DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}]) + (DEBUG, EVAL[vcp.getWidget{"spindle_zero_height_3010"}.setValue{#3010}]) + (DEBUG, EVAL[vcp.getWidget{"z_max_travel_3007"}.setValue{#3007}]) + + G53 G0 Z0.0 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_top_back_edge_angle.ngc b/subroutines/probe_top_back_edge_angle.ngc new file mode 100644 index 0000000..1507e66 --- /dev/null +++ b/subroutines/probe_top_back_edge_angle.ngc @@ -0,0 +1,131 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(Probe back top edge angle for y,z 0,0 position and edge angle) +(Start probe position is over back edge of stock, set edge width,) +(step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5420 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe Y Positioning Move, Step Off Width) + G91 + F[#] + G38.3 Y[#] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 X-[#] + + (Call sub "probe_y_minus" to Probe y- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO, Rotation and probe position measuring only) + o130 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[#] Y[# + #] + o130 endif + + (probe mode rules for WCO, Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[#] Y[# + #] R[#] + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_top_front_edge_angle.ngc b/subroutines/probe_top_front_edge_angle.ngc new file mode 100644 index 0000000..7220d75 --- /dev/null +++ b/subroutines/probe_top_front_edge_angle.ngc @@ -0,0 +1,131 @@ +(author: Chris P) +(version: 0.5) +(date: 06/27/24) + +(Probe top front edge angle for y,z 0,0 position and edge angle) +(Start probe position is over front edge of stock, set edge width,) +(step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5420 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe Y Positioning Move, Step Off Width) + G91 + F[#] + G38.3 Y-[#] + + (Probe Y Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 X[#] + + (Call sub "probe_y_plus" to Probe y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing Y Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO, Rotation and probe position measuring only) + o130 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[#] Y[# + #] + o130 endif + + (probe mode rules for WCO, Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[#] Y[# + #] R[#] + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_top_left_edge_angle.ngc b/subroutines/probe_top_left_edge_angle.ngc new file mode 100644 index 0000000..7d2ace0 --- /dev/null +++ b/subroutines/probe_top_left_edge_angle.ngc @@ -0,0 +1,131 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(Probe top left edge angle for y,z 0,0 position and edge angle) +(Start probe position is over left edge of stock, set edge width,) +(step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5421 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X-[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 Y-[#] + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO, Rotation and probe position measuring only) + o130 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[#] + o130 endif + + (probe mode rules for WCO, Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[#] R[#] + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_top_right_edge_angle.ngc b/subroutines/probe_top_right_edge_angle.ngc new file mode 100644 index 0000000..93bf811 --- /dev/null +++ b/subroutines/probe_top_right_edge_angle.ngc @@ -0,0 +1,131 @@ +(author: Chris P) +(version: 0.4) +(date: 06/27/24) + +(Probe top right edge angle for y,z 0,0 position and edge angle) +(Start probe position is over right edge of stock, set edge width,) +(step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3030 (=0) + # = #3031 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + (set rotation offset to zero for new probe cycle) + G10 L2 P[#5220] R0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probing depth from the z probed clearance height, used for z moves) + # = [# + # + #] + + # = #5421 + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o110 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o110 endif + + (edge width move to edge second probing point) + G91 + F[#] + G38.3 Y[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #<_value> + + (value returned safety check, aborts if no value returned) + o120 if [# EQ 1 AND #<_value_returned> NE 1] + (DEBUG, Missing X Sub returned edge parameter, aborting) + M50 P1 + o return + o120 endif + + # = [# - #] + + # = [ATAN [#] / [#]] + + #1011 = # + (DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + + #1012 = # + (DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + + (Probe Completion Move to Z Clearance Plane, and Y Zero) + G91 + F[#] + G38.3 Z[#] + G90 + F[#] + G38.3 X[#] Y[#] + + (probe mode rules for WCO, Rotation and probe position measuring only) + o130 if [# EQ 0 AND # EQ 0] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[#] + o130 endif + + (probe mode rules for WCO, Rotation and probe position measuring only) + o140 if [# EQ 0 AND # EQ 1] + (Record Zero in selected axes and WCO) + G10 L2 P#5220 X[# + #] Y[#] R[#] + o140 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_valley_x.ngc b/subroutines/probe_valley_x.ngc new file mode 100644 index 0000000..63b1be0 --- /dev/null +++ b/subroutines/probe_valley_x.ngc @@ -0,0 +1,109 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe valley in x, find Z0, X0 valley center position) +(Start probe position is over left side edge of valley wall) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3028 (=0) + # = #3029 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe X Positioning Move, Step Off Width) + G91 + F[#] + G38.3 X[#] + + (Probe X Positioning Move, to Probing Depth) + F[#] + G38.3 Z-[#] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3028][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G90 + F[#] + G38.3 X[#] + G91 + F[#] + G38.3 Z[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_valley_x_center_start.ngc b/subroutines/probe_valley_x_center_start.ngc new file mode 100644 index 0000000..e9212ce --- /dev/null +++ b/subroutines/probe_valley_x_center_start.ngc @@ -0,0 +1,91 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe valley in x, find X zero valley center position) +(Start probe position is centered between valley walls) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3028 (=0) + # = #3029 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + (Call sub "probe_x_minus" to Probe x- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3028 / 2][#3019][#3032] + + # = #5061 + + (Call sub "probe_x_plus" to Probe x+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3028][#3019][#3032] + + # = #5061 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate X Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1001 = # + (DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}]) + + #1002 = # + (DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}]) + + (Probe Completion Move to X Zero) + G90 + F[#] + G38.3 X[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_valley_y.ngc b/subroutines/probe_valley_y.ngc new file mode 100644 index 0000000..5541a80 --- /dev/null +++ b/subroutines/probe_valley_y.ngc @@ -0,0 +1,107 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe valley in Y, find Z0, Y0 valley center position) +(Start probe position is over back side edge of valley wall) +(inside the step off width distance and within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3028 (=0) + # = #3029 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + # = [# + # + #] + + (Call sub "probe_z_minus_sub" to Probe top of Workpiece) + o call [#3014][#3015][#3016][#3017][#3020][#3021][#3030] + + (Probe Y Positioning Move, Step Off Width) + G91 + F[#] + G38.3 Y-[#] + F[#] + G38.3 Z-[#] + + (Call sub "probe_y_plus" to Probe Y+ side of Workpiece) + o call [#3014][#3015][#3016][#3017][#3018][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus_sub" to Probe Y- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3029][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G90 + F[#] + G38.3 Y[#] + G91 + F[#] + G38.3 Z[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_valley_y_center_start.ngc b/subroutines/probe_valley_y_center_start.ngc new file mode 100644 index 0000000..944f9b7 --- /dev/null +++ b/subroutines/probe_valley_y_center_start.ngc @@ -0,0 +1,91 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe valley in Y find Y0 valley center position) +(Start probe position is rough center between valley walls) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3024 (=0.5000) + # = #3028 (=0) + # = #3029 (=0) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (remove probe tip diam and cal offset from probed width calculations) + # = [# - [# * 2]] + + (Call sub "probe_y_plus" to Probe Y+ side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3029 / 2][#3019][#3032] + + # = #5062 + + (Call sub "probe_y_minus_sub" to Probe Y- side of Workpiece) + o call [#3014][#3015][#3016][3017][#3018 + #3029][#3019][#3032] + + # = #5062 + + (probed center calculation) + # = [[# + #] / 2] + + (calculate Y Width Probed) + # = [# - #] + + (Completed probed width calculations) + # = [# + #] + + #1003 = # + (DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}]) + + #1004 = # + (DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}]) + + (Probe Completion Move to Z Clearance Plane, and X Zero) + G90 + F[#] + G38.3 Y[#] + + (probe mode rules for WCO or probe position measuring only) + o110 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 Y[# + #] + o110 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_x_minus.ngc b/subroutines/probe_x_minus.ngc new file mode 100644 index 0000000..5e74897 --- /dev/null +++ b/subroutines/probe_x_minus.ngc @@ -0,0 +1,85 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe X Minus direction and set X 0 in current WCO) +(Start probe position to the right side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + + (Cancel G92 offsets) + G92.1 + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current X Position including offsets in current program units) + # = #5420 + + (Initiate Fast X- Probe) + G91 + F[#] + G38.2 X-[#] + # = #5061 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] X# + F[#] + (return from sub) + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] X[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow X- Probe) + G91 + F[#] + G38.2 X-[# * 2] + # = #5061 + G90 + G1 F[#] X[# + #] + o120 endif + + # = [# - #] + + (defines the edge as x_probed_position for DRO reporting) + # = # + + (output to gui DRO "X PROBED POSITION") + #1005 = # + (DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}]) + +o endsub [#] + +M2 (end program) diff --git a/subroutines/probe_x_minus_wco.ngc b/subroutines/probe_x_minus_wco.ngc new file mode 100644 index 0000000..20485ca --- /dev/null +++ b/subroutines/probe_x_minus_wco.ngc @@ -0,0 +1,105 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe X Minus direction and set X 0 in current WCO) +(Start probe position to the right side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current X Position including offsets in current program units) + # = #5420 + + (Initiate Fast X- Probe) + G91 + F[#] + G38.2 X-[#] + # = #5061 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] X# + F[#] + M50 P1 + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] X[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow X- Probe) + G91 + F[#] + G38.2 X-[# * 2] + # = #5061 + G90 + G1 F[#] X[# + #] + o120 endif + + # = [# - #] + + (defines the edge as x_probed_position for DRO reporting) + # = # + + (output to gui DRO "X PROBED POSITION") + #1005 = # + (DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}]) + + (probe mode rule for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_x_plus.ngc b/subroutines/probe_x_plus.ngc new file mode 100644 index 0000000..a712542 --- /dev/null +++ b/subroutines/probe_x_plus.ngc @@ -0,0 +1,85 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe X plus direction and set X 0 in current WCO) +(Start probe position to the left side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + + (Cancel G92 offsets) + G92.1 + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current X Position including offsets in current program units) + # = #5420 + + (Initiate Fast X+ Probe) + G91 + F[#] + G38.2 X[#] + # = #5061 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] X# + F[#] + (return from sub) + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] X[# - #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow X+ Probe) + G91 + F[#] + G38.2 X[# * 2] + # = #5061 + G90 + G1 F[#] X[# - #] + o120 endif + + # = [# + #] + + (defines the edge as x_probed_position for DRO reporting) + # = # + + (output to gui DRO "X PROBED POSITION") + #1006 = # + (DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}]) + +o endsub [#] + +M2 (end program) diff --git a/subroutines/probe_x_plus_wco.ngc b/subroutines/probe_x_plus_wco.ngc new file mode 100644 index 0000000..cc7a2a4 --- /dev/null +++ b/subroutines/probe_x_plus_wco.ngc @@ -0,0 +1,105 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe X plus direction and set X 0 in current WCO) +(Start probe position to the left side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5201 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current X Position including offsets in current program units) + # = #5420 + + (Initiate Fast X+ Probe) + G91 + F[#] + G38.2 X[#] + # = #5061 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] X# + F[#] + M50 P1 + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] X[# - #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow X+ Probe) + G91 + F[#] + G38.2 X[# * 2] + # = #5061 + G90 + G1 F[#] X[# - #] + o120 endif + + # = [# + #] + + (defines the edge as x_probed_position for DRO reporting) + # = # + + (output to gui DRO "X PROBED POSITION") + #1006 = # + (DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}]) + + (probe mode rule for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record X Zero in selected WCO) + G10 L2 P#5220 X[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_y_minus.ngc b/subroutines/probe_y_minus.ngc new file mode 100644 index 0000000..6723ff0 --- /dev/null +++ b/subroutines/probe_y_minus.ngc @@ -0,0 +1,85 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Y Minus direction to locate edge, end at clearance distance) +(Start probe position to the back side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + + (Cancel G92 offsets) + G92.1 + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Initiate Fast Y- Probe) + G91 + F[#] + G38.2 y-[#] + # = #5062 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Y# + F[#] + (return from sub) + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] Y[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Y- Probe) + G91 + F[#] + G38.2 Y-[# * 2] + # = #5062 + G90 + G1 F[#] Y[# + #] + o120 endif + + # = [#5062 - #] + + (defines the edge as y_probed_position for DRO reporting) + # = # + + (output to gui DRO "Y PROBED POSITION") + #1007 = # + (DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}]) + +o endsub [#] + +M2 (end program) diff --git a/subroutines/probe_y_minus_wco.ngc b/subroutines/probe_y_minus_wco.ngc new file mode 100644 index 0000000..05dcea5 --- /dev/null +++ b/subroutines/probe_y_minus_wco.ngc @@ -0,0 +1,105 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Y Minus direction and set Y 0 in current WCO) +(Start probe position to the back side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Initiate Fast Y- Probe) + G91 + F[#] + G38.2 y-[#] + # = #5062 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Y# + F[#] + M50 P1 + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] Y[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Y- Probe) + G91 + F[#] + G38.2 Y-[# * 2] + # = #5062 + G90 + G1 F[#] Y[# + #] + o120 endif + + # = [#5062 - #] + + (defines the edge as y_probed_position for DRO reporting) + # = # + + (output to gui DRO "Y PROBED POSITION") + #1007 = # + (DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}]) + + (probe mode rule for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Y Zero in selected WCO) + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_y_plus.ngc b/subroutines/probe_y_plus.ngc new file mode 100644 index 0000000..27bf62b --- /dev/null +++ b/subroutines/probe_y_plus.ngc @@ -0,0 +1,85 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Y plus direction to locate edge, end at clearance distance) +(Start probe position to the front side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + + (Cancel G92 offsets) + G92.1 + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Initiate Fast y+ Probe) + G91 + F[#] + G38.2 Y[#] + # = #5062 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Y# + F[#] + (return from sub) + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] Y[# - #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Y+ Probe) + G91 + F[#] + G38.2 Y[# * 2] + # = #5062 + G90 + G1 F[#] Y[# - #] + o120 endif + + # = [#5062 + #] + + (defines the edge as y_probed_position for DRO reporting) + # = # + + (output to gui DRO "Y PROBED POSITION") + #1008 = # + (DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}]) + +o endsub [#] + +M2 (end program) diff --git a/subroutines/probe_y_plus_wco.ngc b/subroutines/probe_y_plus_wco.ngc new file mode 100644 index 0000000..9010b5e --- /dev/null +++ b/subroutines/probe_y_plus_wco.ngc @@ -0,0 +1,105 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Y plus direction and set Y 0 in current WCO) +(Start probe position to the front side edge of stock) +(inside the max xy distance with the probe tip below the stock top edge) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3018 (=0.5000) + # = #3019 (=0.1000) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3022 (=0.0000) + # = #3023 (=0.5000) + # = #3030 (=0) + # = #3032 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5202 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Probe Diameter) + # = #5410 + + (Probe Radius) + # = [# / 2] + + (Probe Centerline Offset) + # = [# - #] + + (Current Y Position including offsets in current program units) + # = #5421 + + (Initiate Fast y+ Probe) + G91 + F[#] + G38.2 Y[#] + # = #5062 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Y# + F[#] + M50 P1 + o return + o110 endif + + (Move to xy_clearance distance for slow probe) + G90 + G1 F[#] Y[# - #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Y+ Probe) + G91 + F[#] + G38.2 Y[# * 2] + # = #5062 + G90 + G1 F[#] Y[# - #] + o120 endif + + # = [#5062 + #] + + (defines the edge as y_probed_position for DRO reporting) + # = # + + (output to gui DRO "Y PROBED POSITION") + #1008 = # + (DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}]) + + (probe mode rule for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Y Zero in selected WCO) + G10 L2 P#5220 Y[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/probe_z_minus_sub.ngc b/subroutines/probe_z_minus_sub.ngc new file mode 100644 index 0000000..4f1d041 --- /dev/null +++ b/subroutines/probe_z_minus_sub.ngc @@ -0,0 +1,84 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Z Minus direction and set Z 0 in current WCO) +(Start probe position is over stock within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + + (Cancel G92 offsets) + G92.1 + + # = #[5203 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + o return + o100 endif + + (Current Z Position including offsets in current program units) + # = #5422 + + (Initial Fast Z- Probe) + G91 + F[#] + G38.2 Z-[#] + # = #5063 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Z# + F[#] + (return from sub) + o return + o110 endif + + (Move to z_clearance height for slow probe) + G90 + G1 F[#] Z[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Z- Probe) + G91 + F[#] + G38.2 Z-[# * 2] + # = #5063 + G90 + G1 F[#] Z[# + #] + o120 endif + + (defines the edge as z_probed_position for DRO reporting) + # = # + + (output to gui DRO "Z PROBED POSITION") + #1009 = # + (DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}]) + + # = [# + #] + + (probe mode rule for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Z zero in selected WCO) + G10 L2 P#5220 Z[# + #] + o return + o130 endif + +o endsub [#] + +M2 (end program) diff --git a/subroutines/probe_z_minus_wco.ngc b/subroutines/probe_z_minus_wco.ngc new file mode 100644 index 0000000..6c302a5 --- /dev/null +++ b/subroutines/probe_z_minus_wco.ngc @@ -0,0 +1,91 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Probe Z Minus direction and set Z 0 in current WCO) +(Start probe position is over stock within max z distance) +(ensure all settings have been set properly according to help diagrams) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + # = #3014 (=99) + # = #3015 (=0) + # = #3016 (=10.0) + # = #3017 (=50) + # = #3020 (=0.5000) + # = #3021 (=0.1000) + # = #3030 (=0) + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + # = #[5203 + [20 * #5220]] + + (Probe Tool Safety Check) + o100 if [#5400 NE #] + (DEBUG, Specified probe tool %d# not in spindle, aborting) + M50 P1 + o return + o100 endif + + (Current Z Position including offsets in current program units) + # = #5422 + + (Initial Fast Z- Probe) + G91 + F[#] + G38.2 Z-[#] + # = #5063 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Z# + F[#] + (return from sub) + M50 P1 + o return + o110 endif + + (Move to z_clearance height for slow probe) + G90 + G1 F[#] Z[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Z- Probe) + G91 + F[#] + G38.2 Z-[# * 2] + # = #5063 + G90 + G1 F[#] Z[# + #] + o120 endif + + (defines the edge as z_probed_position for DRO reporting) + # = # + + (output to gui DRO "Z PROBED POSITION") + #1009 = # + (DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}]) + + # = [# + #] + + (probe mode rule for WCO or probe position measuring only) + o130 if [# EQ 0] + (Record Z zero in selected WCO) + G10 L2 P#5220 Z[# + #] + o130 endif + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/program_coolant.ngc b/subroutines/program_coolant.ngc new file mode 100644 index 0000000..5e76d69 --- /dev/null +++ b/subroutines/program_coolant.ngc @@ -0,0 +1,45 @@ +(author: Chris P) +(version: 0.3) +(date: 06/27/24) + +(programmable coolant subroutine for aiming the coolant nozzle) +(settings for setup are displayed on probe basic setting page) +(in the programmable coolant constants container.) +(calculations assume coolant nozzle is located on the right side of the spindle) + + +o sub +(PRINT, o) + + # = #3000 + # = #3001 + # = #3002 + # = #3003 + + o100 if [# EQ 0] + o100 return + o100 endif + + # = #5403 + + # = #5410 + + # = [# / 2] + + # = [# - #] + + # = [[#] + [#]] + + # = [ATAN[#] / [#]] + + # = [[#] + [#]] + + #1000 = # + (DEBUG, EVAL[vcp.getWidget{"coolant_final_angle"}.setValue{#1000}]) + + M68 E0 Q[#] + + (PRINT, o endsub) +o endsub + +M2 (end program) diff --git a/subroutines/rack_id_calc.ngc b/subroutines/rack_id_calc.ngc new file mode 100644 index 0000000..3faf268 --- /dev/null +++ b/subroutines/rack_id_calc.ngc @@ -0,0 +1,139 @@ +(author: Chris P, Lcvette) +(version: 0.1) +(date: 02/8/25) + +(This sub will write user parameters to the var file and ui widgets) +(Determine ATC Rack Position, Pocket Order, and Clearance Direction) +(Requires Pockets to be aligned parallel with X or Y Axis Travels) + +o sub + + # = #1 (0) + # = #2 (0) + # = #3 (0) + # = #4 (0) + # = #5 (0) + # = #6 (0) + # = #7 (0) + # = #8 (0) + # = #9 (0) + # = #10 (0) + # = #11 (0) + # = #12 (0) + # = #13 (0) + # = #14 (0) + + #3974 = # + #3975 = # + #3976 = # + #3977 = # + #3978 = # + #3980 = # + #3981 = # + #3982 = # + #3983 = # + #3984 = # + #3985 = # + #3986 = # + #3987 = # + #3988 = # + + (Initialize ALL variables first) + #3979 = 0 + # = 0 + # = 0 + # = 0 + # = 0 + + (Pull ini pocket count and write to ui) + o100 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> + #3973 = # + (DEBUG, EVAL[vcp.getWidget{"rack_pocket_count"}.setValue{#3973}]) + o100 endif + + (Check for duplicate pocket positions) + o110 if [# EQ #] + o111 if [# EQ #] + (PRINT, "Error: Duplicate pocket positions detected!") + #3979 = 0 + (DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}]) + o return + o111 endif + o110 endif + + (Check if row is parallel to the Y-axis) + o120 if [# EQ #] + (PRINT, "Row is parallel to Y-axis") + + (Determine pocket order) + o121 if [# GT #] + # = 1 (-Y to +Y) + o121 else + # = 2 (+Y to -Y) + o121 endif + + (Determine clearance direction - MUST be in X) + o122 if [# GT #] + # = 1 (+X) + o122 elseif [# LT #] + # = 2 (-X) + o122 else + (PRINT, "Error: Clearance direction must be perpendicular to pocket row!") + #3979 = 0 + (DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}]) + o return + o122 endif + + (Assign rack_id - break down calculation steps) + # = [# - 1] + # = [# * 2] + # = [# + #] + # = # + #3979 = # + (DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}]) + o return + o120 endif + + (Check if row is parallel to the X-axis) + o130 if [# EQ #] + (PRINT, "Row is parallel to X-axis") + + (Determine pocket order) + o131 if [# GT #] + # = 1 (-X to +X) + o131 else + # = 2 (+X to -X) + o131 endif + + (Determine clearance direction - MUST be in Y) + o132 if [# GT #] + # = 1 (+Y) + o132 elseif [# LT #] + # = 2 (-Y) + o132 else + (PRINT, "Error: Clearance direction must be perpendicular to pocket row!") + #3979 = 0 + (DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}]) + o return + o132 endif + + (Assign rack_id - break down calculation steps) + # = [# - 1] + # = [# * 2] + # = [# + #] + # = [# + 4] + # = # + #3979 = # + (DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}]) + o return + + o130 endif + + (MSG, "Error: No Conditions Met, Rack ID Not Set") + #3979 = 0 + (DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}]) + +o endsub + +M2 diff --git a/subroutines/reset_all_data.ngc b/subroutines/reset_all_data.ngc new file mode 100644 index 0000000..9b89dde --- /dev/null +++ b/subroutines/reset_all_data.ngc @@ -0,0 +1,41 @@ +o sub + +#1001 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1001}]) + +#1002 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1002}]) + +#1003 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1003}]) + +#1004 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1004}]) + +#1005 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}]) + +#1006 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}]) + +#1007 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}]) + +#1008 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}]) + +#1009 = 0 +(DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}]) + +#1010 = 0 +(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}]) + +#1011 = 0 +(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}]) + +#1012 = 0 +(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}]) + +o endsub + +M2 (end program) diff --git a/subroutines/retractatc.ngc b/subroutines/retractatc.ngc new file mode 100644 index 0000000..f9d400f --- /dev/null +++ b/subroutines/retractatc.ngc @@ -0,0 +1,15 @@ +o sub + +M65 P0 ; Turn off carousel out solenoid +M64 P1 ; Move Carousel IN + +M66 P0 L3 Q5 ; check carousel in position sensor +o100 if [#5399 LT 0] + M65 P1 ; turn off the solenoid to send atc home + (abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds +o100 endif +M65 P1 + +o endsub [1] + +M2 diff --git a/subroutines/set_g30_position.ngc b/subroutines/set_g30_position.ngc new file mode 100644 index 0000000..036d83b --- /dev/null +++ b/subroutines/set_g30_position.ngc @@ -0,0 +1,19 @@ +o sub + +o100 if [1 EQ 1] + (G30.1 records the tool touch off position in the var file) + G30.1 +o100 endif + +#1000 = #5181 +(DEBUG, EVAL[vcp.getWidget{"x_tool_change_position"}.setValue{#1000}]) + +#1001 = #5182 +(DEBUG, EVAL[vcp.getWidget{"y_tool_change_position"}.setValue{#1001}]) + +#1002 = #5183 +(DEBUG, EVAL[vcp.getWidget{"z_tool_change_position"}.setValue{#1002}]) + +o endsub + +M2 diff --git a/subroutines/store_tool_in_carousel.ngc b/subroutines/store_tool_in_carousel.ngc new file mode 100644 index 0000000..b66b45b --- /dev/null +++ b/subroutines/store_tool_in_carousel.ngc @@ -0,0 +1,16 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(store spindle tool in carousel macro) + +o sub +(PRINT, o) + +G49 + +T0 M6 + +o endsub + +M2 (end program) diff --git a/subroutines/surface_scan_param_update.ngc b/subroutines/surface_scan_param_update.ngc new file mode 100644 index 0000000..6f12eb5 --- /dev/null +++ b/subroutines/surface_scan_param_update.ngc @@ -0,0 +1,21 @@ +o sub + + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + + #3050 = # + + #3051 = # + + #3052 = # + + #3053 = # + + #3054 = # + +o endsub [1] + +M2 diff --git a/subroutines/surface_test.ngc b/subroutines/surface_test.ngc new file mode 100644 index 0000000..a49fae1 --- /dev/null +++ b/subroutines/surface_test.ngc @@ -0,0 +1,44 @@ +o sub + ;(MSG, SURFACE_TEST.NGC) + M64 P0 (turn off compensation) + ;T1 M6 (Install probe) + # = #3050 ;(debug, x0: [#]) + # = #3051 ;(debug, y0: [#]) + # = #3052 ;(debug, height: [#]) + # = #3053 ;(debug, width: [#]) + # = #3054 ;(debug, step: [#]) + # = #3055 ;(debug, search_feed: [#]) + # = #3056 ;(debug, latch_feed: [#]) + # = #3057 ;(debug, safe_z: [#]) + # = #3058 ;(debug, search_z: [#]) + + ;(PROBEOPEN filename.txt) + + G0 Z# + # = # + o101 while [# LT #+#] + # = # + o102 while [# LE #+#] + G0 X# Y# + G38.2 Z# F# + G0 Z# + # = [#+#] + o102 endwhile + + # = [#+#] + # = [#+#] + + o103 while [# GE #] + G0 X# Y# + G38.2 Z# F# + G0 Z# + # = [#-#] + o103 endwhile + + # = [#+#] + o101 endwhile + + ;(PROBECLOSE) +o endsub + +M2 diff --git a/subroutines/tool_setter_param_update.ngc b/subroutines/tool_setter_param_update.ngc new file mode 100644 index 0000000..c73d799 --- /dev/null +++ b/subroutines/tool_setter_param_update.ngc @@ -0,0 +1,45 @@ +o sub + + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + # = #8 + # = #9 + # = #10 + # = #11 + # = #12 + # = #13 + + #3004 = # + + #3005 = # + + #3006 = # + + #3007 = # + + #3008 = # + + #3009 = # + + #3010 = # + + #3011 = # + + #3012 = # + + #3013 = # + + #3037 = # + + #3038 = # + + #3039 = # + +o endsub [1] + +M2 diff --git a/subroutines/tool_touch_off.ngc b/subroutines/tool_touch_off.ngc new file mode 100644 index 0000000..5746059 --- /dev/null +++ b/subroutines/tool_touch_off.ngc @@ -0,0 +1,101 @@ +(author: Chris P, TooTall18) +(version: 0.2) +(date: 06/27/24) + +o sub + +# = #3004 (set from probe screen fast probe feed rate) +# = #3005 (set from probe screen slow probe feedrate) +# = #3006 (set from probe screen traverse probe feedrate) +# = #3007 (max z distance the tool travels before erroring out if not contact is made) +# = #3008 (max xy distance the tool travels before erroring out if not contact is made) +# = #3009 (distance the tool retracts after making contact during fast feed mode) +# = #3010 (G53 distance from home to spindle nose triggering point on touch plate) +# = #3011 (activates the tool diameter probe subroutine section) +# = #3012 (activates the tool diameter offset position for probe subroutine section) +# = #3013 (sets tool setter offset direction to move tool) +# = #5410 (current tool's diameter used for offseting probe position in x axis) + +G92.1 (Cancel G92 offset) +M50 P0 + +# = #5181 +# = #5182 +# = #5183 + +# = [# / 2] +# = [# - #] +# = [# + #] +# = [# - #] +# = [# + #] + +o100 if [# EQ 1] + o101 if [# EQ 0] + # = # + o101 else if [# EQ 1] + # = # + o101 else if [# EQ 2] + # = # + o101 else if [# EQ 3] + # = # + o101 endif +o100 endif + +o110 if [2 EQ 2] + G49 +o110 endif + +G90 (set absolute coordinates) +G53 G1 F[#] Z0 (move to z0 home position) +G53 G1 F[#] X# Y# +G53 G1 F[#] Z# + +# = #5422 ;Stores the offset of the current Z coordinate. + +G91 +F # +G38.2 Z-[#] (fast tool probe) +# = #5063 (save probe result of fast probe to parameters) +G1 F[#] Z[#] (retract tool retract distance amount) + +(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) +o120 if [# GT 0] + (Initiate Slow Z- Probe) + G91 + F[#] (set probe slow feedrate) + G38.2 Z-[# * 2] (slow tool probe) + # = #5063 + G90 + G1 F[#] Z[# + #] +o120 endif + +o130 if [#5070 EQ 1] (verify probe event was succesful) + # = #5063 (save slow probe result to parameters) +o130 else + (DEBUG,Tool Length Offset Probe Failed) +o130 endif + +(Tool Diameter Probe Mode Section, User must define this section as needed) +o140 if [# EQ 1] + (DEBUG, Tool Diameter Probing is Not Defined in Subroutine) +o140 endif + +o150 if [3 EQ 3] + G49 +o150 endif + +G90 (set absolute coordinates) +G53 G1 F[#] Z0 (Send Spindle to home zero position) + +(define new tool length offset parameters) +# = [ABS[# + #5063 - #]] + +G10 L1 P #5400 Z [#] (5400 = tool number) + +T #5400 G43 H #5400 (enable tool length offset) + +M50 P1 (reinstate feedrate override) + +o endsub + +M2 (end program) diff --git a/subroutines/toolchange.ngc b/subroutines/toolchange.ngc new file mode 100644 index 0000000..5940c12 --- /dev/null +++ b/subroutines/toolchange.ngc @@ -0,0 +1,137 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +o sub + +; Parameter #3989 is used to track if the carousel is homed (M13) (volatile) +; Parameter #3990 is used to track the current tool pocket (persistently) +; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently) +; Parameters #4001 to #4024 are used to track which tool is in which pocket (persistently) +; Parameter #4000 is not populated just used in the maths to calculate the above numbers +; #: The number of pockets the ATC platter has, This is user set in the INI file via #<_ini[atc]pockets> +; # The Z height your spindle needs to be at to clamp/unclamp a tool from the ATC platter (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT) +; # The Z clearance height in machine coordinates that your spindle needs to be at to clear the tools during carousel rotation (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT) + +(PRINT, o selected_tool: #, tool_in_spindle: #, selected_pocket: #, current_pocket: #, task: #<_task>) + +o100 if [#<_task> EQ 0] + (DEBUG, Task is null) + o return [999] +o100 endif (this code eliminates tool missing error on load for multiple use tools) + +; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings +# = 12 +o110 if [EXISTS[#<_ini[atc]pockets>]] + # = #<_ini[atc]pockets> +o110 endif + +# = -3.9000 +o120 if [EXISTS[#<_ini[atc]z_tool_change_height>]] + # = #<_ini[atc]z_tool_change_height> +o120 endif +# = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01] +o130 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]] + # = #<_ini[atc]z_tool_clearance_height> +o130 endif + +; assign the variables passed by M6 change_prolog to some parameters +#100 = # +#110 = # +#120 = # +#121 = # +; NOTE: +; The legacy names *selected_pocket* and *current_pocket* actually reference +; a sequential tooldata index for tool items loaded from a tool +; table ([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM) +; see Linuxcnc docs for further information on how these are used + +o140 if [# EQ #] ; checks if tool in the spindle is same as requested + (PRINT, Requested tool already in spindle) + (PRINT, o endsub) + o endsub [1] + M2 +o140 endif + +o150 if [#3991 NE #] + (PRINT, o tool_in_spindle does not match 3991) +o150 endif + +# = 0 ; assigns 0 to the next pocket for a later check if the tool is found in the carousel +# = 0 +#130 = # ; assign test parameter the number of pockets in the carousel + +o160 do + o161 if [#[4000 + #130] EQ #] ; checks all pockets to see if it contains tool number requested as the new tool + # = #130 ; if tool is found in pocket, assigns the next pocket + o161 endif + o162 if [#[4000 + #130] EQ 0] ; checks if the pocket is empty, last pocket checked will be the lowest empty pocket number, for putting tool in spindle away. + # = #130 + o162 endif + #130 = [#130 - 1] +o160 while [#130 GT 0] +o170 if [# EQ 0] ; if tool is not found, aborts and sends a message + (abort, Tool T%d# not found in carousel) +o170 endif + +; now we know which pocket the next tool is sitting in +; we need to know if we need to put a tool away +; or if there is not tool in the spindle + +o180 if [# GT 0] ; checks if there is a valid tool in the spindle + o181 if [# EQ 0] ; If there is a tool in the spindle, checks if there is an open pocket + (abort, Carousel is full, cant put away tool T# in into carousel) + o181 endif + M10 P[#] ; move carousel to an open pocket + M21 ; puts the tool in spindle away into the open pocket + (DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#, #}]) + #140 = # + #[4000 + #140] = # ; save tool number in pocket + #3991 = 0 ; empty tool in the spindle + M61 Q0 + G49 +o180 endif + +G90 +G0 G53 Z# ; move z to clear height + +o190 if [# GT 0] ; selected tool is not tool0 + M10 P# ; set the carousel to move to the right pocket for the selected tool + M65 P1 + M64 P0 + M66 P1 L3 Q5 ; check carousel out position sensor + o191 if [#5399 LT 0] + M65 P0 ; turn off the solenoid to send atc to tool change + (abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds + o191 endif + M65 P0 + + (DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#, 0}]) + M22 ; Carousel out + #150 = # + #[4000 + #150] = 0 ; empty the pocket + #3991 = # ; Set persistent variable to remember tool in spindle after power cycle +o190 else + M65 P2 ; deactive drawbar + M65 P0 ; make sure ATC out solenoid is off + M64 P1 ; move carousel home + M66 P0 L3 Q4 ; check carousel in position sensor + o192 if [#5399 LT 0] + M65 P1 ; turn off the solenoid to send atc home + (abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds + o192 endif + M65 P1 +o190 endif + +M61 Q# + +o200 if [1 EQ 1] + G43 H# +o200 endif + +o call + +(PRINT, o endsub) +o endsub [1] + +M2 diff --git a/subroutines/toolsetter_wco.ngc b/subroutines/toolsetter_wco.ngc new file mode 100644 index 0000000..dc6b0c9 --- /dev/null +++ b/subroutines/toolsetter_wco.ngc @@ -0,0 +1,95 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +(Measure tool and set Z 0.000 in current WCO for new tool) + +o sub + + (uses NGCGUI style arg spec) + (number after "=" in comment is default value) + + # = #3004 (set from probe screen fast probe feed rate) + # = #3005 (set from probe screen slow probe feedrate) + # = #3006 (set from probe screen traverse probe feedrate) + # = #3007 (max z distance the tool travels before erroring out if not contact is made) + # = #3008 (max xy distance the tool travels before erroring out if not contact is made) + # = #3009 (distance the tool retracts after making contact during fast feed mode) + # = #3010 (G53 distance from home to spindle nose triggering point on touch plate) + # = #3011 (activates the tool diameter probe subroutine section) + # = #3012 (activates the tool diameter offset position for probe subroutine section) + # = #5410 (current tool's diameter used for offseting probe position in x axis) + + (start with an m6, do all the standard m6 stuff and then touch off -TMC) + M6 + + (Cancel G92 offsets) + G92.1 + + (Cancel Feedrate Override) + M50 P0 + + o100 if [2 EQ 2] + G49 + o100 endif + + G90 (set absolute coordinates) + G53 G1 F[#] Z0 (move to z0 home position) + G53 G1 F[#] X# Y# + + # = #[5203 + [20 * #5220]] + + (Current Z Position including offsets in current program units) + # = #5422 + + (Initial Fast Z- Probe) + G91 + F[#] + G38.2 Z-[#] + # = #5063 + + (Probe Error check, #5070 will be 0 if failed) + o110 if [#5070 EQ 0] + (back to start point and feed) + G90 + G1 F[#] Z# + F[#] + (return from sub) + M50 P1 + o return + o110 endif + + (Move to z_clearance height for slow probe) + G90 + G1 F[#] Z[# + #] + + (Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed) + o120 if [# GT 0] + (Initiate Slow Z- Probe) + G91 + F[#] + G38.2 Z-[# * 2] + # = #5063 + G90 + G1 F[#] Z[# + #] + o120 endif + + # = [# + #] + + # = [# - #] + + (Record Z zero in selected WCO) + G10 L2 P#5220 Z[# + #] + + (Move to Toolset location) + G53 G1 F[#] X# Y# + + (pause for dust boot) + M0 (replace the dust boot) + + (Reinstate Feedrate Override) + M50 P1 + +o endsub + +M2 (end program) diff --git a/subroutines/touch_probe_param_update.ngc b/subroutines/touch_probe_param_update.ngc new file mode 100644 index 0000000..f8c60f8 --- /dev/null +++ b/subroutines/touch_probe_param_update.ngc @@ -0,0 +1,75 @@ +o sub + + # = #1 + # = #2 + # = #3 + # = #4 + # = #5 + # = #6 + # = #7 + # = #8 + # = #9 + # = #10 + # = #11 + # = #12 + # = #13 + # = #14 + # = #15 + # = #16 + # = #17 + # = #18 + # = #19 + # = #20 + # = #21 + # = #22 + # = #23 + + #3014 = # + + #3015 = # + + #3016 = # + + #3017 = # + + #3018 = # + + #3019 = # + + #3020 = # + + #3021 = # + + #3022 = # + + #3023 = # + + #3024 = # + + #3025 = # + + #3026 = # + + #3027 = # + + #3028 = # + + #3029 = # + + #3030 = # + + #3031 = # + + #3032 = # + + #3033 = # + + #3034 = # + + #3035 = # + + #3036 = # + +o endsub [1] + +M2 diff --git a/subroutines/unclamptool.ngc b/subroutines/unclamptool.ngc new file mode 100644 index 0000000..ac9c379 --- /dev/null +++ b/subroutines/unclamptool.ngc @@ -0,0 +1,12 @@ +o sub + +M64 P2 ; unclamp the tool + +M66 P2 L3 Q2 ; check the unclamped tool sensor +o100 if [#5399 LT 0] + (abort, Failed to release tool) ; abort if the sensor does not activate in 2 seconds +o100 endif + +o endsub [1] + +M2 diff --git a/subroutines/unload_spindle.ngc b/subroutines/unload_spindle.ngc new file mode 100644 index 0000000..f3a8bf4 --- /dev/null +++ b/subroutines/unload_spindle.ngc @@ -0,0 +1,17 @@ +(author: Chris P) +(version: 0.1) +(date: 04/20/24) + +(unloads tool in spindle in software) +; This is called form the ATC and tool pages + +o sub +(PRINT, o) + +M61 Q0 +G49 +#3991 = 0 + +o endsub + +M2 (end program) diff --git a/subroutines/update_programmable_coolant_params.ngc b/subroutines/update_programmable_coolant_params.ngc new file mode 100644 index 0000000..9702fd7 --- /dev/null +++ b/subroutines/update_programmable_coolant_params.ngc @@ -0,0 +1,22 @@ +(author: Chris P) +(version: 0.2) +(date: 06/27/24) + +o sub + + # = #1 + # = #2 + # = #3 + # = #4 + + #3000 = # + + #3001 = # + + #3002 = # + + #3003 = # + +o endsub [1] + +M2 diff --git a/subroutines/x_data_reset.ngc b/subroutines/x_data_reset.ngc new file mode 100644 index 0000000..39bec9b --- /dev/null +++ b/subroutines/x_data_reset.ngc @@ -0,0 +1,17 @@ +o sub + +#1001 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1001}]) + +#1002 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1002}]) + +#1005 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}]) + +#1006 = 0 +(DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}]) + +o endsub + +M2 (end program) diff --git a/subroutines/y_data_reset.ngc b/subroutines/y_data_reset.ngc new file mode 100644 index 0000000..093d30d --- /dev/null +++ b/subroutines/y_data_reset.ngc @@ -0,0 +1,17 @@ +o sub + +#1003 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1003}]) + +#1004 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1004}]) + +#1007 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}]) + +#1008 = 0 +(DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}]) + +o endsub + +M2 (end program) diff --git a/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.py b/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.py new file mode 100644 index 0000000..a94238f --- /dev/null +++ b/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserAtcButton(QWidget): + def __init__(self, parent=None): + super(UserAtcButton, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.ui b/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.ui new file mode 100644 index 0000000..c61c896 --- /dev/null +++ b/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.ui @@ -0,0 +1,868 @@ + + + USER_ATC_BUTTONS + + + + 0 + 0 + 299 + 508 + + + + + 0 + 0 + + + + User Atc Buttons + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 300 + 0 + + + + + 300 + 16777215 + + + + .QWidget { + background-color: rgb(51, 57, 59); + border-style: solid; + border-color: rgb(186, 189, 182); + border-width: 2px; + border-radius: 6px; +} + + + + 16 + + + 20 + + + 18 + + + 20 + + + 21 + + + + + 15 + + + QLayout::SetFixedSize + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + true + + + false + + + Qt::NoFocus + + + M11P1 User Defined Macro Call from Subroutine Folder + + + -1 + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ATC REV + + + + :/images/ccw_arrow.png:/images/ccw_arrow.png + + + + 20 + 20 + + + + M12P1 + + + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M12 P1 User Defined Macro Call from Subroutine Folder + + + Qt::RightToLeft + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ATC FWD + + + + :/images/cw_arrow.png:/images/cw_arrow.png + + + + 20 + 20 + + + + M11P1 + + + + + + + + + 15 + + + QLayout::SetFixedSize + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::LeftToRight + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + ATC RETRACT + + + + :/images/left_arrow.png:/images/left_arrow.png + + + + 20 + 20 + + + + retractatc.ngc + + + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::RightToLeft + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + ATC EXTEND + + + + :/images/right_arrow.png:/images/right_arrow.png + + + + 20 + 20 + + + + extendatc.ngc + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + CLAMP TOOL + + + clamptool.ngc + + + + + + + true + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + RELEASE TOOL + + + [{"name": "New Rule", "property": "Enable", "expression": "not ch[0]", "channels": [{"url": "status:spindle.0.enabled", "trigger": true}]}] + + + unclamptool.ngc + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + ORIENT SPINDLE + + + true + + + orientspindle.ngc + + + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M112 User Defined Macro Call from Subroutine Folder + + + Qt::RightToLeft + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + UNLOCK SPINDLE + + + + 20 + 20 + + + + M5 + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + MOVE HEAD ABOVE CAROUSEL + + + move_head_above_carousel.ngc + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + MOVE TOOL TO CAROUSEL HEIGHT + + + move_tool_to_carousel_height.ngc + + + + + + + + + + 0 + 0 + + + + Qt::AlignCenter + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 125 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M13 User Defined Macro Call from Subroutine Folder + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + REF CAROUSEL + + + + 20 + 20 + + + + M13 + + + + + + + + + + + + + SubCallButton + QPushButton +

qtpyvcp.widgets.button_widgets.subcall_button
+ + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + + + + + diff --git a/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons_ui.py b/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons_ui.py new file mode 100644 index 0000000..4d2f4e1 --- /dev/null +++ b/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons_ui.py @@ -0,0 +1,445 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_atc_buttons/template_user_atc_buttons/template_user_atc_buttons.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_USER_ATC_BUTTONS(object): + def setupUi(self, USER_ATC_BUTTONS): + USER_ATC_BUTTONS.setObjectName("USER_ATC_BUTTONS") + USER_ATC_BUTTONS.resize(299, 508) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(USER_ATC_BUTTONS.sizePolicy().hasHeightForWidth()) + USER_ATC_BUTTONS.setSizePolicy(sizePolicy) + USER_ATC_BUTTONS.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(USER_ATC_BUTTONS) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName("verticalLayout") + self.widget_64 = QtWidgets.QWidget(USER_ATC_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.widget_64.sizePolicy().hasHeightForWidth()) + self.widget_64.setSizePolicy(sizePolicy) + self.widget_64.setMinimumSize(QtCore.QSize(300, 0)) + self.widget_64.setMaximumSize(QtCore.QSize(300, 16777215)) + self.widget_64.setStyleSheet(".QWidget {\n" +" background-color: rgb(51, 57, 59);\n" +" border-style: solid;\n" +" border-color: rgb(186, 189, 182);\n" +" border-width: 2px;\n" +" border-radius: 6px;\n" +"}") + self.widget_64.setObjectName("widget_64") + self.verticalLayout_66 = QtWidgets.QVBoxLayout(self.widget_64) + self.verticalLayout_66.setContentsMargins(20, 18, 20, 21) + self.verticalLayout_66.setSpacing(16) + self.verticalLayout_66.setObjectName("verticalLayout_66") + self.horizontalLayout_115 = QtWidgets.QHBoxLayout() + self.horizontalLayout_115.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) + self.horizontalLayout_115.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_115.setSpacing(15) + self.horizontalLayout_115.setObjectName("horizontalLayout_115") + self.atc_rev_button = MDIButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.atc_rev_button.sizePolicy().hasHeightForWidth()) + self.atc_rev_button.setSizePolicy(sizePolicy) + self.atc_rev_button.setMinimumSize(QtCore.QSize(120, 45)) + self.atc_rev_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.atc_rev_button.setMouseTracking(True) + self.atc_rev_button.setTabletTracking(False) + self.atc_rev_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.atc_rev_button.setToolTipDuration(-1) + self.atc_rev_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/ccw_arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.atc_rev_button.setIcon(icon) + self.atc_rev_button.setIconSize(QtCore.QSize(20, 20)) + self.atc_rev_button.setObjectName("atc_rev_button") + self.horizontalLayout_115.addWidget(self.atc_rev_button) + self.atc_fwd_button = MDIButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.atc_fwd_button.sizePolicy().hasHeightForWidth()) + self.atc_fwd_button.setSizePolicy(sizePolicy) + self.atc_fwd_button.setMinimumSize(QtCore.QSize(120, 45)) + self.atc_fwd_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.atc_fwd_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.atc_fwd_button.setLayoutDirection(QtCore.Qt.RightToLeft) + self.atc_fwd_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/images/cw_arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.atc_fwd_button.setIcon(icon1) + self.atc_fwd_button.setIconSize(QtCore.QSize(20, 20)) + self.atc_fwd_button.setObjectName("atc_fwd_button") + self.horizontalLayout_115.addWidget(self.atc_fwd_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_115) + self.horizontalLayout_116 = QtWidgets.QHBoxLayout() + self.horizontalLayout_116.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) + self.horizontalLayout_116.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_116.setSpacing(15) + self.horizontalLayout_116.setObjectName("horizontalLayout_116") + self.atc_retract_button = SubCallButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.atc_retract_button.sizePolicy().hasHeightForWidth()) + self.atc_retract_button.setSizePolicy(sizePolicy) + self.atc_retract_button.setMinimumSize(QtCore.QSize(120, 45)) + self.atc_retract_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.atc_retract_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.atc_retract_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(":/images/left_arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.atc_retract_button.setIcon(icon2) + self.atc_retract_button.setIconSize(QtCore.QSize(20, 20)) + self.atc_retract_button.setObjectName("atc_retract_button") + self.horizontalLayout_116.addWidget(self.atc_retract_button) + self.atc_extend_button = SubCallButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.atc_extend_button.sizePolicy().hasHeightForWidth()) + self.atc_extend_button.setSizePolicy(sizePolicy) + self.atc_extend_button.setMinimumSize(QtCore.QSize(120, 45)) + self.atc_extend_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.atc_extend_button.setLayoutDirection(QtCore.Qt.RightToLeft) + self.atc_extend_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + icon3 = QtGui.QIcon() + icon3.addPixmap(QtGui.QPixmap(":/images/right_arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.atc_extend_button.setIcon(icon3) + self.atc_extend_button.setIconSize(QtCore.QSize(20, 20)) + self.atc_extend_button.setObjectName("atc_extend_button") + self.horizontalLayout_116.addWidget(self.atc_extend_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_116) + self.horizontalLayout_117 = QtWidgets.QHBoxLayout() + self.horizontalLayout_117.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_117.setSpacing(15) + self.horizontalLayout_117.setObjectName("horizontalLayout_117") + self.clamp_tool_button = SubCallButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.clamp_tool_button.sizePolicy().hasHeightForWidth()) + self.clamp_tool_button.setSizePolicy(sizePolicy) + self.clamp_tool_button.setMinimumSize(QtCore.QSize(120, 45)) + self.clamp_tool_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.clamp_tool_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.clamp_tool_button.setObjectName("clamp_tool_button") + self.horizontalLayout_117.addWidget(self.clamp_tool_button) + self.release_tool_button = SubCallButton(self.widget_64) + self.release_tool_button.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.release_tool_button.sizePolicy().hasHeightForWidth()) + self.release_tool_button.setSizePolicy(sizePolicy) + self.release_tool_button.setMinimumSize(QtCore.QSize(120, 45)) + self.release_tool_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.release_tool_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.release_tool_button.setObjectName("release_tool_button") + self.horizontalLayout_117.addWidget(self.release_tool_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_117) + self.horizontalLayout_152 = QtWidgets.QHBoxLayout() + self.horizontalLayout_152.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_152.setSpacing(15) + self.horizontalLayout_152.setObjectName("horizontalLayout_152") + self.spindle_orientation = SubCallButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spindle_orientation.sizePolicy().hasHeightForWidth()) + self.spindle_orientation.setSizePolicy(sizePolicy) + self.spindle_orientation.setMinimumSize(QtCore.QSize(120, 45)) + self.spindle_orientation.setMaximumSize(QtCore.QSize(16777215, 45)) + self.spindle_orientation.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.spindle_orientation.setCheckable(True) + self.spindle_orientation.setObjectName("spindle_orientation") + self.horizontalLayout_152.addWidget(self.spindle_orientation) + self.unlock_spindle = MDIButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.unlock_spindle.sizePolicy().hasHeightForWidth()) + self.unlock_spindle.setSizePolicy(sizePolicy) + self.unlock_spindle.setMinimumSize(QtCore.QSize(120, 45)) + self.unlock_spindle.setMaximumSize(QtCore.QSize(16777215, 45)) + self.unlock_spindle.setFocusPolicy(QtCore.Qt.NoFocus) + self.unlock_spindle.setLayoutDirection(QtCore.Qt.RightToLeft) + self.unlock_spindle.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.unlock_spindle.setIconSize(QtCore.QSize(20, 20)) + self.unlock_spindle.setObjectName("unlock_spindle") + self.horizontalLayout_152.addWidget(self.unlock_spindle) + self.verticalLayout_66.addLayout(self.horizontalLayout_152) + self.horizontalLayout_174 = QtWidgets.QHBoxLayout() + self.horizontalLayout_174.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_174.setSpacing(15) + self.horizontalLayout_174.setObjectName("horizontalLayout_174") + self.move_head_above_carousel_button = SubCallButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.move_head_above_carousel_button.sizePolicy().hasHeightForWidth()) + self.move_head_above_carousel_button.setSizePolicy(sizePolicy) + self.move_head_above_carousel_button.setMinimumSize(QtCore.QSize(120, 45)) + self.move_head_above_carousel_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.move_head_above_carousel_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.move_head_above_carousel_button.setObjectName("move_head_above_carousel_button") + self.horizontalLayout_174.addWidget(self.move_head_above_carousel_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_174) + self.horizontalLayout_118 = QtWidgets.QHBoxLayout() + self.horizontalLayout_118.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_118.setSpacing(15) + self.horizontalLayout_118.setObjectName("horizontalLayout_118") + self.move_tool_to_carousel_height_button = SubCallButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.move_tool_to_carousel_height_button.sizePolicy().hasHeightForWidth()) + self.move_tool_to_carousel_height_button.setSizePolicy(sizePolicy) + self.move_tool_to_carousel_height_button.setMinimumSize(QtCore.QSize(120, 45)) + self.move_tool_to_carousel_height_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.move_tool_to_carousel_height_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.move_tool_to_carousel_height_button.setObjectName("move_tool_to_carousel_height_button") + self.horizontalLayout_118.addWidget(self.move_tool_to_carousel_height_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_118) + self.label_20 = QtWidgets.QLabel(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_20.sizePolicy().hasHeightForWidth()) + self.label_20.setSizePolicy(sizePolicy) + self.label_20.setAlignment(QtCore.Qt.AlignCenter) + self.label_20.setObjectName("label_20") + self.verticalLayout_66.addWidget(self.label_20) + self.horizontalLayout_119 = QtWidgets.QHBoxLayout() + self.horizontalLayout_119.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_119.setSpacing(15) + self.horizontalLayout_119.setObjectName("horizontalLayout_119") + self.reference_carousel = MDIButton(self.widget_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.reference_carousel.sizePolicy().hasHeightForWidth()) + self.reference_carousel.setSizePolicy(sizePolicy) + self.reference_carousel.setMinimumSize(QtCore.QSize(125, 45)) + self.reference_carousel.setMaximumSize(QtCore.QSize(16777215, 45)) + self.reference_carousel.setFocusPolicy(QtCore.Qt.NoFocus) + self.reference_carousel.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.reference_carousel.setIconSize(QtCore.QSize(20, 20)) + self.reference_carousel.setObjectName("reference_carousel") + self.horizontalLayout_119.addWidget(self.reference_carousel) + self.verticalLayout_66.addLayout(self.horizontalLayout_119) + self.verticalLayout.addWidget(self.widget_64) + + self.retranslateUi(USER_ATC_BUTTONS) + QtCore.QMetaObject.connectSlotsByName(USER_ATC_BUTTONS) + + def retranslateUi(self, USER_ATC_BUTTONS): + _translate = QtCore.QCoreApplication.translate + USER_ATC_BUTTONS.setWindowTitle(_translate("USER_ATC_BUTTONS", "User Atc Buttons")) + self.atc_rev_button.setToolTip(_translate("USER_ATC_BUTTONS", "M11P1 User Defined Macro Call from Subroutine Folder")) + self.atc_rev_button.setText(_translate("USER_ATC_BUTTONS", " ATC REV")) + self.atc_rev_button.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M12P1")) + self.atc_fwd_button.setToolTip(_translate("USER_ATC_BUTTONS", "M12 P1 User Defined Macro Call from Subroutine Folder")) + self.atc_fwd_button.setText(_translate("USER_ATC_BUTTONS", " ATC FWD ")) + self.atc_fwd_button.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M11P1")) + self.atc_retract_button.setText(_translate("USER_ATC_BUTTONS", " ATC RETRACT")) + self.atc_retract_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "retractatc.ngc")) + self.atc_extend_button.setText(_translate("USER_ATC_BUTTONS", "ATC EXTEND ")) + self.atc_extend_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "extendatc.ngc")) + self.clamp_tool_button.setText(_translate("USER_ATC_BUTTONS", "CLAMP TOOL")) + self.clamp_tool_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "clamptool.ngc")) + self.release_tool_button.setText(_translate("USER_ATC_BUTTONS", "RELEASE TOOL")) + self.release_tool_button.setProperty("rules", _translate("USER_ATC_BUTTONS", "[{\"name\": \"New Rule\", \"property\": \"Enable\", \"expression\": \"not ch[0]\", \"channels\": [{\"url\": \"status:spindle.0.enabled\", \"trigger\": true}]}]")) + self.release_tool_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "unclamptool.ngc")) + self.spindle_orientation.setText(_translate("USER_ATC_BUTTONS", "ORIENT SPINDLE")) + self.spindle_orientation.setProperty("filename", _translate("USER_ATC_BUTTONS", "orientspindle.ngc")) + self.unlock_spindle.setToolTip(_translate("USER_ATC_BUTTONS", "M112 User Defined Macro Call from Subroutine Folder")) + self.unlock_spindle.setText(_translate("USER_ATC_BUTTONS", "UNLOCK SPINDLE")) + self.unlock_spindle.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M5")) + self.move_head_above_carousel_button.setText(_translate("USER_ATC_BUTTONS", "MOVE HEAD ABOVE CAROUSEL")) + self.move_head_above_carousel_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "move_head_above_carousel.ngc")) + self.move_tool_to_carousel_height_button.setText(_translate("USER_ATC_BUTTONS", "MOVE TOOL TO CAROUSEL HEIGHT")) + self.move_tool_to_carousel_height_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "move_tool_to_carousel_height.ngc")) + self.reference_carousel.setToolTip(_translate("USER_ATC_BUTTONS", "M13 User Defined Macro Call from Subroutine Folder")) + self.reference_carousel.setText(_translate("USER_ATC_BUTTONS", "REF CAROUSEL")) + self.reference_carousel.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M13")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.button_widgets.subcall_button import SubCallButton +import probe_basic_rc diff --git a/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.py b/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.py new file mode 100644 index 0000000..47dec90 --- /dev/null +++ b/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserRackAtcButton(QWidget): + def __init__(self, parent=None): + super(UserRackAtcButton, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.ui b/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.ui new file mode 100644 index 0000000..43e38bc --- /dev/null +++ b/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.ui @@ -0,0 +1,699 @@ + + + USER_ATC_BUTTONS + + + + 0 + 0 + 300 + 429 + + + + + 0 + 0 + + + + User Atc Buttons + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 300 + 16777215 + + + + + + + + 16 + + + 20 + + + 18 + + + 20 + + + 18 + + + + + true + + + + 0 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: solid; + border-color: rgb(176, 179, 172); + border-width: 2px; + border-radius: 5px; + color: white; + background: rgb(90, 90, 90); + font: 16pt "Bebas Kai"; +} + + + QFrame::NoFrame + + + ATC MANUAL CONTROL PANEL + + + Qt::AlignCenter + + + true + + + 0 + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M13 User Defined Macro Call from Subroutine Folder + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + AIR BLAST + + + + 20 + 20 + + + + M13 + + + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M13 User Defined Macro Call from Subroutine Folder + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + RETR DUST BOOT + + + + 20 + 20 + + + + M13 + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + CLAMP TOOL + + + clamptool.ngc + + + + + + + false + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + RELEASE TOOL + + + [{"name": "spindle safety", "property": "Enable", "expression": "not ch[0]", "channels": [{"url": "status:spindle.0.enabled", "trigger": true}]}] + + + unclamptool.ngc + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + ORIENT SPINDLE + + + true + + + orientspindle.ngc + + + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M112 User Defined Macro Call from Subroutine Folder + + + Qt::RightToLeft + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + UNLOCK SPINDLE + + + + 20 + 20 + + + + M5 + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + HEAD UP + + + move_head_above_carousel.ngc + + + + + + + + 1 + 0 + + + + + 120 + 45 + + + + + 16777215 + 45 + + + + SubCallButton { + color: white; + border-color: black; + border-style: solid; + border-radius: 5px; + border-width: 2px; + background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255)); + font-family: "Bebas Kai"; + font-size: 15pt; +} + +SubCallButton:disabled { + border-color: gray; +} + +SubCallButton:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959); +} + +SubCallButton:pressed { + background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255)); +} + + + + HEAD DOWN + + + move_tool_to_carousel_height.ngc + + + + + + + + + + + + 15 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 1 + 0 + + + + + 125 + 45 + + + + + 16777215 + 45 + + + + Qt::NoFocus + + + M13 User Defined Macro Call from Subroutine Folder + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + REF RACK DATA + + + + 20 + 20 + + + + M13 + + + + + + + + + + + + + SubCallButton + QPushButton +
qtpyvcp.widgets.button_widgets.subcall_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+
+ + +
diff --git a/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons_ui.py b/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons_ui.py new file mode 100644 index 0000000..ce0b217 --- /dev/null +++ b/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons_ui.py @@ -0,0 +1,354 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_atc_buttons/template_user_rack_atc_buttons/template_user_rack_atc_buttons.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_USER_ATC_BUTTONS(object): + def setupUi(self, USER_ATC_BUTTONS): + USER_ATC_BUTTONS.setObjectName("USER_ATC_BUTTONS") + USER_ATC_BUTTONS.resize(300, 429) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(USER_ATC_BUTTONS.sizePolicy().hasHeightForWidth()) + USER_ATC_BUTTONS.setSizePolicy(sizePolicy) + USER_ATC_BUTTONS.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(USER_ATC_BUTTONS) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName("verticalLayout") + self.frame_64 = QtWidgets.QFrame(USER_ATC_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame_64.sizePolicy().hasHeightForWidth()) + self.frame_64.setSizePolicy(sizePolicy) + self.frame_64.setMaximumSize(QtCore.QSize(300, 16777215)) + self.frame_64.setStyleSheet("") + self.frame_64.setObjectName("frame_64") + self.verticalLayout_66 = QtWidgets.QVBoxLayout(self.frame_64) + self.verticalLayout_66.setContentsMargins(20, 18, 20, 18) + self.verticalLayout_66.setSpacing(16) + self.verticalLayout_66.setObjectName("verticalLayout_66") + self.work_column_header_8 = QtWidgets.QLabel(self.frame_64) + self.work_column_header_8.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header_8.sizePolicy().hasHeightForWidth()) + self.work_column_header_8.setSizePolicy(sizePolicy) + self.work_column_header_8.setMinimumSize(QtCore.QSize(0, 38)) + self.work_column_header_8.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_column_header_8.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179, 172);\n" +" border-width: 2px;\n" +" border-radius: 5px;\n" +" color: white;\n" +" background: rgb(90, 90, 90);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.work_column_header_8.setFrameShape(QtWidgets.QFrame.NoFrame) + self.work_column_header_8.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header_8.setWordWrap(True) + self.work_column_header_8.setIndent(0) + self.work_column_header_8.setObjectName("work_column_header_8") + self.verticalLayout_66.addWidget(self.work_column_header_8) + self.horizontalLayout_119 = QtWidgets.QHBoxLayout() + self.horizontalLayout_119.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_119.setSpacing(15) + self.horizontalLayout_119.setObjectName("horizontalLayout_119") + self.reference_carousel_3 = MDIButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.reference_carousel_3.sizePolicy().hasHeightForWidth()) + self.reference_carousel_3.setSizePolicy(sizePolicy) + self.reference_carousel_3.setMinimumSize(QtCore.QSize(120, 45)) + self.reference_carousel_3.setMaximumSize(QtCore.QSize(16777215, 45)) + self.reference_carousel_3.setFocusPolicy(QtCore.Qt.NoFocus) + self.reference_carousel_3.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.reference_carousel_3.setIconSize(QtCore.QSize(20, 20)) + self.reference_carousel_3.setObjectName("reference_carousel_3") + self.horizontalLayout_119.addWidget(self.reference_carousel_3) + self.reference_carousel_4 = MDIButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.reference_carousel_4.sizePolicy().hasHeightForWidth()) + self.reference_carousel_4.setSizePolicy(sizePolicy) + self.reference_carousel_4.setMinimumSize(QtCore.QSize(120, 45)) + self.reference_carousel_4.setMaximumSize(QtCore.QSize(16777215, 45)) + self.reference_carousel_4.setFocusPolicy(QtCore.Qt.NoFocus) + self.reference_carousel_4.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.reference_carousel_4.setIconSize(QtCore.QSize(20, 20)) + self.reference_carousel_4.setObjectName("reference_carousel_4") + self.horizontalLayout_119.addWidget(self.reference_carousel_4) + self.verticalLayout_66.addLayout(self.horizontalLayout_119) + self.horizontalLayout_117 = QtWidgets.QHBoxLayout() + self.horizontalLayout_117.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_117.setSpacing(15) + self.horizontalLayout_117.setObjectName("horizontalLayout_117") + self.clamp_tool_button = SubCallButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.clamp_tool_button.sizePolicy().hasHeightForWidth()) + self.clamp_tool_button.setSizePolicy(sizePolicy) + self.clamp_tool_button.setMinimumSize(QtCore.QSize(120, 45)) + self.clamp_tool_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.clamp_tool_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.clamp_tool_button.setObjectName("clamp_tool_button") + self.horizontalLayout_117.addWidget(self.clamp_tool_button) + self.release_tool_button = SubCallButton(self.frame_64) + self.release_tool_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.release_tool_button.sizePolicy().hasHeightForWidth()) + self.release_tool_button.setSizePolicy(sizePolicy) + self.release_tool_button.setMinimumSize(QtCore.QSize(120, 45)) + self.release_tool_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.release_tool_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.release_tool_button.setObjectName("release_tool_button") + self.horizontalLayout_117.addWidget(self.release_tool_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_117) + self.horizontalLayout_152 = QtWidgets.QHBoxLayout() + self.horizontalLayout_152.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_152.setSpacing(15) + self.horizontalLayout_152.setObjectName("horizontalLayout_152") + self.spindle_orientation = SubCallButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spindle_orientation.sizePolicy().hasHeightForWidth()) + self.spindle_orientation.setSizePolicy(sizePolicy) + self.spindle_orientation.setMinimumSize(QtCore.QSize(120, 45)) + self.spindle_orientation.setMaximumSize(QtCore.QSize(16777215, 45)) + self.spindle_orientation.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.spindle_orientation.setCheckable(True) + self.spindle_orientation.setObjectName("spindle_orientation") + self.horizontalLayout_152.addWidget(self.spindle_orientation) + self.unlock_spindle = MDIButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.unlock_spindle.sizePolicy().hasHeightForWidth()) + self.unlock_spindle.setSizePolicy(sizePolicy) + self.unlock_spindle.setMinimumSize(QtCore.QSize(120, 45)) + self.unlock_spindle.setMaximumSize(QtCore.QSize(16777215, 45)) + self.unlock_spindle.setFocusPolicy(QtCore.Qt.NoFocus) + self.unlock_spindle.setLayoutDirection(QtCore.Qt.RightToLeft) + self.unlock_spindle.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.unlock_spindle.setIconSize(QtCore.QSize(20, 20)) + self.unlock_spindle.setObjectName("unlock_spindle") + self.horizontalLayout_152.addWidget(self.unlock_spindle) + self.verticalLayout_66.addLayout(self.horizontalLayout_152) + self.horizontalLayout_174 = QtWidgets.QHBoxLayout() + self.horizontalLayout_174.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_174.setSpacing(15) + self.horizontalLayout_174.setObjectName("horizontalLayout_174") + self.move_head_above_carousel_button = SubCallButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.move_head_above_carousel_button.sizePolicy().hasHeightForWidth()) + self.move_head_above_carousel_button.setSizePolicy(sizePolicy) + self.move_head_above_carousel_button.setMinimumSize(QtCore.QSize(120, 45)) + self.move_head_above_carousel_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.move_head_above_carousel_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.move_head_above_carousel_button.setObjectName("move_head_above_carousel_button") + self.horizontalLayout_174.addWidget(self.move_head_above_carousel_button) + self.move_tool_to_carousel_height_button = SubCallButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.move_tool_to_carousel_height_button.sizePolicy().hasHeightForWidth()) + self.move_tool_to_carousel_height_button.setSizePolicy(sizePolicy) + self.move_tool_to_carousel_height_button.setMinimumSize(QtCore.QSize(120, 45)) + self.move_tool_to_carousel_height_button.setMaximumSize(QtCore.QSize(16777215, 45)) + self.move_tool_to_carousel_height_button.setStyleSheet("SubCallButton {\n" +" color: white;\n" +" border-color: black;\n" +" border-style: solid;\n" +" border-radius: 5px;\n" +" border-width: 2px;\n" +" background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(213, 218, 216, 255), stop:0.169312 rgba(82, 82, 83, 255), stop:0.328042 rgba(72, 70, 73, 255), stop:0.492063 rgba(78, 77, 79, 255), stop:0.703704 rgba(72, 70, 73, 255), stop:0.86 rgba(82, 82, 83, 255), stop:1 rgba(213, 218, 216, 255));\n" +" font-family: \"Bebas Kai\";\n" +" font-size: 15pt;\n" +"}\n" +"\n" +"SubCallButton:disabled {\n" +" border-color: gray;\n" +"}\n" +"\n" +"SubCallButton:hover {\n" +" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #A19E9E, stop: 1.0 #5C5959);\n" +"}\n" +"\n" +"SubCallButton:pressed {\n" +" background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(85, 85, 238, 255), stop:0.544974 rgba(90, 91, 239, 255), stop:1 rgba(126, 135, 243, 255));\n" +"}\n" +"") + self.move_tool_to_carousel_height_button.setObjectName("move_tool_to_carousel_height_button") + self.horizontalLayout_174.addWidget(self.move_tool_to_carousel_height_button) + self.verticalLayout_66.addLayout(self.horizontalLayout_174) + self.widget_10 = QtWidgets.QWidget(self.frame_64) + self.widget_10.setObjectName("widget_10") + self.verticalLayout_66.addWidget(self.widget_10) + self.horizontalLayout_159 = QtWidgets.QHBoxLayout() + self.horizontalLayout_159.setContentsMargins(2, 2, 2, 2) + self.horizontalLayout_159.setSpacing(15) + self.horizontalLayout_159.setObjectName("horizontalLayout_159") + self.reference_carousel_2 = MDIButton(self.frame_64) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.reference_carousel_2.sizePolicy().hasHeightForWidth()) + self.reference_carousel_2.setSizePolicy(sizePolicy) + self.reference_carousel_2.setMinimumSize(QtCore.QSize(125, 45)) + self.reference_carousel_2.setMaximumSize(QtCore.QSize(16777215, 45)) + self.reference_carousel_2.setFocusPolicy(QtCore.Qt.NoFocus) + self.reference_carousel_2.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.reference_carousel_2.setIconSize(QtCore.QSize(20, 20)) + self.reference_carousel_2.setObjectName("reference_carousel_2") + self.horizontalLayout_159.addWidget(self.reference_carousel_2) + self.verticalLayout_66.addLayout(self.horizontalLayout_159) + self.verticalLayout.addWidget(self.frame_64) + + self.retranslateUi(USER_ATC_BUTTONS) + QtCore.QMetaObject.connectSlotsByName(USER_ATC_BUTTONS) + + def retranslateUi(self, USER_ATC_BUTTONS): + _translate = QtCore.QCoreApplication.translate + USER_ATC_BUTTONS.setWindowTitle(_translate("USER_ATC_BUTTONS", "User Atc Buttons")) + self.work_column_header_8.setText(_translate("USER_ATC_BUTTONS", "ATC MANUAL CONTROL PANEL")) + self.reference_carousel_3.setToolTip(_translate("USER_ATC_BUTTONS", "M13 User Defined Macro Call from Subroutine Folder")) + self.reference_carousel_3.setText(_translate("USER_ATC_BUTTONS", "AIR BLAST")) + self.reference_carousel_3.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M13")) + self.reference_carousel_4.setToolTip(_translate("USER_ATC_BUTTONS", "M13 User Defined Macro Call from Subroutine Folder")) + self.reference_carousel_4.setText(_translate("USER_ATC_BUTTONS", "RETR DUST BOOT")) + self.reference_carousel_4.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M13")) + self.clamp_tool_button.setText(_translate("USER_ATC_BUTTONS", "CLAMP TOOL")) + self.clamp_tool_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "clamptool.ngc")) + self.release_tool_button.setText(_translate("USER_ATC_BUTTONS", "RELEASE TOOL")) + self.release_tool_button.setProperty("rules", _translate("USER_ATC_BUTTONS", "[{\"name\": \"spindle safety\", \"property\": \"Enable\", \"expression\": \"not ch[0]\", \"channels\": [{\"url\": \"status:spindle.0.enabled\", \"trigger\": true}]}]")) + self.release_tool_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "unclamptool.ngc")) + self.spindle_orientation.setText(_translate("USER_ATC_BUTTONS", "ORIENT SPINDLE")) + self.spindle_orientation.setProperty("filename", _translate("USER_ATC_BUTTONS", "orientspindle.ngc")) + self.unlock_spindle.setToolTip(_translate("USER_ATC_BUTTONS", "M112 User Defined Macro Call from Subroutine Folder")) + self.unlock_spindle.setText(_translate("USER_ATC_BUTTONS", "UNLOCK SPINDLE")) + self.unlock_spindle.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M5")) + self.move_head_above_carousel_button.setText(_translate("USER_ATC_BUTTONS", "HEAD UP")) + self.move_head_above_carousel_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "move_head_above_carousel.ngc")) + self.move_tool_to_carousel_height_button.setText(_translate("USER_ATC_BUTTONS", "HEAD DOWN")) + self.move_tool_to_carousel_height_button.setProperty("filename", _translate("USER_ATC_BUTTONS", "move_tool_to_carousel_height.ngc")) + self.reference_carousel_2.setToolTip(_translate("USER_ATC_BUTTONS", "M13 User Defined Macro Call from Subroutine Folder")) + self.reference_carousel_2.setText(_translate("USER_ATC_BUTTONS", "REF RACK DATA")) + self.reference_carousel_2.setProperty("MDICommand", _translate("USER_ATC_BUTTONS", "M13")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.button_widgets.subcall_button import SubCallButton diff --git a/user_buttons/template_user_buttons/template_user_buttons.py b/user_buttons/template_user_buttons/template_user_buttons.py new file mode 100644 index 0000000..75bc881 --- /dev/null +++ b/user_buttons/template_user_buttons/template_user_buttons.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserButton(QWidget): + def __init__(self, parent=None): + super(UserButton, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_buttons/template_user_buttons/template_user_buttons.ui b/user_buttons/template_user_buttons/template_user_buttons.ui new file mode 100644 index 0000000..ca309de --- /dev/null +++ b/user_buttons/template_user_buttons/template_user_buttons.ui @@ -0,0 +1,410 @@ + + + USER_BUTTONS + + + + 0 + 0 + 285 + 196 + + + + + 0 + 0 + + + + User Buttons + + + Qt::LeftToRight + + + + 1 + + + 3 + + + 1 + + + 1 + + + 3 + + + 8 + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + BLOCK DELETE + + + true + + + program.block-delete.toggle + + + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + M01 BREAK + + + true + + + program.optional-stop.toggle + + + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + Flood + + + true + + + coolant.flood.toggle + + + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + SINGLE BLOCK + + + program.step + + + + + + + + 1 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + Mist + + + true + + + coolant.mist.toggle + + + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + FEED HOLD + + + true + + + [{"channels": [{"url": "status:interp_state?text", "trigger": true}], "property": "Checked", "expression": "ch[0] == 'Paused'", "name": "check when paused"}] + + + program.pause + + + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + CLEAR PGM + + + false + + + program.clear + + + + + + + + 0 + 0 + + + + + 135 + 42 + + + + + 16777215 + 42 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + RELOAD PGM + + + false + + + program.reload + + + + + + + + 1 + 0 + + + + + + + + + 1 + 0 + + + + + + + + + 1 + 0 + + + + + + + + + 1 + 0 + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+
+ + +
diff --git a/user_buttons/template_user_buttons/template_user_buttons_ui.py b/user_buttons/template_user_buttons/template_user_buttons_ui.py new file mode 100644 index 0000000..1cf3f15 --- /dev/null +++ b/user_buttons/template_user_buttons/template_user_buttons_ui.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_buttons/template_user_buttons/template_user_buttons.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_USER_BUTTONS(object): + def setupUi(self, USER_BUTTONS): + USER_BUTTONS.setObjectName("USER_BUTTONS") + USER_BUTTONS.resize(285, 196) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(USER_BUTTONS.sizePolicy().hasHeightForWidth()) + USER_BUTTONS.setSizePolicy(sizePolicy) + USER_BUTTONS.setLayoutDirection(QtCore.Qt.LeftToRight) + self.gridLayout = QtWidgets.QGridLayout(USER_BUTTONS) + self.gridLayout.setContentsMargins(1, 3, 1, 1) + self.gridLayout.setHorizontalSpacing(3) + self.gridLayout.setVerticalSpacing(8) + self.gridLayout.setObjectName("gridLayout") + self.block_delete_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.block_delete_button.sizePolicy().hasHeightForWidth()) + self.block_delete_button.setSizePolicy(sizePolicy) + self.block_delete_button.setMinimumSize(QtCore.QSize(135, 42)) + self.block_delete_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.block_delete_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.block_delete_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.block_delete_button.setCheckable(True) + self.block_delete_button.setObjectName("block_delete_button") + self.gridLayout.addWidget(self.block_delete_button, 2, 2, 1, 1) + self.m01_break_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.m01_break_button.sizePolicy().hasHeightForWidth()) + self.m01_break_button.setSizePolicy(sizePolicy) + self.m01_break_button.setMinimumSize(QtCore.QSize(135, 42)) + self.m01_break_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.m01_break_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.m01_break_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.m01_break_button.setCheckable(True) + self.m01_break_button.setObjectName("m01_break_button") + self.gridLayout.addWidget(self.m01_break_button, 3, 2, 1, 1) + self.flood_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.flood_button.sizePolicy().hasHeightForWidth()) + self.flood_button.setSizePolicy(sizePolicy) + self.flood_button.setMinimumSize(QtCore.QSize(135, 42)) + self.flood_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.flood_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.flood_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.flood_button.setCheckable(True) + self.flood_button.setObjectName("flood_button") + self.gridLayout.addWidget(self.flood_button, 2, 0, 1, 1) + self.single_block_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.single_block_button.sizePolicy().hasHeightForWidth()) + self.single_block_button.setSizePolicy(sizePolicy) + self.single_block_button.setMinimumSize(QtCore.QSize(135, 42)) + self.single_block_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.single_block_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.single_block_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.single_block_button.setObjectName("single_block_button") + self.gridLayout.addWidget(self.single_block_button, 1, 2, 1, 1) + self.mist_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.mist_button.sizePolicy().hasHeightForWidth()) + self.mist_button.setSizePolicy(sizePolicy) + self.mist_button.setMinimumSize(QtCore.QSize(135, 42)) + self.mist_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.mist_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.mist_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.mist_button.setCheckable(True) + self.mist_button.setObjectName("mist_button") + self.gridLayout.addWidget(self.mist_button, 3, 0, 1, 1) + self.feed_hold_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.feed_hold_button.sizePolicy().hasHeightForWidth()) + self.feed_hold_button.setSizePolicy(sizePolicy) + self.feed_hold_button.setMinimumSize(QtCore.QSize(135, 42)) + self.feed_hold_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.feed_hold_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.feed_hold_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.feed_hold_button.setCheckable(True) + self.feed_hold_button.setObjectName("feed_hold_button") + self.gridLayout.addWidget(self.feed_hold_button, 0, 2, 1, 1) + self.clear_program_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.clear_program_button.sizePolicy().hasHeightForWidth()) + self.clear_program_button.setSizePolicy(sizePolicy) + self.clear_program_button.setMinimumSize(QtCore.QSize(135, 42)) + self.clear_program_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.clear_program_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.clear_program_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.clear_program_button.setCheckable(False) + self.clear_program_button.setObjectName("clear_program_button") + self.gridLayout.addWidget(self.clear_program_button, 1, 0, 1, 1) + self.reload_program_button = ActionButton(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.reload_program_button.sizePolicy().hasHeightForWidth()) + self.reload_program_button.setSizePolicy(sizePolicy) + self.reload_program_button.setMinimumSize(QtCore.QSize(135, 42)) + self.reload_program_button.setMaximumSize(QtCore.QSize(16777215, 42)) + self.reload_program_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.reload_program_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.reload_program_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.reload_program_button.setCheckable(False) + self.reload_program_button.setObjectName("reload_program_button") + self.gridLayout.addWidget(self.reload_program_button, 0, 0, 1, 1) + self.label = QtWidgets.QLabel(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) + self.label.setSizePolicy(sizePolicy) + self.label.setObjectName("label") + self.gridLayout.addWidget(self.label, 0, 1, 1, 1) + self.label_2 = QtWidgets.QLabel(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) + self.label_2.setSizePolicy(sizePolicy) + self.label_2.setObjectName("label_2") + self.gridLayout.addWidget(self.label_2, 1, 1, 1, 1) + self.label_3 = QtWidgets.QLabel(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) + self.label_3.setSizePolicy(sizePolicy) + self.label_3.setObjectName("label_3") + self.gridLayout.addWidget(self.label_3, 2, 1, 1, 1) + self.label_4 = QtWidgets.QLabel(USER_BUTTONS) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth()) + self.label_4.setSizePolicy(sizePolicy) + self.label_4.setObjectName("label_4") + self.gridLayout.addWidget(self.label_4, 3, 1, 1, 1) + + self.retranslateUi(USER_BUTTONS) + QtCore.QMetaObject.connectSlotsByName(USER_BUTTONS) + + def retranslateUi(self, USER_BUTTONS): + _translate = QtCore.QCoreApplication.translate + USER_BUTTONS.setWindowTitle(_translate("USER_BUTTONS", "User Buttons")) + self.block_delete_button.setText(_translate("USER_BUTTONS", "BLOCK DELETE")) + self.block_delete_button.setProperty("actionName", _translate("USER_BUTTONS", "program.block-delete.toggle")) + self.m01_break_button.setText(_translate("USER_BUTTONS", "M01 BREAK")) + self.m01_break_button.setProperty("actionName", _translate("USER_BUTTONS", "program.optional-stop.toggle")) + self.flood_button.setText(_translate("USER_BUTTONS", "Flood")) + self.flood_button.setProperty("actionName", _translate("USER_BUTTONS", "coolant.flood.toggle")) + self.single_block_button.setText(_translate("USER_BUTTONS", "SINGLE BLOCK")) + self.single_block_button.setProperty("actionName", _translate("USER_BUTTONS", "program.step")) + self.mist_button.setText(_translate("USER_BUTTONS", "Mist")) + self.mist_button.setProperty("actionName", _translate("USER_BUTTONS", "coolant.mist.toggle")) + self.feed_hold_button.setText(_translate("USER_BUTTONS", "FEED HOLD")) + self.feed_hold_button.setProperty("rules", _translate("USER_BUTTONS", "[{\"channels\": [{\"url\": \"status:interp_state?text\", \"trigger\": true}], \"property\": \"Checked\", \"expression\": \"ch[0] == \'Paused\'\", \"name\": \"check when paused\"}]")) + self.feed_hold_button.setProperty("actionName", _translate("USER_BUTTONS", "program.pause")) + self.clear_program_button.setText(_translate("USER_BUTTONS", "CLEAR PGM")) + self.clear_program_button.setProperty("actionName", _translate("USER_BUTTONS", "program.clear")) + self.reload_program_button.setText(_translate("USER_BUTTONS", "RELOAD PGM")) + self.reload_program_button.setProperty("actionName", _translate("USER_BUTTONS", "program.reload")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton diff --git a/user_dro_display/user_dros/dros_user.py b/user_dro_display/user_dros/dros_user.py new file mode 100644 index 0000000..1a29dfb --- /dev/null +++ b/user_dro_display/user_dros/dros_user.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserDRO(QWidget): + def __init__(self, parent=None): + super(UserDRO, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_dro_display/user_dros/dros_user.ui b/user_dro_display/user_dros/dros_user.ui new file mode 100644 index 0000000..e437517 --- /dev/null +++ b/user_dro_display/user_dros/dros_user.ui @@ -0,0 +1,2148 @@ + + + dros_user + + + + 0 + 0 + 466 + 316 + + + + + 0 + 0 + + + + dros_user + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 14pt "Bebas Kai"; +} + + + ALL + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 B0.0 + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + .QFrame{ + border-style: solid; + border-color: rgb(176, 179,172); + border-width: 1px; + border-radius: 4px; + background-color: rgb(90, 90, 90); + padding: -5px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 5 + + + 7 + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + Qt::AlignCenter + + + [{"channels": [{"url": "status:g5x_index?text", "trigger": true}], "property": "Text", "expression": "ch[0] + ' WORK'\n", "name": "WCS Header"}] + + + + + + + false + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + MACHINE + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + DTG + + + Qt::AlignCenter + + + + + + + + + + + 1 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF ALL + + + [{"channels": [{"url": "status:all_axes_homed", "trigger": true}], "property": "Text", "expression": "'HOMED' if ch[0] else 'REF ALL'", "name": "reference_all"}, {"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.all + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + X + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + 0.000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF X + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:x + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Y + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Y + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:y + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Z + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Z + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:z + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + A + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF A + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:a + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + B + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} B0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF B + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:b + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + C + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} C0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 5 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 5 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 5 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF C + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:c + + + + + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/user_dros/dros_user_ui.py b/user_dro_display/user_dros/dros_user_ui.py new file mode 100644 index 0000000..d130ba3 --- /dev/null +++ b/user_dro_display/user_dros/dros_user_ui.py @@ -0,0 +1,1047 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/user_dros/dros_user.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dros_user(object): + def setupUi(self, dros_user): + dros_user.setObjectName("dros_user") + dros_user.resize(466, 316) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(dros_user.sizePolicy().hasHeightForWidth()) + dros_user.setSizePolicy(sizePolicy) + dros_user.setLayoutDirection(QtCore.Qt.LeftToRight) + self.c_axis_dro_layout_2 = QtWidgets.QVBoxLayout(dros_user) + self.c_axis_dro_layout_2.setContentsMargins(0, 0, 0, 0) + self.c_axis_dro_layout_2.setSpacing(0) + self.c_axis_dro_layout_2.setObjectName("c_axis_dro_layout_2") + self.widget_user = QtWidgets.QWidget(dros_user) + self.widget_user.setObjectName("widget_user") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget_user) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_4.setSpacing(0) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.header_layout = QtWidgets.QHBoxLayout() + self.header_layout.setContentsMargins(1, 1, 1, 1) + self.header_layout.setSpacing(7) + self.header_layout.setObjectName("header_layout") + self.zero_all_button = MDIButton(self.widget_user) + self.zero_all_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_all_button.sizePolicy().hasHeightForWidth()) + self.zero_all_button.setSizePolicy(sizePolicy) + self.zero_all_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_all_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_all_button.setStyleSheet("MDIButton {\n" +" font: 14pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/zero.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zero_all_button.setIcon(icon) + self.zero_all_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_all_button.setObjectName("zero_all_button") + self.header_layout.addWidget(self.zero_all_button) + self.frame = QtWidgets.QFrame(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy) + self.frame.setMinimumSize(QtCore.QSize(0, 40)) + self.frame.setMaximumSize(QtCore.QSize(16777215, 40)) + self.frame.setStyleSheet(".QFrame{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179,172);\n" +" border-width: 1px;\n" +" border-radius: 4px;\n" +" background-color: rgb(90, 90, 90);\n" +" padding: -5px;\n" +"}") + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.horizontalLayout_103 = QtWidgets.QHBoxLayout(self.frame) + self.horizontalLayout_103.setContentsMargins(5, -1, 7, -1) + self.horizontalLayout_103.setSpacing(8) + self.horizontalLayout_103.setObjectName("horizontalLayout_103") + self.work_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header.sizePolicy().hasHeightForWidth()) + self.work_column_header.setSizePolicy(sizePolicy) + self.work_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.work_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.work_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.work_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header.setObjectName("work_column_header") + self.horizontalLayout_103.addWidget(self.work_column_header) + self.machine_column_header = QtWidgets.QLabel(self.frame) + self.machine_column_header.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.machine_column_header.sizePolicy().hasHeightForWidth()) + self.machine_column_header.setSizePolicy(sizePolicy) + self.machine_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.machine_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.machine_column_header.setObjectName("machine_column_header") + self.horizontalLayout_103.addWidget(self.machine_column_header) + self.dtg_column_header = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dtg_column_header.sizePolicy().hasHeightForWidth()) + self.dtg_column_header.setSizePolicy(sizePolicy) + self.dtg_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.dtg_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.dtg_column_header.setObjectName("dtg_column_header") + self.horizontalLayout_103.addWidget(self.dtg_column_header) + self.header_layout.addWidget(self.frame) + self.ref_all_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_all_button.sizePolicy().hasHeightForWidth()) + self.ref_all_button.setSizePolicy(sizePolicy) + self.ref_all_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_all_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_all_button.setObjectName("ref_all_button") + self.header_layout.addWidget(self.ref_all_button) + self.verticalLayout_4.addLayout(self.header_layout) + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.x_axis_dro_layout.setSpacing(7) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(self.widget_user) + self.zero_x_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_x_button.sizePolicy().hasHeightForWidth()) + self.zero_x_button.setSizePolicy(sizePolicy) + self.zero_x_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_x_button.setIcon(icon) + self.zero_x_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.dro_entry_main_x = DROLineEdit(self.widget_user) + self.dro_entry_main_x.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_x.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_x.setFont(font) + self.dro_entry_main_x.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_x.setProperty("referenceType", 1) + self.dro_entry_main_x.setProperty("axisNumber", 0) + self.dro_entry_main_x.setProperty("latheMode", 0) + self.dro_entry_main_x.setObjectName("dro_entry_main_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_main_x) + self.drolabel_machine_x = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_x.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_x.setSizePolicy(sizePolicy) + self.drolabel_machine_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_x.setProperty("referenceType", 0) + self.drolabel_machine_x.setProperty("axisNumber", 0) + self.drolabel_machine_x.setProperty("latheMode", 0) + self.drolabel_machine_x.setObjectName("drolabel_machine_x") + self.x_axis_dro_layout.addWidget(self.drolabel_machine_x) + self.drolabel_dtg_x = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_x.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_x.setSizePolicy(sizePolicy) + self.drolabel_dtg_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_x.setProperty("referenceType", 2) + self.drolabel_dtg_x.setProperty("axisNumber", 0) + self.drolabel_dtg_x.setProperty("latheMode", 0) + self.drolabel_dtg_x.setObjectName("drolabel_dtg_x") + self.x_axis_dro_layout.addWidget(self.drolabel_dtg_x) + self.ref_x_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_x_button.sizePolicy().hasHeightForWidth()) + self.ref_x_button.setSizePolicy(sizePolicy) + self.ref_x_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_x_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_x_button.setObjectName("ref_x_button") + self.x_axis_dro_layout.addWidget(self.ref_x_button) + self.verticalLayout_4.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.y_axis_dro_layout.setSpacing(7) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(self.widget_user) + self.zero_y_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_y_button.sizePolicy().hasHeightForWidth()) + self.zero_y_button.setSizePolicy(sizePolicy) + self.zero_y_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setIcon(icon) + self.zero_y_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.dro_entry_main_y = DROLineEdit(self.widget_user) + self.dro_entry_main_y.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_y.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_y.setFont(font) + self.dro_entry_main_y.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_y.setProperty("axisNumber", 1) + self.dro_entry_main_y.setObjectName("dro_entry_main_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_main_y) + self.drolabel_machine_y = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_y.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_y.setSizePolicy(sizePolicy) + self.drolabel_machine_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_y.setProperty("referenceType", 0) + self.drolabel_machine_y.setProperty("axisNumber", 1) + self.drolabel_machine_y.setProperty("latheMode", 0) + self.drolabel_machine_y.setObjectName("drolabel_machine_y") + self.y_axis_dro_layout.addWidget(self.drolabel_machine_y) + self.drolabel_dtg_y = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_y.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_y.setSizePolicy(sizePolicy) + self.drolabel_dtg_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_y.setProperty("referenceType", 2) + self.drolabel_dtg_y.setProperty("axisNumber", 1) + self.drolabel_dtg_y.setProperty("latheMode", 0) + self.drolabel_dtg_y.setObjectName("drolabel_dtg_y") + self.y_axis_dro_layout.addWidget(self.drolabel_dtg_y) + self.ref_y_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_y_button.sizePolicy().hasHeightForWidth()) + self.ref_y_button.setSizePolicy(sizePolicy) + self.ref_y_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_y_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_y_button.setObjectName("ref_y_button") + self.y_axis_dro_layout.addWidget(self.ref_y_button) + self.verticalLayout_4.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.z_axis_dro_layout.setSpacing(7) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(self.widget_user) + self.zero_z_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_z_button.sizePolicy().hasHeightForWidth()) + self.zero_z_button.setSizePolicy(sizePolicy) + self.zero_z_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setIcon(icon) + self.zero_z_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.dro_entry_main_z = DROLineEdit(self.widget_user) + self.dro_entry_main_z.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_z.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_z.setFont(font) + self.dro_entry_main_z.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_z.setProperty("axisNumber", 2) + self.dro_entry_main_z.setObjectName("dro_entry_main_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_main_z) + self.drolabel_machine_z = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_z.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_z.setSizePolicy(sizePolicy) + self.drolabel_machine_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_z.setProperty("referenceType", 0) + self.drolabel_machine_z.setProperty("axisNumber", 2) + self.drolabel_machine_z.setProperty("latheMode", 0) + self.drolabel_machine_z.setObjectName("drolabel_machine_z") + self.z_axis_dro_layout.addWidget(self.drolabel_machine_z) + self.drolabel_dtg_z = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_z.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_z.setSizePolicy(sizePolicy) + self.drolabel_dtg_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_z.setProperty("referenceType", 2) + self.drolabel_dtg_z.setProperty("axisNumber", 2) + self.drolabel_dtg_z.setProperty("latheMode", 0) + self.drolabel_dtg_z.setObjectName("drolabel_dtg_z") + self.z_axis_dro_layout.addWidget(self.drolabel_dtg_z) + self.ref_z_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_z_button.sizePolicy().hasHeightForWidth()) + self.ref_z_button.setSizePolicy(sizePolicy) + self.ref_z_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_z_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_z_button.setObjectName("ref_z_button") + self.z_axis_dro_layout.addWidget(self.ref_z_button) + self.verticalLayout_4.addLayout(self.z_axis_dro_layout) + self.a_axis_dro_layout = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.a_axis_dro_layout.setSpacing(7) + self.a_axis_dro_layout.setObjectName("a_axis_dro_layout") + self.zero_a_button = MDIButton(self.widget_user) + self.zero_a_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_a_button.sizePolicy().hasHeightForWidth()) + self.zero_a_button.setSizePolicy(sizePolicy) + self.zero_a_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_a_button.setIcon(icon) + self.zero_a_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_a_button.setObjectName("zero_a_button") + self.a_axis_dro_layout.addWidget(self.zero_a_button) + self.dro_entry_main_a = DROLineEdit(self.widget_user) + self.dro_entry_main_a.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_a.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_a.setFont(font) + self.dro_entry_main_a.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_a.setProperty("axisNumber", 3) + self.dro_entry_main_a.setObjectName("dro_entry_main_a") + self.a_axis_dro_layout.addWidget(self.dro_entry_main_a) + self.drolabel_machine_a = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_a.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_a.setSizePolicy(sizePolicy) + self.drolabel_machine_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_a.setProperty("referenceType", 0) + self.drolabel_machine_a.setProperty("axisNumber", 3) + self.drolabel_machine_a.setProperty("latheMode", 0) + self.drolabel_machine_a.setObjectName("drolabel_machine_a") + self.a_axis_dro_layout.addWidget(self.drolabel_machine_a) + self.drolabel_dtg_a = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_a.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_a.setSizePolicy(sizePolicy) + self.drolabel_dtg_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_a.setProperty("referenceType", 2) + self.drolabel_dtg_a.setProperty("axisNumber", 3) + self.drolabel_dtg_a.setProperty("latheMode", 0) + self.drolabel_dtg_a.setObjectName("drolabel_dtg_a") + self.a_axis_dro_layout.addWidget(self.drolabel_dtg_a) + self.ref_a_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_a_button.sizePolicy().hasHeightForWidth()) + self.ref_a_button.setSizePolicy(sizePolicy) + self.ref_a_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_a_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_a_button.setObjectName("ref_a_button") + self.a_axis_dro_layout.addWidget(self.ref_a_button) + self.verticalLayout_4.addLayout(self.a_axis_dro_layout) + self.b_axis_dro_layout = QtWidgets.QHBoxLayout() + self.b_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.b_axis_dro_layout.setSpacing(7) + self.b_axis_dro_layout.setObjectName("b_axis_dro_layout") + self.zero_b_button = MDIButton(self.widget_user) + self.zero_b_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_b_button.sizePolicy().hasHeightForWidth()) + self.zero_b_button.setSizePolicy(sizePolicy) + self.zero_b_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_b_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_b_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_b_button.setIcon(icon) + self.zero_b_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_b_button.setObjectName("zero_b_button") + self.b_axis_dro_layout.addWidget(self.zero_b_button) + self.dro_entry_main_b = DROLineEdit(self.widget_user) + self.dro_entry_main_b.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_b.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_b.setFont(font) + self.dro_entry_main_b.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_b.setProperty("referenceType", 1) + self.dro_entry_main_b.setProperty("axisNumber", 4) + self.dro_entry_main_b.setProperty("latheMode", 0) + self.dro_entry_main_b.setObjectName("dro_entry_main_b") + self.b_axis_dro_layout.addWidget(self.dro_entry_main_b) + self.drolabel_machine_b = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_b.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_b.setSizePolicy(sizePolicy) + self.drolabel_machine_b.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_b.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_b.setProperty("referenceType", 0) + self.drolabel_machine_b.setProperty("axisNumber", 4) + self.drolabel_machine_b.setProperty("latheMode", 0) + self.drolabel_machine_b.setObjectName("drolabel_machine_b") + self.b_axis_dro_layout.addWidget(self.drolabel_machine_b) + self.drolabel_dtg_b = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_b.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_b.setSizePolicy(sizePolicy) + self.drolabel_dtg_b.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_b.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_b.setProperty("referenceType", 2) + self.drolabel_dtg_b.setProperty("axisNumber", 4) + self.drolabel_dtg_b.setProperty("latheMode", 0) + self.drolabel_dtg_b.setObjectName("drolabel_dtg_b") + self.b_axis_dro_layout.addWidget(self.drolabel_dtg_b) + self.ref_b_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_b_button.sizePolicy().hasHeightForWidth()) + self.ref_b_button.setSizePolicy(sizePolicy) + self.ref_b_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_b_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_b_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_b_button.setObjectName("ref_b_button") + self.b_axis_dro_layout.addWidget(self.ref_b_button) + self.verticalLayout_4.addLayout(self.b_axis_dro_layout) + self.c_axis_dro_layout = QtWidgets.QHBoxLayout() + self.c_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.c_axis_dro_layout.setSpacing(7) + self.c_axis_dro_layout.setObjectName("c_axis_dro_layout") + self.zero_c_button = MDIButton(self.widget_user) + self.zero_c_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_c_button.sizePolicy().hasHeightForWidth()) + self.zero_c_button.setSizePolicy(sizePolicy) + self.zero_c_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_c_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_c_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_c_button.setIcon(icon) + self.zero_c_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_c_button.setObjectName("zero_c_button") + self.c_axis_dro_layout.addWidget(self.zero_c_button) + self.dro_entry_main_c = DROLineEdit(self.widget_user) + self.dro_entry_main_c.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_c.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_c.setFont(font) + self.dro_entry_main_c.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_c.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_c.setProperty("referenceType", 1) + self.dro_entry_main_c.setProperty("axisNumber", 5) + self.dro_entry_main_c.setProperty("latheMode", 0) + self.dro_entry_main_c.setObjectName("dro_entry_main_c") + self.c_axis_dro_layout.addWidget(self.dro_entry_main_c) + self.drolabel_machine_c = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_c.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_c.setSizePolicy(sizePolicy) + self.drolabel_machine_c.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_c.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_c.setProperty("referenceType", 0) + self.drolabel_machine_c.setProperty("axisNumber", 5) + self.drolabel_machine_c.setProperty("latheMode", 0) + self.drolabel_machine_c.setObjectName("drolabel_machine_c") + self.c_axis_dro_layout.addWidget(self.drolabel_machine_c) + self.drolabel_dtg_c = DROLabel(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_c.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_c.setSizePolicy(sizePolicy) + self.drolabel_dtg_c.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_c.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_c.setProperty("referenceType", 2) + self.drolabel_dtg_c.setProperty("axisNumber", 5) + self.drolabel_dtg_c.setProperty("latheMode", 0) + self.drolabel_dtg_c.setObjectName("drolabel_dtg_c") + self.c_axis_dro_layout.addWidget(self.drolabel_dtg_c) + self.ref_c_button = ActionButton(self.widget_user) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_c_button.sizePolicy().hasHeightForWidth()) + self.ref_c_button.setSizePolicy(sizePolicy) + self.ref_c_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_c_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_c_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_c_button.setObjectName("ref_c_button") + self.c_axis_dro_layout.addWidget(self.ref_c_button) + self.verticalLayout_4.addLayout(self.c_axis_dro_layout) + self.c_axis_dro_layout_2.addWidget(self.widget_user) + + self.retranslateUi(dros_user) + QtCore.QMetaObject.connectSlotsByName(dros_user) + + def retranslateUi(self, dros_user): + _translate = QtCore.QCoreApplication.translate + dros_user.setWindowTitle(_translate("dros_user", "dros_user")) + self.zero_all_button.setText(_translate("dros_user", "ALL")) + self.zero_all_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_all_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 B0.0")) + self.work_column_header.setProperty("rules", _translate("dros_user", "[{\"channels\": [{\"url\": \"status:g5x_index?text\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"ch[0] + \' WORK\'\\n\", \"name\": \"WCS Header\"}]")) + self.machine_column_header.setText(_translate("dros_user", "MACHINE")) + self.dtg_column_header.setText(_translate("dros_user", "DTG")) + self.ref_all_button.setText(_translate("dros_user", "REF ALL")) + self.ref_all_button.setProperty("rules", _translate("dros_user", "[{\"channels\": [{\"url\": \"status:all_axes_homed\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\'HOMED\' if ch[0] else \'REF ALL\'\", \"name\": \"reference_all\"}, {\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_all_button.setProperty("actionName", _translate("dros_user", "machine.home.all")) + self.zero_x_button.setText(_translate("dros_user", "X")) + self.zero_x_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} X0.0")) + self.dro_entry_main_x.setText(_translate("dros_user", " 0.000")) + self.dro_entry_main_x.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.dro_entry_main_x.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.dro_entry_main_x.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_machine_x.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_machine_x.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_machine_x.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_dtg_x.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_dtg_x.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_dtg_x.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.ref_x_button.setText(_translate("dros_user", "REF X")) + self.ref_x_button.setProperty("rules", _translate("dros_user", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_x_button.setProperty("actionName", _translate("dros_user", "machine.home.axis:x")) + self.zero_y_button.setText(_translate("dros_user", "Y")) + self.zero_y_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} Y0.0")) + self.drolabel_machine_y.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_machine_y.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_machine_y.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_dtg_y.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_dtg_y.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_dtg_y.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.ref_y_button.setText(_translate("dros_user", "REF Y")) + self.ref_y_button.setProperty("rules", _translate("dros_user", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_y_button.setProperty("actionName", _translate("dros_user", "machine.home.axis:y")) + self.zero_z_button.setText(_translate("dros_user", "Z")) + self.zero_z_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} Z0.0")) + self.drolabel_machine_z.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_machine_z.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_machine_z.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_dtg_z.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_dtg_z.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_dtg_z.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.ref_z_button.setText(_translate("dros_user", "REF Z")) + self.ref_z_button.setProperty("rules", _translate("dros_user", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_z_button.setProperty("actionName", _translate("dros_user", "machine.home.axis:z")) + self.zero_a_button.setText(_translate("dros_user", "A")) + self.zero_a_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} A0.0")) + self.drolabel_machine_a.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_machine_a.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_machine_a.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_dtg_a.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_dtg_a.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_dtg_a.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.ref_a_button.setText(_translate("dros_user", "REF A")) + self.ref_a_button.setProperty("rules", _translate("dros_user", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_a_button.setProperty("actionName", _translate("dros_user", "machine.home.axis:a")) + self.zero_b_button.setText(_translate("dros_user", "B")) + self.zero_b_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_b_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} B0.0")) + self.dro_entry_main_b.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.dro_entry_main_b.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.dro_entry_main_b.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_machine_b.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_machine_b.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_machine_b.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_dtg_b.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_dtg_b.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_dtg_b.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.ref_b_button.setText(_translate("dros_user", "REF B")) + self.ref_b_button.setProperty("rules", _translate("dros_user", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_b_button.setProperty("actionName", _translate("dros_user", "machine.home.axis:b")) + self.zero_c_button.setText(_translate("dros_user", "C")) + self.zero_c_button.setProperty("rules", _translate("dros_user", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_c_button.setProperty("MDICommand", _translate("dros_user", "G10 L20 P{ch[0]} C0.0")) + self.dro_entry_main_c.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.dro_entry_main_c.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.dro_entry_main_c.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_machine_c.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_machine_c.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_machine_c.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.drolabel_dtg_c.setProperty("inchFormat", _translate("dros_user", "%9.4f")) + self.drolabel_dtg_c.setProperty("millimeterFormat", _translate("dros_user", "%10.3f")) + self.drolabel_dtg_c.setProperty("degreeFormat", _translate("dros_user", "%10.2f")) + self.ref_c_button.setText(_translate("dros_user", "REF C")) + self.ref_c_button.setProperty("rules", _translate("dros_user", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_c_button.setProperty("actionName", _translate("dros_user", "machine.home.axis:c")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/user_dros/offset_dros_user.ui b/user_dro_display/user_dros/offset_dros_user.ui new file mode 100644 index 0000000..ec6f619 --- /dev/null +++ b/user_dro_display/user_dros/offset_dros_user.ui @@ -0,0 +1,2024 @@ + + + offset_dros_xyzab + + + + 0 + 0 + 493 + 332 + + + + + 0 + 0 + + + + offset_dros_xyzab + + + Qt::LeftToRight + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 0 + 0 + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + X + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Y + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Z + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"url": "status:tool_offset", "trigger": true}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "tool offset"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + A + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + + 12 + + + 6 + + + 6 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} B0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + B + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 4 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + + 12 + + + 6 + + + 6 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} C0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + C + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/user_dros/offset_dros_user_ui.py b/user_dro_display/user_dros/offset_dros_user_ui.py new file mode 100644 index 0000000..0809d19 --- /dev/null +++ b/user_dro_display/user_dros/offset_dros_user_ui.py @@ -0,0 +1,1085 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/user_dros/offset_dros_user.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_offset_dros_xyzab(object): + def setupUi(self, offset_dros_xyzab): + offset_dros_xyzab.setObjectName("offset_dros_xyzab") + offset_dros_xyzab.resize(493, 332) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(offset_dros_xyzab.sizePolicy().hasHeightForWidth()) + offset_dros_xyzab.setSizePolicy(sizePolicy) + offset_dros_xyzab.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(offset_dros_xyzab) + self.verticalLayout.setContentsMargins(9, 9, 9, 9) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.x_axis_dro_layout.setSpacing(12) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button_offset = MDIButton(offset_dros_xyzab) + self.zero_x_button_offset.setEnabled(False) + self.zero_x_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_x_button_offset.setObjectName("zero_x_button_offset") + self.x_axis_dro_layout.addWidget(self.zero_x_button_offset) + self.axis_label_x = QtWidgets.QLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_label_x.sizePolicy().hasHeightForWidth()) + self.axis_label_x.setSizePolicy(sizePolicy) + self.axis_label_x.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_x.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_x.setObjectName("axis_label_x") + self.x_axis_dro_layout.addWidget(self.axis_label_x) + self.dro_entry_offset_x = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_x.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_x.setSizePolicy(sizePolicy) + self.dro_entry_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_x.setFont(font) + self.dro_entry_offset_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_x.setObjectName("dro_entry_offset_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_offset_x) + self.drolabel_work_x = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_x.sizePolicy().hasHeightForWidth()) + self.drolabel_work_x.setSizePolicy(sizePolicy) + self.drolabel_work_x.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_x.setProperty("referenceType", 0) + self.drolabel_work_x.setProperty("axisNumber", 0) + self.drolabel_work_x.setProperty("latheMode", 0) + self.drolabel_work_x.setObjectName("drolabel_work_x") + self.x_axis_dro_layout.addWidget(self.drolabel_work_x) + self.work_offset_x = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_x.sizePolicy().hasHeightForWidth()) + self.work_offset_x.setSizePolicy(sizePolicy) + self.work_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_x.setObjectName("work_offset_x") + self.x_axis_dro_layout.addWidget(self.work_offset_x) + self.g52_g92_x = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_x.sizePolicy().hasHeightForWidth()) + self.g52_g92_x.setSizePolicy(sizePolicy) + self.g52_g92_x.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_x.setObjectName("g52_g92_x") + self.x_axis_dro_layout.addWidget(self.g52_g92_x) + self.tool_offset_x = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_x.sizePolicy().hasHeightForWidth()) + self.tool_offset_x.setSizePolicy(sizePolicy) + self.tool_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_x.setObjectName("tool_offset_x") + self.x_axis_dro_layout.addWidget(self.tool_offset_x) + self.verticalLayout.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.y_axis_dro_layout.setSpacing(12) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button_offset = MDIButton(offset_dros_xyzab) + self.zero_y_button_offset.setEnabled(False) + self.zero_y_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_y_button_offset.setObjectName("zero_y_button_offset") + self.y_axis_dro_layout.addWidget(self.zero_y_button_offset) + self.axis_label_y = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_y.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_y.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_y.setObjectName("axis_label_y") + self.y_axis_dro_layout.addWidget(self.axis_label_y) + self.dro_entry_offset_y = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_y.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_y.setSizePolicy(sizePolicy) + self.dro_entry_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_y.setFont(font) + self.dro_entry_offset_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_y.setProperty("axisNumber", 1) + self.dro_entry_offset_y.setObjectName("dro_entry_offset_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_offset_y) + self.drolabel_work_y = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_y.sizePolicy().hasHeightForWidth()) + self.drolabel_work_y.setSizePolicy(sizePolicy) + self.drolabel_work_y.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_y.setProperty("referenceType", 0) + self.drolabel_work_y.setProperty("axisNumber", 1) + self.drolabel_work_y.setProperty("latheMode", 0) + self.drolabel_work_y.setObjectName("drolabel_work_y") + self.y_axis_dro_layout.addWidget(self.drolabel_work_y) + self.work_offset_y = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_y.sizePolicy().hasHeightForWidth()) + self.work_offset_y.setSizePolicy(sizePolicy) + self.work_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_y.setObjectName("work_offset_y") + self.y_axis_dro_layout.addWidget(self.work_offset_y) + self.g52_g92_y = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_y.sizePolicy().hasHeightForWidth()) + self.g52_g92_y.setSizePolicy(sizePolicy) + self.g52_g92_y.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_y.setObjectName("g52_g92_y") + self.y_axis_dro_layout.addWidget(self.g52_g92_y) + self.tool_offset_y = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_y.sizePolicy().hasHeightForWidth()) + self.tool_offset_y.setSizePolicy(sizePolicy) + self.tool_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_y.setObjectName("tool_offset_y") + self.y_axis_dro_layout.addWidget(self.tool_offset_y) + self.verticalLayout.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.z_axis_dro_layout.setSpacing(12) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button_offset = MDIButton(offset_dros_xyzab) + self.zero_z_button_offset.setEnabled(False) + self.zero_z_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_z_button_offset.setObjectName("zero_z_button_offset") + self.z_axis_dro_layout.addWidget(self.zero_z_button_offset) + self.axis_label_z = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_z.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_z.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_z.setObjectName("axis_label_z") + self.z_axis_dro_layout.addWidget(self.axis_label_z) + self.dro_entry_offset_z = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_z.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_z.setSizePolicy(sizePolicy) + self.dro_entry_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_z.setFont(font) + self.dro_entry_offset_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_z.setProperty("axisNumber", 2) + self.dro_entry_offset_z.setObjectName("dro_entry_offset_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_offset_z) + self.drolabel_work_z = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_z.sizePolicy().hasHeightForWidth()) + self.drolabel_work_z.setSizePolicy(sizePolicy) + self.drolabel_work_z.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_z.setProperty("referenceType", 0) + self.drolabel_work_z.setProperty("axisNumber", 2) + self.drolabel_work_z.setProperty("latheMode", 0) + self.drolabel_work_z.setObjectName("drolabel_work_z") + self.z_axis_dro_layout.addWidget(self.drolabel_work_z) + self.work_offset_z = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_z.sizePolicy().hasHeightForWidth()) + self.work_offset_z.setSizePolicy(sizePolicy) + self.work_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_z.setObjectName("work_offset_z") + self.z_axis_dro_layout.addWidget(self.work_offset_z) + self.g52_g92_z = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_z.sizePolicy().hasHeightForWidth()) + self.g52_g92_z.setSizePolicy(sizePolicy) + self.g52_g92_z.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_z.setObjectName("g52_g92_z") + self.z_axis_dro_layout.addWidget(self.g52_g92_z) + self.tool_offset_z = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_z.sizePolicy().hasHeightForWidth()) + self.tool_offset_z.setSizePolicy(sizePolicy) + self.tool_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_z.setObjectName("tool_offset_z") + self.z_axis_dro_layout.addWidget(self.tool_offset_z) + self.verticalLayout.addLayout(self.z_axis_dro_layout) + self.a_axis_dro_layout = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.a_axis_dro_layout.setSpacing(12) + self.a_axis_dro_layout.setObjectName("a_axis_dro_layout") + self.zero_a_button_offset = MDIButton(offset_dros_xyzab) + self.zero_a_button_offset.setEnabled(False) + self.zero_a_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_a_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_a_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_a_button_offset.setObjectName("zero_a_button_offset") + self.a_axis_dro_layout.addWidget(self.zero_a_button_offset) + self.axis_label_a = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_a.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_a.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_a.setObjectName("axis_label_a") + self.a_axis_dro_layout.addWidget(self.axis_label_a) + self.dro_entry_offset_a = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_a.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_a.setSizePolicy(sizePolicy) + self.dro_entry_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_a.setFont(font) + self.dro_entry_offset_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_a.setProperty("axisNumber", 3) + self.dro_entry_offset_a.setObjectName("dro_entry_offset_a") + self.a_axis_dro_layout.addWidget(self.dro_entry_offset_a) + self.drolabel_work_a = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_a.sizePolicy().hasHeightForWidth()) + self.drolabel_work_a.setSizePolicy(sizePolicy) + self.drolabel_work_a.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_a.setProperty("referenceType", 0) + self.drolabel_work_a.setProperty("axisNumber", 3) + self.drolabel_work_a.setProperty("latheMode", 0) + self.drolabel_work_a.setObjectName("drolabel_work_a") + self.a_axis_dro_layout.addWidget(self.drolabel_work_a) + self.work_offset_a = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_a.sizePolicy().hasHeightForWidth()) + self.work_offset_a.setSizePolicy(sizePolicy) + self.work_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_a.setObjectName("work_offset_a") + self.a_axis_dro_layout.addWidget(self.work_offset_a) + self.g52_g92_a = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_a.sizePolicy().hasHeightForWidth()) + self.g52_g92_a.setSizePolicy(sizePolicy) + self.g52_g92_a.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_a.setObjectName("g52_g92_a") + self.a_axis_dro_layout.addWidget(self.g52_g92_a) + self.tool_offset_a = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_a.sizePolicy().hasHeightForWidth()) + self.tool_offset_a.setSizePolicy(sizePolicy) + self.tool_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_a.setObjectName("tool_offset_a") + self.a_axis_dro_layout.addWidget(self.tool_offset_a) + self.verticalLayout.addLayout(self.a_axis_dro_layout) + self.b_axis_dro_layout = QtWidgets.QHBoxLayout() + self.b_axis_dro_layout.setContentsMargins(-1, 6, -1, 6) + self.b_axis_dro_layout.setSpacing(12) + self.b_axis_dro_layout.setObjectName("b_axis_dro_layout") + self.zero_b_button_offset = MDIButton(offset_dros_xyzab) + self.zero_b_button_offset.setEnabled(False) + self.zero_b_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_b_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_b_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_b_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_b_button_offset.setObjectName("zero_b_button_offset") + self.b_axis_dro_layout.addWidget(self.zero_b_button_offset) + self.axis_label_b = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_b.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_b.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_b.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_b.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_b.setObjectName("axis_label_b") + self.b_axis_dro_layout.addWidget(self.axis_label_b) + self.dro_entry_offset_b = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_b.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_b.setSizePolicy(sizePolicy) + self.dro_entry_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_b.setFont(font) + self.dro_entry_offset_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_b.setProperty("axisNumber", 4) + self.dro_entry_offset_b.setObjectName("dro_entry_offset_b") + self.b_axis_dro_layout.addWidget(self.dro_entry_offset_b) + self.drolabel_work_b = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_b.sizePolicy().hasHeightForWidth()) + self.drolabel_work_b.setSizePolicy(sizePolicy) + self.drolabel_work_b.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_b.setProperty("referenceType", 0) + self.drolabel_work_b.setProperty("axisNumber", 4) + self.drolabel_work_b.setProperty("latheMode", 0) + self.drolabel_work_b.setObjectName("drolabel_work_b") + self.b_axis_dro_layout.addWidget(self.drolabel_work_b) + self.work_offset_b = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_b.sizePolicy().hasHeightForWidth()) + self.work_offset_b.setSizePolicy(sizePolicy) + self.work_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_b.setObjectName("work_offset_b") + self.b_axis_dro_layout.addWidget(self.work_offset_b) + self.g52_g92_b = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_b.sizePolicy().hasHeightForWidth()) + self.g52_g92_b.setSizePolicy(sizePolicy) + self.g52_g92_b.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_b.setObjectName("g52_g92_b") + self.b_axis_dro_layout.addWidget(self.g52_g92_b) + self.tool_offset_b = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_b.sizePolicy().hasHeightForWidth()) + self.tool_offset_b.setSizePolicy(sizePolicy) + self.tool_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_b.setObjectName("tool_offset_b") + self.b_axis_dro_layout.addWidget(self.tool_offset_b) + self.verticalLayout.addLayout(self.b_axis_dro_layout) + self.c_axis_dro_layout = QtWidgets.QHBoxLayout() + self.c_axis_dro_layout.setContentsMargins(-1, 6, -1, 6) + self.c_axis_dro_layout.setSpacing(12) + self.c_axis_dro_layout.setObjectName("c_axis_dro_layout") + self.zero_c_button = MDIButton(offset_dros_xyzab) + self.zero_c_button.setEnabled(False) + self.zero_c_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_c_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_c_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_c_button.setObjectName("zero_c_button") + self.c_axis_dro_layout.addWidget(self.zero_c_button) + self.axis_label_c = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_c.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_c.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_c.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_c.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_c.setObjectName("axis_label_c") + self.c_axis_dro_layout.addWidget(self.axis_label_c) + self.dro_entry_offset_c = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_c.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_c.setSizePolicy(sizePolicy) + self.dro_entry_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_c.setFont(font) + self.dro_entry_offset_c.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_c.setProperty("referenceType", 1) + self.dro_entry_offset_c.setProperty("axisNumber", 4) + self.dro_entry_offset_c.setProperty("latheMode", 0) + self.dro_entry_offset_c.setObjectName("dro_entry_offset_c") + self.c_axis_dro_layout.addWidget(self.dro_entry_offset_c) + self.drolabel_work_c = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_c.sizePolicy().hasHeightForWidth()) + self.drolabel_work_c.setSizePolicy(sizePolicy) + self.drolabel_work_c.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_c.setProperty("referenceType", 0) + self.drolabel_work_c.setProperty("axisNumber", 4) + self.drolabel_work_c.setProperty("latheMode", 0) + self.drolabel_work_c.setObjectName("drolabel_work_c") + self.c_axis_dro_layout.addWidget(self.drolabel_work_c) + self.work_offset_c = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_c.sizePolicy().hasHeightForWidth()) + self.work_offset_c.setSizePolicy(sizePolicy) + self.work_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_c.setObjectName("work_offset_c") + self.c_axis_dro_layout.addWidget(self.work_offset_c) + self.g52_g92_c = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_c.sizePolicy().hasHeightForWidth()) + self.g52_g92_c.setSizePolicy(sizePolicy) + self.g52_g92_c.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_c.setObjectName("g52_g92_c") + self.c_axis_dro_layout.addWidget(self.g52_g92_c) + self.tool_offset_c = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_c.sizePolicy().hasHeightForWidth()) + self.tool_offset_c.setSizePolicy(sizePolicy) + self.tool_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_c.setObjectName("tool_offset_c") + self.c_axis_dro_layout.addWidget(self.tool_offset_c) + self.verticalLayout.addLayout(self.c_axis_dro_layout) + + self.retranslateUi(offset_dros_xyzab) + QtCore.QMetaObject.connectSlotsByName(offset_dros_xyzab) + + def retranslateUi(self, offset_dros_xyzab): + _translate = QtCore.QCoreApplication.translate + offset_dros_xyzab.setWindowTitle(_translate("offset_dros_xyzab", "offset_dros_xyzab")) + self.zero_x_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_x_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} X0.0")) + self.axis_label_x.setText(_translate("offset_dros_xyzab", "X")) + self.drolabel_work_x.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_x.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_x.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_x.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.g52_g92_x.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.tool_offset_x.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.zero_y_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_y_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} Y0.0")) + self.axis_label_y.setText(_translate("offset_dros_xyzab", "Y")) + self.drolabel_work_y.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_y.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_y.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_y.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.g52_g92_y.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.tool_offset_y.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.zero_z_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_z_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} Z0.0")) + self.axis_label_z.setText(_translate("offset_dros_xyzab", "Z")) + self.drolabel_work_z.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_z.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_z.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_z.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.g52_g92_z.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.tool_offset_z.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"url\": \"status:tool_offset\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"tool offset\"}]")) + self.zero_a_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_a_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} A0.0")) + self.axis_label_a.setText(_translate("offset_dros_xyzab", "A")) + self.drolabel_work_a.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_a.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_a.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_a.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.g52_g92_a.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.tool_offset_a.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.zero_b_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_b_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_b_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} B0.0")) + self.axis_label_b.setText(_translate("offset_dros_xyzab", "B")) + self.drolabel_work_b.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_b.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_b.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_b.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.g52_g92_b.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.tool_offset_b.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.zero_c_button.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_c_button.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_c_button.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} C0.0")) + self.axis_label_c.setText(_translate("offset_dros_xyzab", "C")) + self.dro_entry_offset_c.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.dro_entry_offset_c.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.dro_entry_offset_c.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.drolabel_work_c.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_c.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_c.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_c.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.g52_g92_c.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.tool_offset_c.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyz_dros/dros_xyz.py b/user_dro_display/xyz_dros/dros_xyz.py new file mode 100644 index 0000000..1a29dfb --- /dev/null +++ b/user_dro_display/xyz_dros/dros_xyz.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserDRO(QWidget): + def __init__(self, parent=None): + super(UserDRO, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_dro_display/xyz_dros/dros_xyz.ui b/user_dro_display/xyz_dros/dros_xyz.ui new file mode 100644 index 0000000..18056bd --- /dev/null +++ b/user_dro_display/xyz_dros/dros_xyz.ui @@ -0,0 +1,1353 @@ + + + dros_xyz + + + + 0 + 0 + 469 + 286 + + + + + 0 + 0 + + + + dros_xyz + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 19 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 8 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + .QFrame{ + border-style: solid; + border-color: rgb(176, 179,172); + border-width: 1px; + border-radius: 4px; + background-color: rgb(90, 90, 90); + padding: -5px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 15 + + + 20 + + + + + + 0 + 0 + + + + + 60 + 17 + + + + + 60 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 1px; + padding-right: 20px; +} + + + AXIS + + + Qt::AlignCenter + + + [] + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + Qt::AlignCenter + + + [{"channels": [{"url": "status:g5x_index?text", "trigger": true}], "property": "Text", "expression": "ch[0] + ' WORK'\n", "name": "WCS Header"}] + + + + + + + false + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + MACHINE + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + DTG + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 40 + 17 + + + + + 40 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + REF + + + Qt::AlignCenter + + + [] + + + + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + X + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + 0.000 + + + 10 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF X + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}]}] + + + machine.home.axis:x + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Y + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Y + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}]}] + + + machine.home.axis:y + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Z + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Z + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}]}] + + + machine.home.axis:z + + + + + + + + + 20 + + + 3 + + + 1 + + + 3 + + + 1 + + + + + false + + + + 1 + 0 + + + + + 60 + 40 + + + + + 16777215 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO ALL + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 + + + + + + + + 1 + 0 + + + + + 62 + 40 + + + + + 16777215 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF ALL + + + [{"channels": [{"url": "status:all_axes_homed", "trigger": true}], "property": "Text", "expression": "'HOMED' if ch[0] else 'REF ALL'", "name": "reference_all"}, {"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}]}] + + + machine.home.all + + + + + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyz_dros/dros_xyz_ui.py b/user_dro_display/xyz_dros/dros_xyz_ui.py new file mode 100644 index 0000000..127b24e --- /dev/null +++ b/user_dro_display/xyz_dros/dros_xyz_ui.py @@ -0,0 +1,654 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyz_dros/dros_xyz.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dros_xyz(object): + def setupUi(self, dros_xyz): + dros_xyz.setObjectName("dros_xyz") + dros_xyz.resize(469, 286) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(dros_xyz.sizePolicy().hasHeightForWidth()) + dros_xyz.setSizePolicy(sizePolicy) + dros_xyz.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(dros_xyz) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName("verticalLayout") + self.widget_xyz = QtWidgets.QWidget(dros_xyz) + self.widget_xyz.setObjectName("widget_xyz") + self.verticalLayout_55 = QtWidgets.QVBoxLayout(self.widget_xyz) + self.verticalLayout_55.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_55.setSpacing(19) + self.verticalLayout_55.setObjectName("verticalLayout_55") + self.horizontalLayout_81 = QtWidgets.QHBoxLayout() + self.horizontalLayout_81.setContentsMargins(1, 1, 1, 1) + self.horizontalLayout_81.setSpacing(8) + self.horizontalLayout_81.setObjectName("horizontalLayout_81") + self.frame = QtWidgets.QFrame(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy) + self.frame.setMinimumSize(QtCore.QSize(0, 40)) + self.frame.setMaximumSize(QtCore.QSize(16777215, 40)) + self.frame.setStyleSheet(".QFrame{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179,172);\n" +" border-width: 1px;\n" +" border-radius: 4px;\n" +" background-color: rgb(90, 90, 90);\n" +" padding: -5px;\n" +"}") + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.horizontalLayout_136 = QtWidgets.QHBoxLayout(self.frame) + self.horizontalLayout_136.setContentsMargins(15, -1, 20, -1) + self.horizontalLayout_136.setSpacing(8) + self.horizontalLayout_136.setObjectName("horizontalLayout_136") + self.axis_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_column_header.sizePolicy().hasHeightForWidth()) + self.axis_column_header.setSizePolicy(sizePolicy) + self.axis_column_header.setMinimumSize(QtCore.QSize(60, 17)) + self.axis_column_header.setMaximumSize(QtCore.QSize(60, 17)) + self.axis_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 1px;\n" +" padding-right: 20px;\n" +"}") + self.axis_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.axis_column_header.setObjectName("axis_column_header") + self.horizontalLayout_136.addWidget(self.axis_column_header) + self.work_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header.sizePolicy().hasHeightForWidth()) + self.work_column_header.setSizePolicy(sizePolicy) + self.work_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.work_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.work_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.work_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header.setObjectName("work_column_header") + self.horizontalLayout_136.addWidget(self.work_column_header) + self.machine_column_header = QtWidgets.QLabel(self.frame) + self.machine_column_header.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.machine_column_header.sizePolicy().hasHeightForWidth()) + self.machine_column_header.setSizePolicy(sizePolicy) + self.machine_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.machine_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.machine_column_header.setObjectName("machine_column_header") + self.horizontalLayout_136.addWidget(self.machine_column_header) + self.dtg_column_header = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dtg_column_header.sizePolicy().hasHeightForWidth()) + self.dtg_column_header.setSizePolicy(sizePolicy) + self.dtg_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.dtg_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.dtg_column_header.setObjectName("dtg_column_header") + self.horizontalLayout_136.addWidget(self.dtg_column_header) + self.ref_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_column_header.sizePolicy().hasHeightForWidth()) + self.ref_column_header.setSizePolicy(sizePolicy) + self.ref_column_header.setMinimumSize(QtCore.QSize(40, 17)) + self.ref_column_header.setMaximumSize(QtCore.QSize(40, 17)) + self.ref_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.ref_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.ref_column_header.setObjectName("ref_column_header") + self.horizontalLayout_136.addWidget(self.ref_column_header) + self.horizontalLayout_81.addWidget(self.frame) + self.verticalLayout_55.addLayout(self.horizontalLayout_81) + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.x_axis_dro_layout.setSpacing(7) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(self.widget_xyz) + self.zero_x_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_x_button.sizePolicy().hasHeightForWidth()) + self.zero_x_button.setSizePolicy(sizePolicy) + self.zero_x_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/zero.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zero_x_button.setIcon(icon) + self.zero_x_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.drowidget_x = DROLineEdit(self.widget_xyz) + self.drowidget_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_x.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_x.setFont(font) + self.drowidget_x.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_x.setCursorPosition(10) + self.drowidget_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_x.setProperty("referenceType", 1) + self.drowidget_x.setProperty("axisNumber", 0) + self.drowidget_x.setProperty("latheMode", 0) + self.drowidget_x.setObjectName("drowidget_x") + self.x_axis_dro_layout.addWidget(self.drowidget_x) + self.drolabel_machine_x = DROLabel(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_x.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_x.setSizePolicy(sizePolicy) + self.drolabel_machine_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_x.setProperty("referenceType", 0) + self.drolabel_machine_x.setProperty("axisNumber", 0) + self.drolabel_machine_x.setProperty("latheMode", 0) + self.drolabel_machine_x.setObjectName("drolabel_machine_x") + self.x_axis_dro_layout.addWidget(self.drolabel_machine_x) + self.drolabel_dtg_x = DROLabel(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_x.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_x.setSizePolicy(sizePolicy) + self.drolabel_dtg_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_x.setProperty("referenceType", 2) + self.drolabel_dtg_x.setProperty("axisNumber", 0) + self.drolabel_dtg_x.setProperty("latheMode", 0) + self.drolabel_dtg_x.setObjectName("drolabel_dtg_x") + self.x_axis_dro_layout.addWidget(self.drolabel_dtg_x) + self.ref_x_button = ActionButton(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_x_button.sizePolicy().hasHeightForWidth()) + self.ref_x_button.setSizePolicy(sizePolicy) + self.ref_x_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_x_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_x_button.setObjectName("ref_x_button") + self.x_axis_dro_layout.addWidget(self.ref_x_button) + self.verticalLayout_55.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.y_axis_dro_layout.setSpacing(7) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(self.widget_xyz) + self.zero_y_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_y_button.sizePolicy().hasHeightForWidth()) + self.zero_y_button.setSizePolicy(sizePolicy) + self.zero_y_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setIcon(icon) + self.zero_y_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.drowidget_y = DROLineEdit(self.widget_xyz) + self.drowidget_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_y.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_y.setFont(font) + self.drowidget_y.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_y.setProperty("axisNumber", 1) + self.drowidget_y.setObjectName("drowidget_y") + self.y_axis_dro_layout.addWidget(self.drowidget_y) + self.drolabel_machine_y = DROLabel(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_y.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_y.setSizePolicy(sizePolicy) + self.drolabel_machine_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_y.setProperty("referenceType", 0) + self.drolabel_machine_y.setProperty("axisNumber", 1) + self.drolabel_machine_y.setProperty("latheMode", 0) + self.drolabel_machine_y.setObjectName("drolabel_machine_y") + self.y_axis_dro_layout.addWidget(self.drolabel_machine_y) + self.drolabel_dtg_y = DROLabel(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_y.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_y.setSizePolicy(sizePolicy) + self.drolabel_dtg_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_y.setProperty("referenceType", 2) + self.drolabel_dtg_y.setProperty("axisNumber", 1) + self.drolabel_dtg_y.setProperty("latheMode", 0) + self.drolabel_dtg_y.setObjectName("drolabel_dtg_y") + self.y_axis_dro_layout.addWidget(self.drolabel_dtg_y) + self.ref_y_button = ActionButton(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_y_button.sizePolicy().hasHeightForWidth()) + self.ref_y_button.setSizePolicy(sizePolicy) + self.ref_y_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_y_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_y_button.setObjectName("ref_y_button") + self.y_axis_dro_layout.addWidget(self.ref_y_button) + self.verticalLayout_55.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.z_axis_dro_layout.setSpacing(7) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(self.widget_xyz) + self.zero_z_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_z_button.sizePolicy().hasHeightForWidth()) + self.zero_z_button.setSizePolicy(sizePolicy) + self.zero_z_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setIcon(icon) + self.zero_z_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.drowidget_z = DROLineEdit(self.widget_xyz) + self.drowidget_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_z.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_z.setFont(font) + self.drowidget_z.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_z.setProperty("axisNumber", 2) + self.drowidget_z.setObjectName("drowidget_z") + self.z_axis_dro_layout.addWidget(self.drowidget_z) + self.drolabel_machine_z = DROLabel(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_z.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_z.setSizePolicy(sizePolicy) + self.drolabel_machine_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_z.setProperty("referenceType", 0) + self.drolabel_machine_z.setProperty("axisNumber", 2) + self.drolabel_machine_z.setProperty("latheMode", 0) + self.drolabel_machine_z.setObjectName("drolabel_machine_z") + self.z_axis_dro_layout.addWidget(self.drolabel_machine_z) + self.drolabel_dtg_z = DROLabel(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_z.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_z.setSizePolicy(sizePolicy) + self.drolabel_dtg_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_z.setProperty("referenceType", 2) + self.drolabel_dtg_z.setProperty("axisNumber", 2) + self.drolabel_dtg_z.setProperty("latheMode", 0) + self.drolabel_dtg_z.setObjectName("drolabel_dtg_z") + self.z_axis_dro_layout.addWidget(self.drolabel_dtg_z) + self.ref_z_button = ActionButton(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_z_button.sizePolicy().hasHeightForWidth()) + self.ref_z_button.setSizePolicy(sizePolicy) + self.ref_z_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_z_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_z_button.setObjectName("ref_z_button") + self.z_axis_dro_layout.addWidget(self.ref_z_button) + self.verticalLayout_55.addLayout(self.z_axis_dro_layout) + self.layout = QtWidgets.QHBoxLayout() + self.layout.setContentsMargins(3, 1, 3, 1) + self.layout.setSpacing(20) + self.layout.setObjectName("layout") + self.zero_all_button = MDIButton(self.widget_xyz) + self.zero_all_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_all_button.sizePolicy().hasHeightForWidth()) + self.zero_all_button.setSizePolicy(sizePolicy) + self.zero_all_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setMaximumSize(QtCore.QSize(16777215, 40)) + self.zero_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_all_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_all_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_all_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_all_button.setObjectName("zero_all_button") + self.layout.addWidget(self.zero_all_button) + self.ref_all_button = ActionButton(self.widget_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_all_button.sizePolicy().hasHeightForWidth()) + self.ref_all_button.setSizePolicy(sizePolicy) + self.ref_all_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setMaximumSize(QtCore.QSize(16777215, 40)) + self.ref_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_all_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_all_button.setObjectName("ref_all_button") + self.layout.addWidget(self.ref_all_button) + self.verticalLayout_55.addLayout(self.layout) + self.verticalLayout.addWidget(self.widget_xyz) + + self.retranslateUi(dros_xyz) + QtCore.QMetaObject.connectSlotsByName(dros_xyz) + + def retranslateUi(self, dros_xyz): + _translate = QtCore.QCoreApplication.translate + dros_xyz.setWindowTitle(_translate("dros_xyz", "dros_xyz")) + self.axis_column_header.setText(_translate("dros_xyz", "AXIS")) + self.axis_column_header.setProperty("rules", _translate("dros_xyz", "[]")) + self.work_column_header.setProperty("rules", _translate("dros_xyz", "[{\"channels\": [{\"url\": \"status:g5x_index?text\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"ch[0] + \' WORK\'\\n\", \"name\": \"WCS Header\"}]")) + self.machine_column_header.setText(_translate("dros_xyz", "MACHINE")) + self.dtg_column_header.setText(_translate("dros_xyz", "DTG")) + self.ref_column_header.setText(_translate("dros_xyz", "REF")) + self.ref_column_header.setProperty("rules", _translate("dros_xyz", "[]")) + self.zero_x_button.setText(_translate("dros_xyz", "X")) + self.zero_x_button.setProperty("rules", _translate("dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("dros_xyz", "G10 L20 P{ch[0]} X0.0")) + self.drowidget_x.setText(_translate("dros_xyz", " 0.000")) + self.drowidget_x.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drowidget_x.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drowidget_x.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.drolabel_machine_x.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drolabel_machine_x.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drolabel_machine_x.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.drolabel_dtg_x.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drolabel_dtg_x.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drolabel_dtg_x.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.ref_x_button.setText(_translate("dros_xyz", "REF X")) + self.ref_x_button.setProperty("rules", _translate("dros_xyz", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}]}]")) + self.ref_x_button.setProperty("actionName", _translate("dros_xyz", "machine.home.axis:x")) + self.zero_y_button.setText(_translate("dros_xyz", "Y")) + self.zero_y_button.setProperty("rules", _translate("dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("dros_xyz", "G10 L20 P{ch[0]} Y0.0")) + self.drolabel_machine_y.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drolabel_machine_y.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drolabel_machine_y.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.drolabel_dtg_y.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drolabel_dtg_y.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drolabel_dtg_y.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.ref_y_button.setText(_translate("dros_xyz", "REF Y")) + self.ref_y_button.setProperty("rules", _translate("dros_xyz", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}]}]")) + self.ref_y_button.setProperty("actionName", _translate("dros_xyz", "machine.home.axis:y")) + self.zero_z_button.setText(_translate("dros_xyz", "Z")) + self.zero_z_button.setProperty("rules", _translate("dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("dros_xyz", "G10 L20 P{ch[0]} Z0.0")) + self.drolabel_machine_z.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drolabel_machine_z.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drolabel_machine_z.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.drolabel_dtg_z.setProperty("inchFormat", _translate("dros_xyz", "%9.4f")) + self.drolabel_dtg_z.setProperty("millimeterFormat", _translate("dros_xyz", "%10.3f")) + self.drolabel_dtg_z.setProperty("degreeFormat", _translate("dros_xyz", "%10.2f")) + self.ref_z_button.setText(_translate("dros_xyz", "REF Z")) + self.ref_z_button.setProperty("rules", _translate("dros_xyz", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}]}]")) + self.ref_z_button.setProperty("actionName", _translate("dros_xyz", "machine.home.axis:z")) + self.zero_all_button.setText(_translate("dros_xyz", "ZERO ALL")) + self.zero_all_button.setProperty("rules", _translate("dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_all_button.setProperty("MDICommand", _translate("dros_xyz", "G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0")) + self.ref_all_button.setText(_translate("dros_xyz", "REF ALL")) + self.ref_all_button.setProperty("rules", _translate("dros_xyz", "[{\"channels\": [{\"url\": \"status:all_axes_homed\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\'HOMED\' if ch[0] else \'REF ALL\'\", \"name\": \"reference_all\"}, {\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}]}]")) + self.ref_all_button.setProperty("actionName", _translate("dros_xyz", "machine.home.all")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyz_dros/offset_dros_xyz.ui b/user_dro_display/xyz_dros/offset_dros_xyz.ui new file mode 100644 index 0000000..cbe0712 --- /dev/null +++ b/user_dro_display/xyz_dros/offset_dros_xyz.ui @@ -0,0 +1,1026 @@ + + + offset_dros_xyz + + + + 0 + 0 + 493 + 150 + + + + + 0 + 0 + + + + offset_dros_xyz + + + Qt::LeftToRight + + + + + + 12 + + + 1 + + + 1 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 0 + 0 + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + X + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + + 12 + + + 1 + + + 1 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Y + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + + 12 + + + 1 + + + 1 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Z + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"url": "status:tool_offset", "trigger": true}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "tool offset"}] + + + + + + + + + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyz_dros/offset_dros_xyz_ui.py b/user_dro_display/xyz_dros/offset_dros_xyz_ui.py new file mode 100644 index 0000000..6beaf83 --- /dev/null +++ b/user_dro_display/xyz_dros/offset_dros_xyz_ui.py @@ -0,0 +1,560 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyz_dros/offset_dros_xyz.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_offset_dros_xyz(object): + def setupUi(self, offset_dros_xyz): + offset_dros_xyz.setObjectName("offset_dros_xyz") + offset_dros_xyz.resize(493, 150) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(offset_dros_xyz.sizePolicy().hasHeightForWidth()) + offset_dros_xyz.setSizePolicy(sizePolicy) + offset_dros_xyz.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(offset_dros_xyz) + self.verticalLayout.setObjectName("verticalLayout") + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(-1, 1, -1, 1) + self.x_axis_dro_layout.setSpacing(12) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button_offset = MDIButton(offset_dros_xyz) + self.zero_x_button_offset.setEnabled(False) + self.zero_x_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_x_button_offset.setObjectName("zero_x_button_offset") + self.x_axis_dro_layout.addWidget(self.zero_x_button_offset) + self.axis_label_x = QtWidgets.QLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_label_x.sizePolicy().hasHeightForWidth()) + self.axis_label_x.setSizePolicy(sizePolicy) + self.axis_label_x.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_x.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_x.setObjectName("axis_label_x") + self.x_axis_dro_layout.addWidget(self.axis_label_x) + self.dro_entry_offset_x = DROLineEdit(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_x.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_x.setSizePolicy(sizePolicy) + self.dro_entry_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_x.setFont(font) + self.dro_entry_offset_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_x.setObjectName("dro_entry_offset_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_offset_x) + self.drolabel_work_x = DROLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_x.sizePolicy().hasHeightForWidth()) + self.drolabel_work_x.setSizePolicy(sizePolicy) + self.drolabel_work_x.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_x.setProperty("referenceType", 0) + self.drolabel_work_x.setProperty("axisNumber", 0) + self.drolabel_work_x.setProperty("latheMode", 0) + self.drolabel_work_x.setObjectName("drolabel_work_x") + self.x_axis_dro_layout.addWidget(self.drolabel_work_x) + self.work_offset_x = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_x.sizePolicy().hasHeightForWidth()) + self.work_offset_x.setSizePolicy(sizePolicy) + self.work_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_x.setObjectName("work_offset_x") + self.x_axis_dro_layout.addWidget(self.work_offset_x) + self.g52_g92_x = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_x.sizePolicy().hasHeightForWidth()) + self.g52_g92_x.setSizePolicy(sizePolicy) + self.g52_g92_x.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_x.setObjectName("g52_g92_x") + self.x_axis_dro_layout.addWidget(self.g52_g92_x) + self.tool_offset_x = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_x.sizePolicy().hasHeightForWidth()) + self.tool_offset_x.setSizePolicy(sizePolicy) + self.tool_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_x.setObjectName("tool_offset_x") + self.x_axis_dro_layout.addWidget(self.tool_offset_x) + self.verticalLayout.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(-1, 1, -1, 1) + self.y_axis_dro_layout.setSpacing(12) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button_offset = MDIButton(offset_dros_xyz) + self.zero_y_button_offset.setEnabled(False) + self.zero_y_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_y_button_offset.setObjectName("zero_y_button_offset") + self.y_axis_dro_layout.addWidget(self.zero_y_button_offset) + self.axis_label_y = QtWidgets.QLabel(offset_dros_xyz) + self.axis_label_y.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_y.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_y.setObjectName("axis_label_y") + self.y_axis_dro_layout.addWidget(self.axis_label_y) + self.dro_entry_offset_y = DROLineEdit(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_y.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_y.setSizePolicy(sizePolicy) + self.dro_entry_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_y.setFont(font) + self.dro_entry_offset_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_y.setProperty("axisNumber", 1) + self.dro_entry_offset_y.setObjectName("dro_entry_offset_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_offset_y) + self.drolabel_work_y = DROLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_y.sizePolicy().hasHeightForWidth()) + self.drolabel_work_y.setSizePolicy(sizePolicy) + self.drolabel_work_y.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_y.setProperty("referenceType", 0) + self.drolabel_work_y.setProperty("axisNumber", 1) + self.drolabel_work_y.setProperty("latheMode", 0) + self.drolabel_work_y.setObjectName("drolabel_work_y") + self.y_axis_dro_layout.addWidget(self.drolabel_work_y) + self.work_offset_y = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_y.sizePolicy().hasHeightForWidth()) + self.work_offset_y.setSizePolicy(sizePolicy) + self.work_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_y.setObjectName("work_offset_y") + self.y_axis_dro_layout.addWidget(self.work_offset_y) + self.g52_g92_y = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_y.sizePolicy().hasHeightForWidth()) + self.g52_g92_y.setSizePolicy(sizePolicy) + self.g52_g92_y.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_y.setObjectName("g52_g92_y") + self.y_axis_dro_layout.addWidget(self.g52_g92_y) + self.tool_offset_y = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_y.sizePolicy().hasHeightForWidth()) + self.tool_offset_y.setSizePolicy(sizePolicy) + self.tool_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_y.setObjectName("tool_offset_y") + self.y_axis_dro_layout.addWidget(self.tool_offset_y) + self.verticalLayout.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(-1, 1, -1, 1) + self.z_axis_dro_layout.setSpacing(12) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button_offset = MDIButton(offset_dros_xyz) + self.zero_z_button_offset.setEnabled(False) + self.zero_z_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_z_button_offset.setObjectName("zero_z_button_offset") + self.z_axis_dro_layout.addWidget(self.zero_z_button_offset) + self.axis_label_z = QtWidgets.QLabel(offset_dros_xyz) + self.axis_label_z.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_z.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_z.setObjectName("axis_label_z") + self.z_axis_dro_layout.addWidget(self.axis_label_z) + self.dro_entry_offset_z = DROLineEdit(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_z.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_z.setSizePolicy(sizePolicy) + self.dro_entry_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_z.setFont(font) + self.dro_entry_offset_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_z.setProperty("axisNumber", 2) + self.dro_entry_offset_z.setObjectName("dro_entry_offset_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_offset_z) + self.drolabel_work_z = DROLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_z.sizePolicy().hasHeightForWidth()) + self.drolabel_work_z.setSizePolicy(sizePolicy) + self.drolabel_work_z.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_z.setProperty("referenceType", 0) + self.drolabel_work_z.setProperty("axisNumber", 2) + self.drolabel_work_z.setProperty("latheMode", 0) + self.drolabel_work_z.setObjectName("drolabel_work_z") + self.z_axis_dro_layout.addWidget(self.drolabel_work_z) + self.work_offset_z = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_z.sizePolicy().hasHeightForWidth()) + self.work_offset_z.setSizePolicy(sizePolicy) + self.work_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_z.setObjectName("work_offset_z") + self.z_axis_dro_layout.addWidget(self.work_offset_z) + self.g52_g92_z = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_z.sizePolicy().hasHeightForWidth()) + self.g52_g92_z.setSizePolicy(sizePolicy) + self.g52_g92_z.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_z.setObjectName("g52_g92_z") + self.z_axis_dro_layout.addWidget(self.g52_g92_z) + self.tool_offset_z = StatusLabel(offset_dros_xyz) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_z.sizePolicy().hasHeightForWidth()) + self.tool_offset_z.setSizePolicy(sizePolicy) + self.tool_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_z.setObjectName("tool_offset_z") + self.z_axis_dro_layout.addWidget(self.tool_offset_z) + self.verticalLayout.addLayout(self.z_axis_dro_layout) + + self.retranslateUi(offset_dros_xyz) + QtCore.QMetaObject.connectSlotsByName(offset_dros_xyz) + + def retranslateUi(self, offset_dros_xyz): + _translate = QtCore.QCoreApplication.translate + offset_dros_xyz.setWindowTitle(_translate("offset_dros_xyz", "offset_dros_xyz")) + self.zero_x_button_offset.setText(_translate("offset_dros_xyz", "ZERO")) + self.zero_x_button_offset.setProperty("rules", _translate("offset_dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button_offset.setProperty("MDICommand", _translate("offset_dros_xyz", "G10 L20 P{ch[0]} X0.0")) + self.axis_label_x.setText(_translate("offset_dros_xyz", "X")) + self.drolabel_work_x.setProperty("inchFormat", _translate("offset_dros_xyz", "%9.4f")) + self.drolabel_work_x.setProperty("millimeterFormat", _translate("offset_dros_xyz", "%10.3f")) + self.drolabel_work_x.setProperty("degreeFormat", _translate("offset_dros_xyz", "%10.2f")) + self.work_offset_x.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.g52_g92_x.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.tool_offset_x.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.zero_y_button_offset.setText(_translate("offset_dros_xyz", "ZERO")) + self.zero_y_button_offset.setProperty("rules", _translate("offset_dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button_offset.setProperty("MDICommand", _translate("offset_dros_xyz", "G10 L20 P{ch[0]} Y0.0")) + self.axis_label_y.setText(_translate("offset_dros_xyz", "Y")) + self.drolabel_work_y.setProperty("inchFormat", _translate("offset_dros_xyz", "%9.4f")) + self.drolabel_work_y.setProperty("millimeterFormat", _translate("offset_dros_xyz", "%10.3f")) + self.drolabel_work_y.setProperty("degreeFormat", _translate("offset_dros_xyz", "%10.2f")) + self.work_offset_y.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.g52_g92_y.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.tool_offset_y.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.zero_z_button_offset.setText(_translate("offset_dros_xyz", "ZERO")) + self.zero_z_button_offset.setProperty("rules", _translate("offset_dros_xyz", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button_offset.setProperty("MDICommand", _translate("offset_dros_xyz", "G10 L20 P{ch[0]} Z0.0")) + self.axis_label_z.setText(_translate("offset_dros_xyz", "Z")) + self.drolabel_work_z.setProperty("inchFormat", _translate("offset_dros_xyz", "%9.4f")) + self.drolabel_work_z.setProperty("millimeterFormat", _translate("offset_dros_xyz", "%10.3f")) + self.drolabel_work_z.setProperty("degreeFormat", _translate("offset_dros_xyz", "%10.2f")) + self.work_offset_z.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.g52_g92_z.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.tool_offset_z.setProperty("rules", _translate("offset_dros_xyz", "[{\"channels\": [{\"url\": \"status:tool_offset\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"tool offset\"}]")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyza_dros/dros_xyza.py b/user_dro_display/xyza_dros/dros_xyza.py new file mode 100644 index 0000000..1a29dfb --- /dev/null +++ b/user_dro_display/xyza_dros/dros_xyza.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserDRO(QWidget): + def __init__(self, parent=None): + super(UserDRO, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_dro_display/xyza_dros/dros_xyza.ui b/user_dro_display/xyza_dros/dros_xyza.ui new file mode 100644 index 0000000..a393918 --- /dev/null +++ b/user_dro_display/xyza_dros/dros_xyza.ui @@ -0,0 +1,1639 @@ + + + dros_xyza + + + + 0 + 0 + 469 + 272 + + + + + 0 + 0 + + + + dros_xyza + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 8 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + .QFrame{ + border-style: solid; + border-color: rgb(176, 179,172); + border-width: 1px; + border-radius: 4px; + background-color: rgb(90, 90, 90); + padding: -5px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 15 + + + 20 + + + + + + 0 + 0 + + + + + 60 + 17 + + + + + 60 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 1px; + padding-right: 20px; +} + + + AXIS + + + Qt::AlignCenter + + + [] + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + Qt::AlignCenter + + + [{"channels": [{"url": "status:g5x_index?text", "trigger": true}], "property": "Text", "expression": "ch[0] + ' WORK'\n", "name": "WCS Header"}] + + + + + + + false + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + MACHINE + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + DTG + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 40 + 17 + + + + + 40 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + REF + + + Qt::AlignCenter + + + [] + + + + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + X + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + 0.000 + + + 10 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF X + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}]}] + + + machine.home.axis:x + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Y + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Y + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}]}] + + + machine.home.axis:y + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Z + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Z + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}]}] + + + machine.home.axis:z + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + A + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF A + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}]}] + + + machine.home.axis:a + + + + + + + + + 20 + + + 3 + + + 1 + + + 3 + + + 1 + + + + + false + + + + 1 + 0 + + + + + 60 + 40 + + + + + 16777215 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO ALL + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 + + + + + + + + 1 + 0 + + + + + 62 + 40 + + + + + 16777215 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF ALL + + + [{"channels": [{"url": "status:all_axes_homed", "trigger": true}], "property": "Text", "expression": "'HOMED' if ch[0] else 'REF ALL'", "name": "reference_all"}, {"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}]}] + + + machine.home.all + + + + + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyza_dros/dros_xyza_ui.py b/user_dro_display/xyza_dros/dros_xyza_ui.py new file mode 100644 index 0000000..5378f2f --- /dev/null +++ b/user_dro_display/xyza_dros/dros_xyza_ui.py @@ -0,0 +1,795 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyza_dros/dros_xyza.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dros_xyza(object): + def setupUi(self, dros_xyza): + dros_xyza.setObjectName("dros_xyza") + dros_xyza.resize(469, 272) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(dros_xyza.sizePolicy().hasHeightForWidth()) + dros_xyza.setSizePolicy(sizePolicy) + dros_xyza.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(dros_xyza) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName("verticalLayout") + self.widgets_xyza = QtWidgets.QWidget(dros_xyza) + self.widgets_xyza.setObjectName("widgets_xyza") + self.verticalLayout_56 = QtWidgets.QVBoxLayout(self.widgets_xyza) + self.verticalLayout_56.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_56.setSpacing(4) + self.verticalLayout_56.setObjectName("verticalLayout_56") + self.horizontalLayout_77 = QtWidgets.QHBoxLayout() + self.horizontalLayout_77.setContentsMargins(1, 1, 1, 1) + self.horizontalLayout_77.setSpacing(8) + self.horizontalLayout_77.setObjectName("horizontalLayout_77") + self.frame = QtWidgets.QFrame(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy) + self.frame.setMinimumSize(QtCore.QSize(0, 40)) + self.frame.setMaximumSize(QtCore.QSize(16777215, 40)) + self.frame.setStyleSheet(".QFrame{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179,172);\n" +" border-width: 1px;\n" +" border-radius: 4px;\n" +" background-color: rgb(90, 90, 90);\n" +" padding: -5px;\n" +"}") + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.horizontalLayout_144 = QtWidgets.QHBoxLayout(self.frame) + self.horizontalLayout_144.setContentsMargins(15, -1, 20, -1) + self.horizontalLayout_144.setSpacing(8) + self.horizontalLayout_144.setObjectName("horizontalLayout_144") + self.axis_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_column_header.sizePolicy().hasHeightForWidth()) + self.axis_column_header.setSizePolicy(sizePolicy) + self.axis_column_header.setMinimumSize(QtCore.QSize(60, 17)) + self.axis_column_header.setMaximumSize(QtCore.QSize(60, 17)) + self.axis_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 1px;\n" +" padding-right: 20px;\n" +"}") + self.axis_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.axis_column_header.setObjectName("axis_column_header") + self.horizontalLayout_144.addWidget(self.axis_column_header) + self.work_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header.sizePolicy().hasHeightForWidth()) + self.work_column_header.setSizePolicy(sizePolicy) + self.work_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.work_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.work_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.work_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header.setObjectName("work_column_header") + self.horizontalLayout_144.addWidget(self.work_column_header) + self.machine_column_header = QtWidgets.QLabel(self.frame) + self.machine_column_header.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.machine_column_header.sizePolicy().hasHeightForWidth()) + self.machine_column_header.setSizePolicy(sizePolicy) + self.machine_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.machine_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.machine_column_header.setObjectName("machine_column_header") + self.horizontalLayout_144.addWidget(self.machine_column_header) + self.dtg_column_header = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dtg_column_header.sizePolicy().hasHeightForWidth()) + self.dtg_column_header.setSizePolicy(sizePolicy) + self.dtg_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.dtg_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.dtg_column_header.setObjectName("dtg_column_header") + self.horizontalLayout_144.addWidget(self.dtg_column_header) + self.ref_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_column_header.sizePolicy().hasHeightForWidth()) + self.ref_column_header.setSizePolicy(sizePolicy) + self.ref_column_header.setMinimumSize(QtCore.QSize(40, 17)) + self.ref_column_header.setMaximumSize(QtCore.QSize(40, 17)) + self.ref_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.ref_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.ref_column_header.setObjectName("ref_column_header") + self.horizontalLayout_144.addWidget(self.ref_column_header) + self.horizontalLayout_77.addWidget(self.frame) + self.verticalLayout_56.addLayout(self.horizontalLayout_77) + self.x_axis_dro_layout_3 = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout_3.setContentsMargins(1, 1, 1, 1) + self.x_axis_dro_layout_3.setSpacing(7) + self.x_axis_dro_layout_3.setObjectName("x_axis_dro_layout_3") + self.zero_x_button = MDIButton(self.widgets_xyza) + self.zero_x_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_x_button.sizePolicy().hasHeightForWidth()) + self.zero_x_button.setSizePolicy(sizePolicy) + self.zero_x_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/zero.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zero_x_button.setIcon(icon) + self.zero_x_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout_3.addWidget(self.zero_x_button) + self.drowidget_x = DROLineEdit(self.widgets_xyza) + self.drowidget_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_x.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_x.setFont(font) + self.drowidget_x.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_x.setCursorPosition(10) + self.drowidget_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_x.setProperty("referenceType", 1) + self.drowidget_x.setProperty("axisNumber", 0) + self.drowidget_x.setProperty("latheMode", 0) + self.drowidget_x.setObjectName("drowidget_x") + self.x_axis_dro_layout_3.addWidget(self.drowidget_x) + self.drolabel_machine_x = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_x.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_x.setSizePolicy(sizePolicy) + self.drolabel_machine_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_x.setProperty("referenceType", 0) + self.drolabel_machine_x.setProperty("axisNumber", 0) + self.drolabel_machine_x.setProperty("latheMode", 0) + self.drolabel_machine_x.setObjectName("drolabel_machine_x") + self.x_axis_dro_layout_3.addWidget(self.drolabel_machine_x) + self.drolabel_dtg_x = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_x.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_x.setSizePolicy(sizePolicy) + self.drolabel_dtg_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_x.setProperty("referenceType", 2) + self.drolabel_dtg_x.setProperty("axisNumber", 0) + self.drolabel_dtg_x.setProperty("latheMode", 0) + self.drolabel_dtg_x.setObjectName("drolabel_dtg_x") + self.x_axis_dro_layout_3.addWidget(self.drolabel_dtg_x) + self.ref_x_button = ActionButton(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_x_button.sizePolicy().hasHeightForWidth()) + self.ref_x_button.setSizePolicy(sizePolicy) + self.ref_x_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_x_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_x_button.setObjectName("ref_x_button") + self.x_axis_dro_layout_3.addWidget(self.ref_x_button) + self.verticalLayout_56.addLayout(self.x_axis_dro_layout_3) + self.y_axis_dro_layout_3 = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout_3.setContentsMargins(1, 1, 1, 1) + self.y_axis_dro_layout_3.setSpacing(7) + self.y_axis_dro_layout_3.setObjectName("y_axis_dro_layout_3") + self.zero_y_button = MDIButton(self.widgets_xyza) + self.zero_y_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_y_button.sizePolicy().hasHeightForWidth()) + self.zero_y_button.setSizePolicy(sizePolicy) + self.zero_y_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setIcon(icon) + self.zero_y_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout_3.addWidget(self.zero_y_button) + self.drowidget_y = DROLineEdit(self.widgets_xyza) + self.drowidget_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_y.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_y.setFont(font) + self.drowidget_y.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_y.setProperty("axisNumber", 1) + self.drowidget_y.setObjectName("drowidget_y") + self.y_axis_dro_layout_3.addWidget(self.drowidget_y) + self.drolabel_machine_y = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_y.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_y.setSizePolicy(sizePolicy) + self.drolabel_machine_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_y.setProperty("referenceType", 0) + self.drolabel_machine_y.setProperty("axisNumber", 1) + self.drolabel_machine_y.setProperty("latheMode", 0) + self.drolabel_machine_y.setObjectName("drolabel_machine_y") + self.y_axis_dro_layout_3.addWidget(self.drolabel_machine_y) + self.drolabel_dtg_y = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_y.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_y.setSizePolicy(sizePolicy) + self.drolabel_dtg_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_y.setProperty("referenceType", 2) + self.drolabel_dtg_y.setProperty("axisNumber", 1) + self.drolabel_dtg_y.setProperty("latheMode", 0) + self.drolabel_dtg_y.setObjectName("drolabel_dtg_y") + self.y_axis_dro_layout_3.addWidget(self.drolabel_dtg_y) + self.ref_y_button = ActionButton(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_y_button.sizePolicy().hasHeightForWidth()) + self.ref_y_button.setSizePolicy(sizePolicy) + self.ref_y_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_y_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_y_button.setObjectName("ref_y_button") + self.y_axis_dro_layout_3.addWidget(self.ref_y_button) + self.verticalLayout_56.addLayout(self.y_axis_dro_layout_3) + self.z_axis_dro_layout_3 = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout_3.setContentsMargins(1, 1, 1, 1) + self.z_axis_dro_layout_3.setSpacing(7) + self.z_axis_dro_layout_3.setObjectName("z_axis_dro_layout_3") + self.zero_z_button = MDIButton(self.widgets_xyza) + self.zero_z_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_z_button.sizePolicy().hasHeightForWidth()) + self.zero_z_button.setSizePolicy(sizePolicy) + self.zero_z_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setIcon(icon) + self.zero_z_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout_3.addWidget(self.zero_z_button) + self.drowidget_z = DROLineEdit(self.widgets_xyza) + self.drowidget_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_z.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_z.setFont(font) + self.drowidget_z.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_z.setProperty("axisNumber", 2) + self.drowidget_z.setObjectName("drowidget_z") + self.z_axis_dro_layout_3.addWidget(self.drowidget_z) + self.drolabel_machine_z = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_z.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_z.setSizePolicy(sizePolicy) + self.drolabel_machine_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_z.setProperty("referenceType", 0) + self.drolabel_machine_z.setProperty("axisNumber", 2) + self.drolabel_machine_z.setProperty("latheMode", 0) + self.drolabel_machine_z.setObjectName("drolabel_machine_z") + self.z_axis_dro_layout_3.addWidget(self.drolabel_machine_z) + self.drolabel_dtg_z = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_z.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_z.setSizePolicy(sizePolicy) + self.drolabel_dtg_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_z.setProperty("referenceType", 2) + self.drolabel_dtg_z.setProperty("axisNumber", 2) + self.drolabel_dtg_z.setProperty("latheMode", 0) + self.drolabel_dtg_z.setObjectName("drolabel_dtg_z") + self.z_axis_dro_layout_3.addWidget(self.drolabel_dtg_z) + self.ref_z_button = ActionButton(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_z_button.sizePolicy().hasHeightForWidth()) + self.ref_z_button.setSizePolicy(sizePolicy) + self.ref_z_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_z_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_z_button.setObjectName("ref_z_button") + self.z_axis_dro_layout_3.addWidget(self.ref_z_button) + self.verticalLayout_56.addLayout(self.z_axis_dro_layout_3) + self.a_axis_dro_layout_2 = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout_2.setContentsMargins(1, 1, 1, 1) + self.a_axis_dro_layout_2.setSpacing(7) + self.a_axis_dro_layout_2.setObjectName("a_axis_dro_layout_2") + self.zero_a_button = MDIButton(self.widgets_xyza) + self.zero_a_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_a_button.sizePolicy().hasHeightForWidth()) + self.zero_a_button.setSizePolicy(sizePolicy) + self.zero_a_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_a_button.setIcon(icon) + self.zero_a_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_a_button.setObjectName("zero_a_button") + self.a_axis_dro_layout_2.addWidget(self.zero_a_button) + self.drowidget_a = DROLineEdit(self.widgets_xyza) + self.drowidget_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drowidget_a.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.drowidget_a.setFont(font) + self.drowidget_a.setFocusPolicy(QtCore.Qt.ClickFocus) + self.drowidget_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.drowidget_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drowidget_a.setProperty("axisNumber", 3) + self.drowidget_a.setObjectName("drowidget_a") + self.a_axis_dro_layout_2.addWidget(self.drowidget_a) + self.drolabel_machine_a = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_a.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_a.setSizePolicy(sizePolicy) + self.drolabel_machine_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_a.setProperty("referenceType", 0) + self.drolabel_machine_a.setProperty("axisNumber", 3) + self.drolabel_machine_a.setProperty("latheMode", 0) + self.drolabel_machine_a.setObjectName("drolabel_machine_a") + self.a_axis_dro_layout_2.addWidget(self.drolabel_machine_a) + self.drolabel_dtg_a = DROLabel(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_a.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_a.setSizePolicy(sizePolicy) + self.drolabel_dtg_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_a.setProperty("referenceType", 2) + self.drolabel_dtg_a.setProperty("axisNumber", 3) + self.drolabel_dtg_a.setProperty("latheMode", 0) + self.drolabel_dtg_a.setObjectName("drolabel_dtg_a") + self.a_axis_dro_layout_2.addWidget(self.drolabel_dtg_a) + self.ref_a_button = ActionButton(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_a_button.sizePolicy().hasHeightForWidth()) + self.ref_a_button.setSizePolicy(sizePolicy) + self.ref_a_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_a_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_a_button.setObjectName("ref_a_button") + self.a_axis_dro_layout_2.addWidget(self.ref_a_button) + self.verticalLayout_56.addLayout(self.a_axis_dro_layout_2) + self.horizontalLayout_104 = QtWidgets.QHBoxLayout() + self.horizontalLayout_104.setContentsMargins(3, 1, 3, 1) + self.horizontalLayout_104.setSpacing(20) + self.horizontalLayout_104.setObjectName("horizontalLayout_104") + self.zero_all_button = MDIButton(self.widgets_xyza) + self.zero_all_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_all_button.sizePolicy().hasHeightForWidth()) + self.zero_all_button.setSizePolicy(sizePolicy) + self.zero_all_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setMaximumSize(QtCore.QSize(16777215, 40)) + self.zero_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_all_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_all_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_all_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_all_button.setObjectName("zero_all_button") + self.horizontalLayout_104.addWidget(self.zero_all_button) + self.ref_all_button = ActionButton(self.widgets_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_all_button.sizePolicy().hasHeightForWidth()) + self.ref_all_button.setSizePolicy(sizePolicy) + self.ref_all_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setMaximumSize(QtCore.QSize(16777215, 40)) + self.ref_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_all_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_all_button.setObjectName("ref_all_button") + self.horizontalLayout_104.addWidget(self.ref_all_button) + self.verticalLayout_56.addLayout(self.horizontalLayout_104) + self.verticalLayout.addWidget(self.widgets_xyza) + + self.retranslateUi(dros_xyza) + QtCore.QMetaObject.connectSlotsByName(dros_xyza) + + def retranslateUi(self, dros_xyza): + _translate = QtCore.QCoreApplication.translate + dros_xyza.setWindowTitle(_translate("dros_xyza", "dros_xyza")) + self.axis_column_header.setText(_translate("dros_xyza", "AXIS")) + self.axis_column_header.setProperty("rules", _translate("dros_xyza", "[]")) + self.work_column_header.setProperty("rules", _translate("dros_xyza", "[{\"channels\": [{\"url\": \"status:g5x_index?text\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"ch[0] + \' WORK\'\\n\", \"name\": \"WCS Header\"}]")) + self.machine_column_header.setText(_translate("dros_xyza", "MACHINE")) + self.dtg_column_header.setText(_translate("dros_xyza", "DTG")) + self.ref_column_header.setText(_translate("dros_xyza", "REF")) + self.ref_column_header.setProperty("rules", _translate("dros_xyza", "[]")) + self.zero_x_button.setText(_translate("dros_xyza", "X")) + self.zero_x_button.setProperty("rules", _translate("dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("dros_xyza", "G10 L20 P{ch[0]} X0.0")) + self.drowidget_x.setText(_translate("dros_xyza", " 0.000")) + self.drowidget_x.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drowidget_x.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drowidget_x.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.drolabel_machine_x.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_machine_x.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_machine_x.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.drolabel_dtg_x.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_dtg_x.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_dtg_x.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.ref_x_button.setText(_translate("dros_xyza", "REF X")) + self.ref_x_button.setProperty("rules", _translate("dros_xyza", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}]}]")) + self.ref_x_button.setProperty("actionName", _translate("dros_xyza", "machine.home.axis:x")) + self.zero_y_button.setText(_translate("dros_xyza", "Y")) + self.zero_y_button.setProperty("rules", _translate("dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("dros_xyza", "G10 L20 P{ch[0]} Y0.0")) + self.drolabel_machine_y.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_machine_y.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_machine_y.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.drolabel_dtg_y.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_dtg_y.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_dtg_y.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.ref_y_button.setText(_translate("dros_xyza", "REF Y")) + self.ref_y_button.setProperty("rules", _translate("dros_xyza", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}]}]")) + self.ref_y_button.setProperty("actionName", _translate("dros_xyza", "machine.home.axis:y")) + self.zero_z_button.setText(_translate("dros_xyza", "Z")) + self.zero_z_button.setProperty("rules", _translate("dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("dros_xyza", "G10 L20 P{ch[0]} Z0.0")) + self.drolabel_machine_z.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_machine_z.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_machine_z.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.drolabel_dtg_z.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_dtg_z.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_dtg_z.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.ref_z_button.setText(_translate("dros_xyza", "REF Z")) + self.ref_z_button.setProperty("rules", _translate("dros_xyza", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}]}]")) + self.ref_z_button.setProperty("actionName", _translate("dros_xyza", "machine.home.axis:z")) + self.zero_a_button.setText(_translate("dros_xyza", "A")) + self.zero_a_button.setProperty("rules", _translate("dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button.setProperty("MDICommand", _translate("dros_xyza", "G10 L20 P{ch[0]} A0.0")) + self.drolabel_machine_a.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_machine_a.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_machine_a.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.drolabel_dtg_a.setProperty("inchFormat", _translate("dros_xyza", "%9.4f")) + self.drolabel_dtg_a.setProperty("millimeterFormat", _translate("dros_xyza", "%10.3f")) + self.drolabel_dtg_a.setProperty("degreeFormat", _translate("dros_xyza", "%10.2f")) + self.ref_a_button.setText(_translate("dros_xyza", "REF A")) + self.ref_a_button.setProperty("rules", _translate("dros_xyza", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}]}]")) + self.ref_a_button.setProperty("actionName", _translate("dros_xyza", "machine.home.axis:a")) + self.zero_all_button.setText(_translate("dros_xyza", "ZERO ALL")) + self.zero_all_button.setProperty("rules", _translate("dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_all_button.setProperty("MDICommand", _translate("dros_xyza", "G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0")) + self.ref_all_button.setText(_translate("dros_xyza", "REF ALL")) + self.ref_all_button.setProperty("rules", _translate("dros_xyza", "[{\"channels\": [{\"url\": \"status:all_axes_homed\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\'HOMED\' if ch[0] else \'REF ALL\'\", \"name\": \"reference_all\"}, {\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}]}]")) + self.ref_all_button.setProperty("actionName", _translate("dros_xyza", "machine.home.all")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyza_dros/offset_dros_xyza.ui b/user_dro_display/xyza_dros/offset_dros_xyza.ui new file mode 100644 index 0000000..489497a --- /dev/null +++ b/user_dro_display/xyza_dros/offset_dros_xyza.ui @@ -0,0 +1,1363 @@ + + + offset_dros_xyza + + + + 0 + 0 + 493 + 220 + + + + + 0 + 0 + + + + offset_dros_xyza + + + Qt::LeftToRight + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 0 + 0 + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + X + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Y + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Z + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"url": "status:tool_offset", "trigger": true}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "tool offset"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + A + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyza_dros/offset_dros_xyza_ui.py b/user_dro_display/xyza_dros/offset_dros_xyza_ui.py new file mode 100644 index 0000000..42633f5 --- /dev/null +++ b/user_dro_display/xyza_dros/offset_dros_xyza_ui.py @@ -0,0 +1,734 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyza_dros/offset_dros_xyza.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_offset_dros_xyza(object): + def setupUi(self, offset_dros_xyza): + offset_dros_xyza.setObjectName("offset_dros_xyza") + offset_dros_xyza.resize(493, 220) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(offset_dros_xyza.sizePolicy().hasHeightForWidth()) + offset_dros_xyza.setSizePolicy(sizePolicy) + offset_dros_xyza.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(offset_dros_xyza) + self.verticalLayout.setContentsMargins(9, 9, 9, 9) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.x_axis_dro_layout_6 = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout_6.setContentsMargins(-1, 4, -1, 4) + self.x_axis_dro_layout_6.setSpacing(12) + self.x_axis_dro_layout_6.setObjectName("x_axis_dro_layout_6") + self.zero_x_button_offset = MDIButton(offset_dros_xyza) + self.zero_x_button_offset.setEnabled(False) + self.zero_x_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_x_button_offset.setObjectName("zero_x_button_offset") + self.x_axis_dro_layout_6.addWidget(self.zero_x_button_offset) + self.axis_label_x = QtWidgets.QLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_label_x.sizePolicy().hasHeightForWidth()) + self.axis_label_x.setSizePolicy(sizePolicy) + self.axis_label_x.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_x.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_x.setObjectName("axis_label_x") + self.x_axis_dro_layout_6.addWidget(self.axis_label_x) + self.dro_entry_offset_x = DROLineEdit(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_x.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_x.setSizePolicy(sizePolicy) + self.dro_entry_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_x.setFont(font) + self.dro_entry_offset_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_x.setObjectName("dro_entry_offset_x") + self.x_axis_dro_layout_6.addWidget(self.dro_entry_offset_x) + self.drolabel_work_x = DROLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_x.sizePolicy().hasHeightForWidth()) + self.drolabel_work_x.setSizePolicy(sizePolicy) + self.drolabel_work_x.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_x.setProperty("referenceType", 0) + self.drolabel_work_x.setProperty("axisNumber", 0) + self.drolabel_work_x.setProperty("latheMode", 0) + self.drolabel_work_x.setObjectName("drolabel_work_x") + self.x_axis_dro_layout_6.addWidget(self.drolabel_work_x) + self.work_offset_x = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_x.sizePolicy().hasHeightForWidth()) + self.work_offset_x.setSizePolicy(sizePolicy) + self.work_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_x.setObjectName("work_offset_x") + self.x_axis_dro_layout_6.addWidget(self.work_offset_x) + self.g52_g92_x = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_x.sizePolicy().hasHeightForWidth()) + self.g52_g92_x.setSizePolicy(sizePolicy) + self.g52_g92_x.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_x.setObjectName("g52_g92_x") + self.x_axis_dro_layout_6.addWidget(self.g52_g92_x) + self.tool_offset_x = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_x.sizePolicy().hasHeightForWidth()) + self.tool_offset_x.setSizePolicy(sizePolicy) + self.tool_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_x.setObjectName("tool_offset_x") + self.x_axis_dro_layout_6.addWidget(self.tool_offset_x) + self.verticalLayout.addLayout(self.x_axis_dro_layout_6) + self.y_axis_dro_layout_6 = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout_6.setContentsMargins(-1, 4, -1, 4) + self.y_axis_dro_layout_6.setSpacing(12) + self.y_axis_dro_layout_6.setObjectName("y_axis_dro_layout_6") + self.zero_y_button_offset = MDIButton(offset_dros_xyza) + self.zero_y_button_offset.setEnabled(False) + self.zero_y_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_y_button_offset.setObjectName("zero_y_button_offset") + self.y_axis_dro_layout_6.addWidget(self.zero_y_button_offset) + self.axis_label_y = QtWidgets.QLabel(offset_dros_xyza) + self.axis_label_y.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_y.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_y.setObjectName("axis_label_y") + self.y_axis_dro_layout_6.addWidget(self.axis_label_y) + self.dro_entry_offset_y = DROLineEdit(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_y.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_y.setSizePolicy(sizePolicy) + self.dro_entry_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_y.setFont(font) + self.dro_entry_offset_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_y.setProperty("axisNumber", 1) + self.dro_entry_offset_y.setObjectName("dro_entry_offset_y") + self.y_axis_dro_layout_6.addWidget(self.dro_entry_offset_y) + self.drolabel_work_y = DROLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_y.sizePolicy().hasHeightForWidth()) + self.drolabel_work_y.setSizePolicy(sizePolicy) + self.drolabel_work_y.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_y.setProperty("referenceType", 0) + self.drolabel_work_y.setProperty("axisNumber", 1) + self.drolabel_work_y.setProperty("latheMode", 0) + self.drolabel_work_y.setObjectName("drolabel_work_y") + self.y_axis_dro_layout_6.addWidget(self.drolabel_work_y) + self.work_offset_y = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_y.sizePolicy().hasHeightForWidth()) + self.work_offset_y.setSizePolicy(sizePolicy) + self.work_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_y.setObjectName("work_offset_y") + self.y_axis_dro_layout_6.addWidget(self.work_offset_y) + self.g52_g92_y = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_y.sizePolicy().hasHeightForWidth()) + self.g52_g92_y.setSizePolicy(sizePolicy) + self.g52_g92_y.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_y.setObjectName("g52_g92_y") + self.y_axis_dro_layout_6.addWidget(self.g52_g92_y) + self.tool_offset_y = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_y.sizePolicy().hasHeightForWidth()) + self.tool_offset_y.setSizePolicy(sizePolicy) + self.tool_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_y.setObjectName("tool_offset_y") + self.y_axis_dro_layout_6.addWidget(self.tool_offset_y) + self.verticalLayout.addLayout(self.y_axis_dro_layout_6) + self.z_axis_dro_layout_6 = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout_6.setContentsMargins(-1, 4, -1, 4) + self.z_axis_dro_layout_6.setSpacing(12) + self.z_axis_dro_layout_6.setObjectName("z_axis_dro_layout_6") + self.zero_z_button_offset = MDIButton(offset_dros_xyza) + self.zero_z_button_offset.setEnabled(False) + self.zero_z_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_z_button_offset.setObjectName("zero_z_button_offset") + self.z_axis_dro_layout_6.addWidget(self.zero_z_button_offset) + self.axis_label_z = QtWidgets.QLabel(offset_dros_xyza) + self.axis_label_z.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_z.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_z.setObjectName("axis_label_z") + self.z_axis_dro_layout_6.addWidget(self.axis_label_z) + self.dro_entry_offset_z = DROLineEdit(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_z.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_z.setSizePolicy(sizePolicy) + self.dro_entry_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_z.setFont(font) + self.dro_entry_offset_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_z.setProperty("axisNumber", 2) + self.dro_entry_offset_z.setObjectName("dro_entry_offset_z") + self.z_axis_dro_layout_6.addWidget(self.dro_entry_offset_z) + self.drolabel_work_z = DROLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_z.sizePolicy().hasHeightForWidth()) + self.drolabel_work_z.setSizePolicy(sizePolicy) + self.drolabel_work_z.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_z.setProperty("referenceType", 0) + self.drolabel_work_z.setProperty("axisNumber", 2) + self.drolabel_work_z.setProperty("latheMode", 0) + self.drolabel_work_z.setObjectName("drolabel_work_z") + self.z_axis_dro_layout_6.addWidget(self.drolabel_work_z) + self.work_offset_z = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_z.sizePolicy().hasHeightForWidth()) + self.work_offset_z.setSizePolicy(sizePolicy) + self.work_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_z.setObjectName("work_offset_z") + self.z_axis_dro_layout_6.addWidget(self.work_offset_z) + self.g52_g92_z = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_z.sizePolicy().hasHeightForWidth()) + self.g52_g92_z.setSizePolicy(sizePolicy) + self.g52_g92_z.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_z.setObjectName("g52_g92_z") + self.z_axis_dro_layout_6.addWidget(self.g52_g92_z) + self.tool_offset_z = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_z.sizePolicy().hasHeightForWidth()) + self.tool_offset_z.setSizePolicy(sizePolicy) + self.tool_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_z.setObjectName("tool_offset_z") + self.z_axis_dro_layout_6.addWidget(self.tool_offset_z) + self.verticalLayout.addLayout(self.z_axis_dro_layout_6) + self.a_axis_dro_layout_5 = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout_5.setContentsMargins(-1, 4, -1, 4) + self.a_axis_dro_layout_5.setSpacing(12) + self.a_axis_dro_layout_5.setObjectName("a_axis_dro_layout_5") + self.zero_a_button_offset = MDIButton(offset_dros_xyza) + self.zero_a_button_offset.setEnabled(False) + self.zero_a_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_a_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_a_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_a_button_offset.setObjectName("zero_a_button_offset") + self.a_axis_dro_layout_5.addWidget(self.zero_a_button_offset) + self.axis_label_a = QtWidgets.QLabel(offset_dros_xyza) + self.axis_label_a.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_a.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_a.setObjectName("axis_label_a") + self.a_axis_dro_layout_5.addWidget(self.axis_label_a) + self.dro_entry_offset_a = DROLineEdit(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_a.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_a.setSizePolicy(sizePolicy) + self.dro_entry_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_a.setFont(font) + self.dro_entry_offset_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_a.setProperty("axisNumber", 3) + self.dro_entry_offset_a.setObjectName("dro_entry_offset_a") + self.a_axis_dro_layout_5.addWidget(self.dro_entry_offset_a) + self.drolabel_work_a = DROLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_a.sizePolicy().hasHeightForWidth()) + self.drolabel_work_a.setSizePolicy(sizePolicy) + self.drolabel_work_a.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_a.setProperty("referenceType", 0) + self.drolabel_work_a.setProperty("axisNumber", 3) + self.drolabel_work_a.setProperty("latheMode", 0) + self.drolabel_work_a.setObjectName("drolabel_work_a") + self.a_axis_dro_layout_5.addWidget(self.drolabel_work_a) + self.work_offset_a = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_a.sizePolicy().hasHeightForWidth()) + self.work_offset_a.setSizePolicy(sizePolicy) + self.work_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_a.setObjectName("work_offset_a") + self.a_axis_dro_layout_5.addWidget(self.work_offset_a) + self.g52_g92_a = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_a.sizePolicy().hasHeightForWidth()) + self.g52_g92_a.setSizePolicy(sizePolicy) + self.g52_g92_a.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_a.setObjectName("g52_g92_a") + self.a_axis_dro_layout_5.addWidget(self.g52_g92_a) + self.tool_offset_a = StatusLabel(offset_dros_xyza) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_a.sizePolicy().hasHeightForWidth()) + self.tool_offset_a.setSizePolicy(sizePolicy) + self.tool_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_a.setObjectName("tool_offset_a") + self.a_axis_dro_layout_5.addWidget(self.tool_offset_a) + self.verticalLayout.addLayout(self.a_axis_dro_layout_5) + + self.retranslateUi(offset_dros_xyza) + QtCore.QMetaObject.connectSlotsByName(offset_dros_xyza) + + def retranslateUi(self, offset_dros_xyza): + _translate = QtCore.QCoreApplication.translate + offset_dros_xyza.setWindowTitle(_translate("offset_dros_xyza", "offset_dros_xyza")) + self.zero_x_button_offset.setText(_translate("offset_dros_xyza", "ZERO")) + self.zero_x_button_offset.setProperty("rules", _translate("offset_dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button_offset.setProperty("MDICommand", _translate("offset_dros_xyza", "G10 L20 P{ch[0]} X0.0")) + self.axis_label_x.setText(_translate("offset_dros_xyza", "X")) + self.drolabel_work_x.setProperty("inchFormat", _translate("offset_dros_xyza", "%9.4f")) + self.drolabel_work_x.setProperty("millimeterFormat", _translate("offset_dros_xyza", "%10.3f")) + self.drolabel_work_x.setProperty("degreeFormat", _translate("offset_dros_xyza", "%10.2f")) + self.work_offset_x.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.g52_g92_x.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.tool_offset_x.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.zero_y_button_offset.setText(_translate("offset_dros_xyza", "ZERO")) + self.zero_y_button_offset.setProperty("rules", _translate("offset_dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button_offset.setProperty("MDICommand", _translate("offset_dros_xyza", "G10 L20 P{ch[0]} Y0.0")) + self.axis_label_y.setText(_translate("offset_dros_xyza", "Y")) + self.drolabel_work_y.setProperty("inchFormat", _translate("offset_dros_xyza", "%9.4f")) + self.drolabel_work_y.setProperty("millimeterFormat", _translate("offset_dros_xyza", "%10.3f")) + self.drolabel_work_y.setProperty("degreeFormat", _translate("offset_dros_xyza", "%10.2f")) + self.work_offset_y.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.g52_g92_y.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.tool_offset_y.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.zero_z_button_offset.setText(_translate("offset_dros_xyza", "ZERO")) + self.zero_z_button_offset.setProperty("rules", _translate("offset_dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button_offset.setProperty("MDICommand", _translate("offset_dros_xyza", "G10 L20 P{ch[0]} Z0.0")) + self.axis_label_z.setText(_translate("offset_dros_xyza", "Z")) + self.drolabel_work_z.setProperty("inchFormat", _translate("offset_dros_xyza", "%9.4f")) + self.drolabel_work_z.setProperty("millimeterFormat", _translate("offset_dros_xyza", "%10.3f")) + self.drolabel_work_z.setProperty("degreeFormat", _translate("offset_dros_xyza", "%10.2f")) + self.work_offset_z.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.g52_g92_z.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.tool_offset_z.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"url\": \"status:tool_offset\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"tool offset\"}]")) + self.zero_a_button_offset.setText(_translate("offset_dros_xyza", "ZERO")) + self.zero_a_button_offset.setProperty("rules", _translate("offset_dros_xyza", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button_offset.setProperty("MDICommand", _translate("offset_dros_xyza", "G10 L20 P{ch[0]} A0.0")) + self.axis_label_a.setText(_translate("offset_dros_xyza", "A")) + self.drolabel_work_a.setProperty("inchFormat", _translate("offset_dros_xyza", "%9.4f")) + self.drolabel_work_a.setProperty("millimeterFormat", _translate("offset_dros_xyza", "%10.3f")) + self.drolabel_work_a.setProperty("degreeFormat", _translate("offset_dros_xyza", "%10.2f")) + self.work_offset_a.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.g52_g92_a.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.tool_offset_a.setProperty("rules", _translate("offset_dros_xyza", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyzab_dros/dros_xyzab.py b/user_dro_display/xyzab_dros/dros_xyzab.py new file mode 100644 index 0000000..1a29dfb --- /dev/null +++ b/user_dro_display/xyzab_dros/dros_xyzab.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserDRO(QWidget): + def __init__(self, parent=None): + super(UserDRO, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_dro_display/xyzab_dros/dros_xyzab.ui b/user_dro_display/xyzab_dros/dros_xyzab.ui new file mode 100644 index 0000000..e77f27a --- /dev/null +++ b/user_dro_display/xyzab_dros/dros_xyzab.ui @@ -0,0 +1,1846 @@ + + + dros_xyzab + + + + 0 + 0 + 466 + 272 + + + + + 0 + 0 + + + + dros_xyzab + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 14pt "Bebas Kai"; +} + + + ALL + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 B0.0 + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + .QFrame{ + border-style: solid; + border-color: rgb(176, 179,172); + border-width: 1px; + border-radius: 4px; + background-color: rgb(90, 90, 90); + padding: -5px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 5 + + + 7 + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + Qt::AlignCenter + + + [{"channels": [{"url": "status:g5x_index?text", "trigger": true}], "property": "Text", "expression": "ch[0] + ' WORK'\n", "name": "WCS Header"}] + + + + + + + false + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + MACHINE + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + DTG + + + Qt::AlignCenter + + + + + + + + + + + 1 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF ALL + + + [{"channels": [{"url": "status:all_axes_homed", "trigger": true}], "property": "Text", "expression": "'HOMED' if ch[0] else 'REF ALL'", "name": "reference_all"}, {"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.all + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + X + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + 0.000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF X + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:x + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Y + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Y + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:y + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Z + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Z + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:z + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + A + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF A + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:a + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + B + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} B0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF B + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:b + + + + + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyzab_dros/dros_xyzab_ui.py b/user_dro_display/xyzab_dros/dros_xyzab_ui.py new file mode 100644 index 0000000..b5f51ed --- /dev/null +++ b/user_dro_display/xyzab_dros/dros_xyzab_ui.py @@ -0,0 +1,900 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyzab_dros/dros_xyzab.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dros_xyzab(object): + def setupUi(self, dros_xyzab): + dros_xyzab.setObjectName("dros_xyzab") + dros_xyzab.resize(466, 272) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(dros_xyzab.sizePolicy().hasHeightForWidth()) + dros_xyzab.setSizePolicy(sizePolicy) + dros_xyzab.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(dros_xyzab) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName("verticalLayout") + self.widget_xyzab = QtWidgets.QWidget(dros_xyzab) + self.widget_xyzab.setObjectName("widget_xyzab") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget_xyzab) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_4.setSpacing(4) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.header_layout = QtWidgets.QHBoxLayout() + self.header_layout.setContentsMargins(1, 1, 1, 1) + self.header_layout.setSpacing(7) + self.header_layout.setObjectName("header_layout") + self.zero_all_button = MDIButton(self.widget_xyzab) + self.zero_all_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_all_button.sizePolicy().hasHeightForWidth()) + self.zero_all_button.setSizePolicy(sizePolicy) + self.zero_all_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_all_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_all_button.setStyleSheet("MDIButton {\n" +" font: 14pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/zero.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zero_all_button.setIcon(icon) + self.zero_all_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_all_button.setObjectName("zero_all_button") + self.header_layout.addWidget(self.zero_all_button) + self.frame = QtWidgets.QFrame(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy) + self.frame.setMinimumSize(QtCore.QSize(0, 40)) + self.frame.setMaximumSize(QtCore.QSize(16777215, 40)) + self.frame.setStyleSheet(".QFrame{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179,172);\n" +" border-width: 1px;\n" +" border-radius: 4px;\n" +" background-color: rgb(90, 90, 90);\n" +" padding: -5px;\n" +"}") + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.horizontalLayout_103 = QtWidgets.QHBoxLayout(self.frame) + self.horizontalLayout_103.setContentsMargins(5, -1, 7, -1) + self.horizontalLayout_103.setSpacing(8) + self.horizontalLayout_103.setObjectName("horizontalLayout_103") + self.work_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header.sizePolicy().hasHeightForWidth()) + self.work_column_header.setSizePolicy(sizePolicy) + self.work_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.work_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.work_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.work_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header.setObjectName("work_column_header") + self.horizontalLayout_103.addWidget(self.work_column_header) + self.machine_column_header = QtWidgets.QLabel(self.frame) + self.machine_column_header.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.machine_column_header.sizePolicy().hasHeightForWidth()) + self.machine_column_header.setSizePolicy(sizePolicy) + self.machine_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.machine_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.machine_column_header.setObjectName("machine_column_header") + self.horizontalLayout_103.addWidget(self.machine_column_header) + self.dtg_column_header = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dtg_column_header.sizePolicy().hasHeightForWidth()) + self.dtg_column_header.setSizePolicy(sizePolicy) + self.dtg_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.dtg_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.dtg_column_header.setObjectName("dtg_column_header") + self.horizontalLayout_103.addWidget(self.dtg_column_header) + self.header_layout.addWidget(self.frame) + self.ref_all_button = ActionButton(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_all_button.sizePolicy().hasHeightForWidth()) + self.ref_all_button.setSizePolicy(sizePolicy) + self.ref_all_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_all_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_all_button.setObjectName("ref_all_button") + self.header_layout.addWidget(self.ref_all_button) + self.verticalLayout_4.addLayout(self.header_layout) + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.x_axis_dro_layout.setSpacing(7) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(self.widget_xyzab) + self.zero_x_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_x_button.sizePolicy().hasHeightForWidth()) + self.zero_x_button.setSizePolicy(sizePolicy) + self.zero_x_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_x_button.setIcon(icon) + self.zero_x_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.dro_entry_main_x = DROLineEdit(self.widget_xyzab) + self.dro_entry_main_x.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_x.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_x.setFont(font) + self.dro_entry_main_x.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_x.setProperty("referenceType", 1) + self.dro_entry_main_x.setProperty("axisNumber", 0) + self.dro_entry_main_x.setProperty("latheMode", 0) + self.dro_entry_main_x.setObjectName("dro_entry_main_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_main_x) + self.drolabel_machine_x = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_x.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_x.setSizePolicy(sizePolicy) + self.drolabel_machine_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_x.setProperty("referenceType", 0) + self.drolabel_machine_x.setProperty("axisNumber", 0) + self.drolabel_machine_x.setProperty("latheMode", 0) + self.drolabel_machine_x.setObjectName("drolabel_machine_x") + self.x_axis_dro_layout.addWidget(self.drolabel_machine_x) + self.drolabel_dtg_x = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_x.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_x.setSizePolicy(sizePolicy) + self.drolabel_dtg_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_x.setProperty("referenceType", 2) + self.drolabel_dtg_x.setProperty("axisNumber", 0) + self.drolabel_dtg_x.setProperty("latheMode", 0) + self.drolabel_dtg_x.setObjectName("drolabel_dtg_x") + self.x_axis_dro_layout.addWidget(self.drolabel_dtg_x) + self.ref_x_button = ActionButton(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_x_button.sizePolicy().hasHeightForWidth()) + self.ref_x_button.setSizePolicy(sizePolicy) + self.ref_x_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_x_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_x_button.setObjectName("ref_x_button") + self.x_axis_dro_layout.addWidget(self.ref_x_button) + self.verticalLayout_4.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.y_axis_dro_layout.setSpacing(7) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(self.widget_xyzab) + self.zero_y_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_y_button.sizePolicy().hasHeightForWidth()) + self.zero_y_button.setSizePolicy(sizePolicy) + self.zero_y_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setIcon(icon) + self.zero_y_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.dro_entry_main_y = DROLineEdit(self.widget_xyzab) + self.dro_entry_main_y.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_y.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_y.setFont(font) + self.dro_entry_main_y.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_y.setProperty("axisNumber", 1) + self.dro_entry_main_y.setObjectName("dro_entry_main_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_main_y) + self.drolabel_machine_y = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_y.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_y.setSizePolicy(sizePolicy) + self.drolabel_machine_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_y.setProperty("referenceType", 0) + self.drolabel_machine_y.setProperty("axisNumber", 1) + self.drolabel_machine_y.setProperty("latheMode", 0) + self.drolabel_machine_y.setObjectName("drolabel_machine_y") + self.y_axis_dro_layout.addWidget(self.drolabel_machine_y) + self.drolabel_dtg_y = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_y.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_y.setSizePolicy(sizePolicy) + self.drolabel_dtg_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_y.setProperty("referenceType", 2) + self.drolabel_dtg_y.setProperty("axisNumber", 1) + self.drolabel_dtg_y.setProperty("latheMode", 0) + self.drolabel_dtg_y.setObjectName("drolabel_dtg_y") + self.y_axis_dro_layout.addWidget(self.drolabel_dtg_y) + self.ref_y_button = ActionButton(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_y_button.sizePolicy().hasHeightForWidth()) + self.ref_y_button.setSizePolicy(sizePolicy) + self.ref_y_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_y_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_y_button.setObjectName("ref_y_button") + self.y_axis_dro_layout.addWidget(self.ref_y_button) + self.verticalLayout_4.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.z_axis_dro_layout.setSpacing(7) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(self.widget_xyzab) + self.zero_z_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_z_button.sizePolicy().hasHeightForWidth()) + self.zero_z_button.setSizePolicy(sizePolicy) + self.zero_z_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setIcon(icon) + self.zero_z_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.dro_entry_main_z = DROLineEdit(self.widget_xyzab) + self.dro_entry_main_z.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_z.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_z.setFont(font) + self.dro_entry_main_z.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_z.setProperty("axisNumber", 2) + self.dro_entry_main_z.setObjectName("dro_entry_main_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_main_z) + self.drolabel_machine_z = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_z.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_z.setSizePolicy(sizePolicy) + self.drolabel_machine_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_z.setProperty("referenceType", 0) + self.drolabel_machine_z.setProperty("axisNumber", 2) + self.drolabel_machine_z.setProperty("latheMode", 0) + self.drolabel_machine_z.setObjectName("drolabel_machine_z") + self.z_axis_dro_layout.addWidget(self.drolabel_machine_z) + self.drolabel_dtg_z = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_z.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_z.setSizePolicy(sizePolicy) + self.drolabel_dtg_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_z.setProperty("referenceType", 2) + self.drolabel_dtg_z.setProperty("axisNumber", 2) + self.drolabel_dtg_z.setProperty("latheMode", 0) + self.drolabel_dtg_z.setObjectName("drolabel_dtg_z") + self.z_axis_dro_layout.addWidget(self.drolabel_dtg_z) + self.ref_z_button = ActionButton(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_z_button.sizePolicy().hasHeightForWidth()) + self.ref_z_button.setSizePolicy(sizePolicy) + self.ref_z_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_z_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_z_button.setObjectName("ref_z_button") + self.z_axis_dro_layout.addWidget(self.ref_z_button) + self.verticalLayout_4.addLayout(self.z_axis_dro_layout) + self.a_axis_dro_layout = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.a_axis_dro_layout.setSpacing(7) + self.a_axis_dro_layout.setObjectName("a_axis_dro_layout") + self.zero_a_button = MDIButton(self.widget_xyzab) + self.zero_a_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_a_button.sizePolicy().hasHeightForWidth()) + self.zero_a_button.setSizePolicy(sizePolicy) + self.zero_a_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_a_button.setIcon(icon) + self.zero_a_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_a_button.setObjectName("zero_a_button") + self.a_axis_dro_layout.addWidget(self.zero_a_button) + self.dro_entry_main_a = DROLineEdit(self.widget_xyzab) + self.dro_entry_main_a.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_a.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_a.setFont(font) + self.dro_entry_main_a.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_a.setProperty("axisNumber", 3) + self.dro_entry_main_a.setObjectName("dro_entry_main_a") + self.a_axis_dro_layout.addWidget(self.dro_entry_main_a) + self.drolabel_machine_a = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_a.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_a.setSizePolicy(sizePolicy) + self.drolabel_machine_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_a.setProperty("referenceType", 0) + self.drolabel_machine_a.setProperty("axisNumber", 3) + self.drolabel_machine_a.setProperty("latheMode", 0) + self.drolabel_machine_a.setObjectName("drolabel_machine_a") + self.a_axis_dro_layout.addWidget(self.drolabel_machine_a) + self.drolabel_dtg_a = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_a.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_a.setSizePolicy(sizePolicy) + self.drolabel_dtg_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_a.setProperty("referenceType", 2) + self.drolabel_dtg_a.setProperty("axisNumber", 3) + self.drolabel_dtg_a.setProperty("latheMode", 0) + self.drolabel_dtg_a.setObjectName("drolabel_dtg_a") + self.a_axis_dro_layout.addWidget(self.drolabel_dtg_a) + self.ref_a_button = ActionButton(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_a_button.sizePolicy().hasHeightForWidth()) + self.ref_a_button.setSizePolicy(sizePolicy) + self.ref_a_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_a_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_a_button.setObjectName("ref_a_button") + self.a_axis_dro_layout.addWidget(self.ref_a_button) + self.verticalLayout_4.addLayout(self.a_axis_dro_layout) + self.b_axis_dro_layout = QtWidgets.QHBoxLayout() + self.b_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.b_axis_dro_layout.setSpacing(7) + self.b_axis_dro_layout.setObjectName("b_axis_dro_layout") + self.zero_b_button = MDIButton(self.widget_xyzab) + self.zero_b_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_b_button.sizePolicy().hasHeightForWidth()) + self.zero_b_button.setSizePolicy(sizePolicy) + self.zero_b_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_b_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_b_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_b_button.setIcon(icon) + self.zero_b_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_b_button.setObjectName("zero_b_button") + self.b_axis_dro_layout.addWidget(self.zero_b_button) + self.dro_entry_main_b = DROLineEdit(self.widget_xyzab) + self.dro_entry_main_b.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_b.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_b.setFont(font) + self.dro_entry_main_b.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_b.setProperty("referenceType", 1) + self.dro_entry_main_b.setProperty("axisNumber", 4) + self.dro_entry_main_b.setProperty("latheMode", 0) + self.dro_entry_main_b.setObjectName("dro_entry_main_b") + self.b_axis_dro_layout.addWidget(self.dro_entry_main_b) + self.drolabel_machine_b = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_b.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_b.setSizePolicy(sizePolicy) + self.drolabel_machine_b.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_b.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_b.setProperty("referenceType", 0) + self.drolabel_machine_b.setProperty("axisNumber", 4) + self.drolabel_machine_b.setProperty("latheMode", 0) + self.drolabel_machine_b.setObjectName("drolabel_machine_b") + self.b_axis_dro_layout.addWidget(self.drolabel_machine_b) + self.drolabel_dtg_b = DROLabel(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_b.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_b.setSizePolicy(sizePolicy) + self.drolabel_dtg_b.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_b.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_b.setProperty("referenceType", 2) + self.drolabel_dtg_b.setProperty("axisNumber", 4) + self.drolabel_dtg_b.setProperty("latheMode", 0) + self.drolabel_dtg_b.setObjectName("drolabel_dtg_b") + self.b_axis_dro_layout.addWidget(self.drolabel_dtg_b) + self.ref_b_button = ActionButton(self.widget_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_b_button.sizePolicy().hasHeightForWidth()) + self.ref_b_button.setSizePolicy(sizePolicy) + self.ref_b_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_b_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_b_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_b_button.setObjectName("ref_b_button") + self.b_axis_dro_layout.addWidget(self.ref_b_button) + self.verticalLayout_4.addLayout(self.b_axis_dro_layout) + self.verticalLayout.addWidget(self.widget_xyzab) + + self.retranslateUi(dros_xyzab) + QtCore.QMetaObject.connectSlotsByName(dros_xyzab) + + def retranslateUi(self, dros_xyzab): + _translate = QtCore.QCoreApplication.translate + dros_xyzab.setWindowTitle(_translate("dros_xyzab", "dros_xyzab")) + self.zero_all_button.setText(_translate("dros_xyzab", "ALL")) + self.zero_all_button.setProperty("rules", _translate("dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_all_button.setProperty("MDICommand", _translate("dros_xyzab", "G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 B0.0")) + self.work_column_header.setProperty("rules", _translate("dros_xyzab", "[{\"channels\": [{\"url\": \"status:g5x_index?text\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"ch[0] + \' WORK\'\\n\", \"name\": \"WCS Header\"}]")) + self.machine_column_header.setText(_translate("dros_xyzab", "MACHINE")) + self.dtg_column_header.setText(_translate("dros_xyzab", "DTG")) + self.ref_all_button.setText(_translate("dros_xyzab", "REF ALL")) + self.ref_all_button.setProperty("rules", _translate("dros_xyzab", "[{\"channels\": [{\"url\": \"status:all_axes_homed\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\'HOMED\' if ch[0] else \'REF ALL\'\", \"name\": \"reference_all\"}, {\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_all_button.setProperty("actionName", _translate("dros_xyzab", "machine.home.all")) + self.zero_x_button.setText(_translate("dros_xyzab", "X")) + self.zero_x_button.setProperty("rules", _translate("dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("dros_xyzab", "G10 L20 P{ch[0]} X0.0")) + self.dro_entry_main_x.setText(_translate("dros_xyzab", " 0.000")) + self.dro_entry_main_x.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.dro_entry_main_x.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.dro_entry_main_x.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_machine_x.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_machine_x.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_machine_x.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_dtg_x.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_dtg_x.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_dtg_x.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.ref_x_button.setText(_translate("dros_xyzab", "REF X")) + self.ref_x_button.setProperty("rules", _translate("dros_xyzab", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_x_button.setProperty("actionName", _translate("dros_xyzab", "machine.home.axis:x")) + self.zero_y_button.setText(_translate("dros_xyzab", "Y")) + self.zero_y_button.setProperty("rules", _translate("dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("dros_xyzab", "G10 L20 P{ch[0]} Y0.0")) + self.drolabel_machine_y.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_machine_y.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_machine_y.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_dtg_y.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_dtg_y.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_dtg_y.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.ref_y_button.setText(_translate("dros_xyzab", "REF Y")) + self.ref_y_button.setProperty("rules", _translate("dros_xyzab", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_y_button.setProperty("actionName", _translate("dros_xyzab", "machine.home.axis:y")) + self.zero_z_button.setText(_translate("dros_xyzab", "Z")) + self.zero_z_button.setProperty("rules", _translate("dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("dros_xyzab", "G10 L20 P{ch[0]} Z0.0")) + self.drolabel_machine_z.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_machine_z.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_machine_z.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_dtg_z.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_dtg_z.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_dtg_z.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.ref_z_button.setText(_translate("dros_xyzab", "REF Z")) + self.ref_z_button.setProperty("rules", _translate("dros_xyzab", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_z_button.setProperty("actionName", _translate("dros_xyzab", "machine.home.axis:z")) + self.zero_a_button.setText(_translate("dros_xyzab", "A")) + self.zero_a_button.setProperty("rules", _translate("dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button.setProperty("MDICommand", _translate("dros_xyzab", "G10 L20 P{ch[0]} A0.0")) + self.drolabel_machine_a.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_machine_a.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_machine_a.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_dtg_a.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_dtg_a.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_dtg_a.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.ref_a_button.setText(_translate("dros_xyzab", "REF A")) + self.ref_a_button.setProperty("rules", _translate("dros_xyzab", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_a_button.setProperty("actionName", _translate("dros_xyzab", "machine.home.axis:a")) + self.zero_b_button.setText(_translate("dros_xyzab", "B")) + self.zero_b_button.setProperty("rules", _translate("dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_b_button.setProperty("MDICommand", _translate("dros_xyzab", "G10 L20 P{ch[0]} B0.0")) + self.dro_entry_main_b.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.dro_entry_main_b.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.dro_entry_main_b.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_machine_b.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_machine_b.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_machine_b.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.drolabel_dtg_b.setProperty("inchFormat", _translate("dros_xyzab", "%9.4f")) + self.drolabel_dtg_b.setProperty("millimeterFormat", _translate("dros_xyzab", "%10.3f")) + self.drolabel_dtg_b.setProperty("degreeFormat", _translate("dros_xyzab", "%10.2f")) + self.ref_b_button.setText(_translate("dros_xyzab", "REF B")) + self.ref_b_button.setProperty("rules", _translate("dros_xyzab", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_b_button.setProperty("actionName", _translate("dros_xyzab", "machine.home.axis:b")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyzab_dros/offset_dros_xyzab.ui b/user_dro_display/xyzab_dros/offset_dros_xyzab.ui new file mode 100644 index 0000000..e17069c --- /dev/null +++ b/user_dro_display/xyzab_dros/offset_dros_xyzab.ui @@ -0,0 +1,1686 @@ + + + offset_dros_xyzab + + + + 0 + 0 + 493 + 276 + + + + + 0 + 0 + + + + offset_dros_xyzab + + + Qt::LeftToRight + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 0 + 0 + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + X + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Y + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Z + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"url": "status:tool_offset", "trigger": true}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "tool offset"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + A + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + + 12 + + + 6 + + + 6 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} B0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + B + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 4 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyzab_dros/offset_dros_xyzab_ui.py b/user_dro_display/xyzab_dros/offset_dros_xyzab_ui.py new file mode 100644 index 0000000..07cb4a3 --- /dev/null +++ b/user_dro_display/xyzab_dros/offset_dros_xyzab_ui.py @@ -0,0 +1,907 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyzab_dros/offset_dros_xyzab.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_offset_dros_xyzab(object): + def setupUi(self, offset_dros_xyzab): + offset_dros_xyzab.setObjectName("offset_dros_xyzab") + offset_dros_xyzab.resize(493, 276) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(offset_dros_xyzab.sizePolicy().hasHeightForWidth()) + offset_dros_xyzab.setSizePolicy(sizePolicy) + offset_dros_xyzab.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(offset_dros_xyzab) + self.verticalLayout.setContentsMargins(9, 9, 9, 9) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.x_axis_dro_layout.setSpacing(12) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button_offset = MDIButton(offset_dros_xyzab) + self.zero_x_button_offset.setEnabled(False) + self.zero_x_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_x_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_x_button_offset.setObjectName("zero_x_button_offset") + self.x_axis_dro_layout.addWidget(self.zero_x_button_offset) + self.axis_label_x = QtWidgets.QLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_label_x.sizePolicy().hasHeightForWidth()) + self.axis_label_x.setSizePolicy(sizePolicy) + self.axis_label_x.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_x.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_x.setObjectName("axis_label_x") + self.x_axis_dro_layout.addWidget(self.axis_label_x) + self.dro_entry_offset_x = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_x.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_x.setSizePolicy(sizePolicy) + self.dro_entry_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_x.setFont(font) + self.dro_entry_offset_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_x.setObjectName("dro_entry_offset_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_offset_x) + self.drolabel_work_x = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_x.sizePolicy().hasHeightForWidth()) + self.drolabel_work_x.setSizePolicy(sizePolicy) + self.drolabel_work_x.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_x.setProperty("referenceType", 0) + self.drolabel_work_x.setProperty("axisNumber", 0) + self.drolabel_work_x.setProperty("latheMode", 0) + self.drolabel_work_x.setObjectName("drolabel_work_x") + self.x_axis_dro_layout.addWidget(self.drolabel_work_x) + self.work_offset_x = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_x.sizePolicy().hasHeightForWidth()) + self.work_offset_x.setSizePolicy(sizePolicy) + self.work_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_x.setObjectName("work_offset_x") + self.x_axis_dro_layout.addWidget(self.work_offset_x) + self.g52_g92_x = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_x.sizePolicy().hasHeightForWidth()) + self.g52_g92_x.setSizePolicy(sizePolicy) + self.g52_g92_x.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_x.setObjectName("g52_g92_x") + self.x_axis_dro_layout.addWidget(self.g52_g92_x) + self.tool_offset_x = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_x.sizePolicy().hasHeightForWidth()) + self.tool_offset_x.setSizePolicy(sizePolicy) + self.tool_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_x.setObjectName("tool_offset_x") + self.x_axis_dro_layout.addWidget(self.tool_offset_x) + self.verticalLayout.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.y_axis_dro_layout.setSpacing(12) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button_offset = MDIButton(offset_dros_xyzab) + self.zero_y_button_offset.setEnabled(False) + self.zero_y_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_y_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_y_button_offset.setObjectName("zero_y_button_offset") + self.y_axis_dro_layout.addWidget(self.zero_y_button_offset) + self.axis_label_y = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_y.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_y.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_y.setObjectName("axis_label_y") + self.y_axis_dro_layout.addWidget(self.axis_label_y) + self.dro_entry_offset_y = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_y.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_y.setSizePolicy(sizePolicy) + self.dro_entry_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_y.setFont(font) + self.dro_entry_offset_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_y.setProperty("axisNumber", 1) + self.dro_entry_offset_y.setObjectName("dro_entry_offset_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_offset_y) + self.drolabel_work_y = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_y.sizePolicy().hasHeightForWidth()) + self.drolabel_work_y.setSizePolicy(sizePolicy) + self.drolabel_work_y.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_y.setProperty("referenceType", 0) + self.drolabel_work_y.setProperty("axisNumber", 1) + self.drolabel_work_y.setProperty("latheMode", 0) + self.drolabel_work_y.setObjectName("drolabel_work_y") + self.y_axis_dro_layout.addWidget(self.drolabel_work_y) + self.work_offset_y = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_y.sizePolicy().hasHeightForWidth()) + self.work_offset_y.setSizePolicy(sizePolicy) + self.work_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_y.setObjectName("work_offset_y") + self.y_axis_dro_layout.addWidget(self.work_offset_y) + self.g52_g92_y = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_y.sizePolicy().hasHeightForWidth()) + self.g52_g92_y.setSizePolicy(sizePolicy) + self.g52_g92_y.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_y.setObjectName("g52_g92_y") + self.y_axis_dro_layout.addWidget(self.g52_g92_y) + self.tool_offset_y = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_y.sizePolicy().hasHeightForWidth()) + self.tool_offset_y.setSizePolicy(sizePolicy) + self.tool_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_y.setObjectName("tool_offset_y") + self.y_axis_dro_layout.addWidget(self.tool_offset_y) + self.verticalLayout.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.z_axis_dro_layout.setSpacing(12) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button_offset = MDIButton(offset_dros_xyzab) + self.zero_z_button_offset.setEnabled(False) + self.zero_z_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_z_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_z_button_offset.setObjectName("zero_z_button_offset") + self.z_axis_dro_layout.addWidget(self.zero_z_button_offset) + self.axis_label_z = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_z.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_z.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_z.setObjectName("axis_label_z") + self.z_axis_dro_layout.addWidget(self.axis_label_z) + self.dro_entry_offset_z = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_z.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_z.setSizePolicy(sizePolicy) + self.dro_entry_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_z.setFont(font) + self.dro_entry_offset_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_z.setProperty("axisNumber", 2) + self.dro_entry_offset_z.setObjectName("dro_entry_offset_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_offset_z) + self.drolabel_work_z = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_z.sizePolicy().hasHeightForWidth()) + self.drolabel_work_z.setSizePolicy(sizePolicy) + self.drolabel_work_z.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_z.setProperty("referenceType", 0) + self.drolabel_work_z.setProperty("axisNumber", 2) + self.drolabel_work_z.setProperty("latheMode", 0) + self.drolabel_work_z.setObjectName("drolabel_work_z") + self.z_axis_dro_layout.addWidget(self.drolabel_work_z) + self.work_offset_z = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_z.sizePolicy().hasHeightForWidth()) + self.work_offset_z.setSizePolicy(sizePolicy) + self.work_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_z.setObjectName("work_offset_z") + self.z_axis_dro_layout.addWidget(self.work_offset_z) + self.g52_g92_z = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_z.sizePolicy().hasHeightForWidth()) + self.g52_g92_z.setSizePolicy(sizePolicy) + self.g52_g92_z.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_z.setObjectName("g52_g92_z") + self.z_axis_dro_layout.addWidget(self.g52_g92_z) + self.tool_offset_z = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_z.sizePolicy().hasHeightForWidth()) + self.tool_offset_z.setSizePolicy(sizePolicy) + self.tool_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_z.setObjectName("tool_offset_z") + self.z_axis_dro_layout.addWidget(self.tool_offset_z) + self.verticalLayout.addLayout(self.z_axis_dro_layout) + self.a_axis_dro_layout = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.a_axis_dro_layout.setSpacing(12) + self.a_axis_dro_layout.setObjectName("a_axis_dro_layout") + self.zero_a_button_offset = MDIButton(offset_dros_xyzab) + self.zero_a_button_offset.setEnabled(False) + self.zero_a_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_a_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_a_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_a_button_offset.setObjectName("zero_a_button_offset") + self.a_axis_dro_layout.addWidget(self.zero_a_button_offset) + self.axis_label_a = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_a.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_a.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_a.setObjectName("axis_label_a") + self.a_axis_dro_layout.addWidget(self.axis_label_a) + self.dro_entry_offset_a = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_a.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_a.setSizePolicy(sizePolicy) + self.dro_entry_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_a.setFont(font) + self.dro_entry_offset_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_a.setProperty("axisNumber", 3) + self.dro_entry_offset_a.setObjectName("dro_entry_offset_a") + self.a_axis_dro_layout.addWidget(self.dro_entry_offset_a) + self.drolabel_work_a = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_a.sizePolicy().hasHeightForWidth()) + self.drolabel_work_a.setSizePolicy(sizePolicy) + self.drolabel_work_a.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_a.setProperty("referenceType", 0) + self.drolabel_work_a.setProperty("axisNumber", 3) + self.drolabel_work_a.setProperty("latheMode", 0) + self.drolabel_work_a.setObjectName("drolabel_work_a") + self.a_axis_dro_layout.addWidget(self.drolabel_work_a) + self.work_offset_a = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_a.sizePolicy().hasHeightForWidth()) + self.work_offset_a.setSizePolicy(sizePolicy) + self.work_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_a.setObjectName("work_offset_a") + self.a_axis_dro_layout.addWidget(self.work_offset_a) + self.g52_g92_a = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_a.sizePolicy().hasHeightForWidth()) + self.g52_g92_a.setSizePolicy(sizePolicy) + self.g52_g92_a.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_a.setObjectName("g52_g92_a") + self.a_axis_dro_layout.addWidget(self.g52_g92_a) + self.tool_offset_a = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_a.sizePolicy().hasHeightForWidth()) + self.tool_offset_a.setSizePolicy(sizePolicy) + self.tool_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_a.setObjectName("tool_offset_a") + self.a_axis_dro_layout.addWidget(self.tool_offset_a) + self.verticalLayout.addLayout(self.a_axis_dro_layout) + self.b_axis_dro_layout = QtWidgets.QHBoxLayout() + self.b_axis_dro_layout.setContentsMargins(-1, 6, -1, 6) + self.b_axis_dro_layout.setSpacing(12) + self.b_axis_dro_layout.setObjectName("b_axis_dro_layout") + self.zero_b_button_offset = MDIButton(offset_dros_xyzab) + self.zero_b_button_offset.setEnabled(False) + self.zero_b_button_offset.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_b_button_offset.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_b_button_offset.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_b_button_offset.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_b_button_offset.setObjectName("zero_b_button_offset") + self.b_axis_dro_layout.addWidget(self.zero_b_button_offset) + self.axis_label_b = QtWidgets.QLabel(offset_dros_xyzab) + self.axis_label_b.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_b.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_b.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_b.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_b.setObjectName("axis_label_b") + self.b_axis_dro_layout.addWidget(self.axis_label_b) + self.dro_entry_offset_b = DROLineEdit(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_b.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_b.setSizePolicy(sizePolicy) + self.dro_entry_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_b.setFont(font) + self.dro_entry_offset_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_b.setProperty("axisNumber", 4) + self.dro_entry_offset_b.setObjectName("dro_entry_offset_b") + self.b_axis_dro_layout.addWidget(self.dro_entry_offset_b) + self.drolabel_work_b = DROLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_b.sizePolicy().hasHeightForWidth()) + self.drolabel_work_b.setSizePolicy(sizePolicy) + self.drolabel_work_b.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_b.setProperty("referenceType", 0) + self.drolabel_work_b.setProperty("axisNumber", 4) + self.drolabel_work_b.setProperty("latheMode", 0) + self.drolabel_work_b.setObjectName("drolabel_work_b") + self.b_axis_dro_layout.addWidget(self.drolabel_work_b) + self.work_offset_b = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_b.sizePolicy().hasHeightForWidth()) + self.work_offset_b.setSizePolicy(sizePolicy) + self.work_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_b.setObjectName("work_offset_b") + self.b_axis_dro_layout.addWidget(self.work_offset_b) + self.g52_g92_b = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_b.sizePolicy().hasHeightForWidth()) + self.g52_g92_b.setSizePolicy(sizePolicy) + self.g52_g92_b.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_b.setObjectName("g52_g92_b") + self.b_axis_dro_layout.addWidget(self.g52_g92_b) + self.tool_offset_b = StatusLabel(offset_dros_xyzab) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_b.sizePolicy().hasHeightForWidth()) + self.tool_offset_b.setSizePolicy(sizePolicy) + self.tool_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_b.setObjectName("tool_offset_b") + self.b_axis_dro_layout.addWidget(self.tool_offset_b) + self.verticalLayout.addLayout(self.b_axis_dro_layout) + + self.retranslateUi(offset_dros_xyzab) + QtCore.QMetaObject.connectSlotsByName(offset_dros_xyzab) + + def retranslateUi(self, offset_dros_xyzab): + _translate = QtCore.QCoreApplication.translate + offset_dros_xyzab.setWindowTitle(_translate("offset_dros_xyzab", "offset_dros_xyzab")) + self.zero_x_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_x_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} X0.0")) + self.axis_label_x.setText(_translate("offset_dros_xyzab", "X")) + self.drolabel_work_x.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_x.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_x.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_x.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.g52_g92_x.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.tool_offset_x.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.zero_y_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_y_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} Y0.0")) + self.axis_label_y.setText(_translate("offset_dros_xyzab", "Y")) + self.drolabel_work_y.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_y.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_y.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_y.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.g52_g92_y.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.tool_offset_y.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.zero_z_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_z_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} Z0.0")) + self.axis_label_z.setText(_translate("offset_dros_xyzab", "Z")) + self.drolabel_work_z.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_z.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_z.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_z.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.g52_g92_z.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.tool_offset_z.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"url\": \"status:tool_offset\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"tool offset\"}]")) + self.zero_a_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_a_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} A0.0")) + self.axis_label_a.setText(_translate("offset_dros_xyzab", "A")) + self.drolabel_work_a.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_a.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_a.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_a.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.g52_g92_a.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.tool_offset_a.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.zero_b_button_offset.setText(_translate("offset_dros_xyzab", "ZERO")) + self.zero_b_button_offset.setProperty("rules", _translate("offset_dros_xyzab", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_b_button_offset.setProperty("MDICommand", _translate("offset_dros_xyzab", "G10 L20 P{ch[0]} B0.0")) + self.axis_label_b.setText(_translate("offset_dros_xyzab", "B")) + self.drolabel_work_b.setProperty("inchFormat", _translate("offset_dros_xyzab", "%9.4f")) + self.drolabel_work_b.setProperty("millimeterFormat", _translate("offset_dros_xyzab", "%10.3f")) + self.drolabel_work_b.setProperty("degreeFormat", _translate("offset_dros_xyzab", "%10.2f")) + self.work_offset_b.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.g52_g92_b.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.tool_offset_b.setProperty("rules", _translate("offset_dros_xyzab", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyzac_dros/dros_xyzac.py b/user_dro_display/xyzac_dros/dros_xyzac.py new file mode 100644 index 0000000..1a29dfb --- /dev/null +++ b/user_dro_display/xyzac_dros/dros_xyzac.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserDRO(QWidget): + def __init__(self, parent=None): + super(UserDRO, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_dro_display/xyzac_dros/dros_xyzac.ui b/user_dro_display/xyzac_dros/dros_xyzac.ui new file mode 100644 index 0000000..fed4daf --- /dev/null +++ b/user_dro_display/xyzac_dros/dros_xyzac.ui @@ -0,0 +1,1849 @@ + + + dros_xyzac + + + + 0 + 0 + 458 + 272 + + + + + 0 + 0 + + + + dros_xyzac + + + Qt::LeftToRight + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 4 + + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 14pt "Bebas Kai"; +} + + + ALL + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 C0.0 + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + .QFrame{ + border-style: solid; + border-color: rgb(176, 179,172); + border-width: 1px; + border-radius: 4px; + background-color: rgb(90, 90, 90); + padding: -5px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 5 + + + 7 + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + Qt::AlignCenter + + + [{"channels": [{"url": "status:g5x_index?text", "trigger": true}], "property": "Text", "expression": "ch[0] + ' WORK'\n", "name": "WCS Header"}] + + + + + + + false + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + MACHINE + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + DTG + + + Qt::AlignCenter + + + + + + + + + + + 1 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF ALL + + + [{"channels": [{"url": "status:all_axes_homed", "trigger": true}], "property": "Text", "expression": "'HOMED' if ch[0] else 'REF ALL'", "name": "reference_all"}, {"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.all + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + X + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + 0.000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF X + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:x + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Y + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Y + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:y + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Z + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Z + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:z + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + A + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF A + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:a + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + C + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} C0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF C + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:c + + + + + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyzac_dros/dros_xyzac_ui.py b/user_dro_display/xyzac_dros/dros_xyzac_ui.py new file mode 100644 index 0000000..ea6b067 --- /dev/null +++ b/user_dro_display/xyzac_dros/dros_xyzac_ui.py @@ -0,0 +1,901 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyzac_dros/dros_xyzac.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dros_xyzac(object): + def setupUi(self, dros_xyzac): + dros_xyzac.setObjectName("dros_xyzac") + dros_xyzac.resize(458, 272) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(dros_xyzac.sizePolicy().hasHeightForWidth()) + dros_xyzac.setSizePolicy(sizePolicy) + dros_xyzac.setLayoutDirection(QtCore.Qt.LeftToRight) + self.y_axis_dro_layout_2 = QtWidgets.QVBoxLayout(dros_xyzac) + self.y_axis_dro_layout_2.setContentsMargins(0, 0, 0, 0) + self.y_axis_dro_layout_2.setSpacing(0) + self.y_axis_dro_layout_2.setObjectName("y_axis_dro_layout_2") + self.widget_xyzac = QtWidgets.QWidget(dros_xyzac) + self.widget_xyzac.setObjectName("widget_xyzac") + self._2 = QtWidgets.QVBoxLayout(self.widget_xyzac) + self._2.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self._2.setContentsMargins(0, 0, 0, 0) + self._2.setSpacing(4) + self._2.setObjectName("_2") + self.header_layout = QtWidgets.QHBoxLayout() + self.header_layout.setContentsMargins(1, 1, 1, 1) + self.header_layout.setSpacing(7) + self.header_layout.setObjectName("header_layout") + self.zero_all_button = MDIButton(self.widget_xyzac) + self.zero_all_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_all_button.sizePolicy().hasHeightForWidth()) + self.zero_all_button.setSizePolicy(sizePolicy) + self.zero_all_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_all_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_all_button.setStyleSheet("MDIButton {\n" +" font: 14pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/zero.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zero_all_button.setIcon(icon) + self.zero_all_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_all_button.setObjectName("zero_all_button") + self.header_layout.addWidget(self.zero_all_button) + self.frame = QtWidgets.QFrame(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy) + self.frame.setMinimumSize(QtCore.QSize(0, 40)) + self.frame.setMaximumSize(QtCore.QSize(16777215, 40)) + self.frame.setStyleSheet(".QFrame{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179,172);\n" +" border-width: 1px;\n" +" border-radius: 4px;\n" +" background-color: rgb(90, 90, 90);\n" +" padding: -5px;\n" +"}") + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.horizontalLayout_131 = QtWidgets.QHBoxLayout(self.frame) + self.horizontalLayout_131.setContentsMargins(5, -1, 7, -1) + self.horizontalLayout_131.setSpacing(8) + self.horizontalLayout_131.setObjectName("horizontalLayout_131") + self.work_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header.sizePolicy().hasHeightForWidth()) + self.work_column_header.setSizePolicy(sizePolicy) + self.work_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.work_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.work_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.work_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header.setObjectName("work_column_header") + self.horizontalLayout_131.addWidget(self.work_column_header) + self.machine_column_header = QtWidgets.QLabel(self.frame) + self.machine_column_header.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.machine_column_header.sizePolicy().hasHeightForWidth()) + self.machine_column_header.setSizePolicy(sizePolicy) + self.machine_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.machine_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.machine_column_header.setObjectName("machine_column_header") + self.horizontalLayout_131.addWidget(self.machine_column_header) + self.dtg_column_header = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dtg_column_header.sizePolicy().hasHeightForWidth()) + self.dtg_column_header.setSizePolicy(sizePolicy) + self.dtg_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.dtg_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.dtg_column_header.setObjectName("dtg_column_header") + self.horizontalLayout_131.addWidget(self.dtg_column_header) + self.header_layout.addWidget(self.frame) + self.ref_all_button = ActionButton(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_all_button.sizePolicy().hasHeightForWidth()) + self.ref_all_button.setSizePolicy(sizePolicy) + self.ref_all_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_all_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_all_button.setObjectName("ref_all_button") + self.header_layout.addWidget(self.ref_all_button) + self._2.addLayout(self.header_layout) + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.x_axis_dro_layout.setSpacing(7) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(self.widget_xyzac) + self.zero_x_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_x_button.sizePolicy().hasHeightForWidth()) + self.zero_x_button.setSizePolicy(sizePolicy) + self.zero_x_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_x_button.setIcon(icon) + self.zero_x_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.dro_entry_main_x = DROLineEdit(self.widget_xyzac) + self.dro_entry_main_x.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_x.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_x.setFont(font) + self.dro_entry_main_x.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_x.setProperty("referenceType", 1) + self.dro_entry_main_x.setProperty("axisNumber", 0) + self.dro_entry_main_x.setProperty("latheMode", 0) + self.dro_entry_main_x.setObjectName("dro_entry_main_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_main_x) + self.drolabel_machine_x = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_x.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_x.setSizePolicy(sizePolicy) + self.drolabel_machine_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_x.setProperty("referenceType", 0) + self.drolabel_machine_x.setProperty("axisNumber", 0) + self.drolabel_machine_x.setProperty("latheMode", 0) + self.drolabel_machine_x.setObjectName("drolabel_machine_x") + self.x_axis_dro_layout.addWidget(self.drolabel_machine_x) + self.drolabel_dtg_x = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_x.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_x.setSizePolicy(sizePolicy) + self.drolabel_dtg_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_x.setProperty("referenceType", 2) + self.drolabel_dtg_x.setProperty("axisNumber", 0) + self.drolabel_dtg_x.setProperty("latheMode", 0) + self.drolabel_dtg_x.setObjectName("drolabel_dtg_x") + self.x_axis_dro_layout.addWidget(self.drolabel_dtg_x) + self.ref_x_button_3 = ActionButton(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_x_button_3.sizePolicy().hasHeightForWidth()) + self.ref_x_button_3.setSizePolicy(sizePolicy) + self.ref_x_button_3.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_x_button_3.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_x_button_3.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_x_button_3.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_x_button_3.setObjectName("ref_x_button_3") + self.x_axis_dro_layout.addWidget(self.ref_x_button_3) + self._2.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.y_axis_dro_layout.setSpacing(7) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(self.widget_xyzac) + self.zero_y_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_y_button.sizePolicy().hasHeightForWidth()) + self.zero_y_button.setSizePolicy(sizePolicy) + self.zero_y_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setIcon(icon) + self.zero_y_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.dro_entry_main_y = DROLineEdit(self.widget_xyzac) + self.dro_entry_main_y.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_y.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_y.setFont(font) + self.dro_entry_main_y.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_y.setProperty("axisNumber", 1) + self.dro_entry_main_y.setObjectName("dro_entry_main_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_main_y) + self.drolabel_machine_y = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_y.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_y.setSizePolicy(sizePolicy) + self.drolabel_machine_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_y.setProperty("referenceType", 0) + self.drolabel_machine_y.setProperty("axisNumber", 1) + self.drolabel_machine_y.setProperty("latheMode", 0) + self.drolabel_machine_y.setObjectName("drolabel_machine_y") + self.y_axis_dro_layout.addWidget(self.drolabel_machine_y) + self.drolabel_dtg_y = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_y.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_y.setSizePolicy(sizePolicy) + self.drolabel_dtg_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_y.setProperty("referenceType", 2) + self.drolabel_dtg_y.setProperty("axisNumber", 1) + self.drolabel_dtg_y.setProperty("latheMode", 0) + self.drolabel_dtg_y.setObjectName("drolabel_dtg_y") + self.y_axis_dro_layout.addWidget(self.drolabel_dtg_y) + self.ref_y_button = ActionButton(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_y_button.sizePolicy().hasHeightForWidth()) + self.ref_y_button.setSizePolicy(sizePolicy) + self.ref_y_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_y_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_y_button.setObjectName("ref_y_button") + self.y_axis_dro_layout.addWidget(self.ref_y_button) + self._2.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.z_axis_dro_layout.setSpacing(7) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(self.widget_xyzac) + self.zero_z_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_z_button.sizePolicy().hasHeightForWidth()) + self.zero_z_button.setSizePolicy(sizePolicy) + self.zero_z_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setIcon(icon) + self.zero_z_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.dro_entry_main_z = DROLineEdit(self.widget_xyzac) + self.dro_entry_main_z.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_z.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_z.setFont(font) + self.dro_entry_main_z.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_z.setProperty("axisNumber", 2) + self.dro_entry_main_z.setObjectName("dro_entry_main_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_main_z) + self.drolabel_machine_z = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_z.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_z.setSizePolicy(sizePolicy) + self.drolabel_machine_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_z.setProperty("referenceType", 0) + self.drolabel_machine_z.setProperty("axisNumber", 2) + self.drolabel_machine_z.setProperty("latheMode", 0) + self.drolabel_machine_z.setObjectName("drolabel_machine_z") + self.z_axis_dro_layout.addWidget(self.drolabel_machine_z) + self.drolabel_dtg_z = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_z.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_z.setSizePolicy(sizePolicy) + self.drolabel_dtg_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_z.setProperty("referenceType", 2) + self.drolabel_dtg_z.setProperty("axisNumber", 2) + self.drolabel_dtg_z.setProperty("latheMode", 0) + self.drolabel_dtg_z.setObjectName("drolabel_dtg_z") + self.z_axis_dro_layout.addWidget(self.drolabel_dtg_z) + self.ref_z_button = ActionButton(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_z_button.sizePolicy().hasHeightForWidth()) + self.ref_z_button.setSizePolicy(sizePolicy) + self.ref_z_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_z_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_z_button.setObjectName("ref_z_button") + self.z_axis_dro_layout.addWidget(self.ref_z_button) + self._2.addLayout(self.z_axis_dro_layout) + self.a_axis_dro_layout = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.a_axis_dro_layout.setSpacing(7) + self.a_axis_dro_layout.setObjectName("a_axis_dro_layout") + self.zero_a_button = MDIButton(self.widget_xyzac) + self.zero_a_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_a_button.sizePolicy().hasHeightForWidth()) + self.zero_a_button.setSizePolicy(sizePolicy) + self.zero_a_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_a_button.setIcon(icon) + self.zero_a_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_a_button.setObjectName("zero_a_button") + self.a_axis_dro_layout.addWidget(self.zero_a_button) + self.dro_entry_main_a = DROLineEdit(self.widget_xyzac) + self.dro_entry_main_a.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_a.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_a.setFont(font) + self.dro_entry_main_a.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_a.setProperty("axisNumber", 3) + self.dro_entry_main_a.setObjectName("dro_entry_main_a") + self.a_axis_dro_layout.addWidget(self.dro_entry_main_a) + self.drolabel_machine_a = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_a.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_a.setSizePolicy(sizePolicy) + self.drolabel_machine_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_a.setProperty("referenceType", 0) + self.drolabel_machine_a.setProperty("axisNumber", 3) + self.drolabel_machine_a.setProperty("latheMode", 0) + self.drolabel_machine_a.setObjectName("drolabel_machine_a") + self.a_axis_dro_layout.addWidget(self.drolabel_machine_a) + self.drolabel_dtg_a = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_a.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_a.setSizePolicy(sizePolicy) + self.drolabel_dtg_a.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_a.setProperty("referenceType", 2) + self.drolabel_dtg_a.setProperty("axisNumber", 3) + self.drolabel_dtg_a.setProperty("latheMode", 0) + self.drolabel_dtg_a.setObjectName("drolabel_dtg_a") + self.a_axis_dro_layout.addWidget(self.drolabel_dtg_a) + self.ref_a_button = ActionButton(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_a_button.sizePolicy().hasHeightForWidth()) + self.ref_a_button.setSizePolicy(sizePolicy) + self.ref_a_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_a_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_a_button.setObjectName("ref_a_button") + self.a_axis_dro_layout.addWidget(self.ref_a_button) + self._2.addLayout(self.a_axis_dro_layout) + self.c_axis_dro_layout = QtWidgets.QHBoxLayout() + self.c_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.c_axis_dro_layout.setSpacing(7) + self.c_axis_dro_layout.setObjectName("c_axis_dro_layout") + self.zero_c_button = MDIButton(self.widget_xyzac) + self.zero_c_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_c_button.sizePolicy().hasHeightForWidth()) + self.zero_c_button.setSizePolicy(sizePolicy) + self.zero_c_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_c_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_c_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_c_button.setIcon(icon) + self.zero_c_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_c_button.setObjectName("zero_c_button") + self.c_axis_dro_layout.addWidget(self.zero_c_button) + self.dro_entry_main_b = DROLineEdit(self.widget_xyzac) + self.dro_entry_main_b.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_b.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_b.setFont(font) + self.dro_entry_main_b.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_b.setProperty("referenceType", 1) + self.dro_entry_main_b.setProperty("axisNumber", 4) + self.dro_entry_main_b.setProperty("latheMode", 0) + self.dro_entry_main_b.setObjectName("dro_entry_main_b") + self.c_axis_dro_layout.addWidget(self.dro_entry_main_b) + self.drolabel_machine_c = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_c.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_c.setSizePolicy(sizePolicy) + self.drolabel_machine_c.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_c.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_c.setProperty("referenceType", 0) + self.drolabel_machine_c.setProperty("axisNumber", 4) + self.drolabel_machine_c.setProperty("latheMode", 0) + self.drolabel_machine_c.setObjectName("drolabel_machine_c") + self.c_axis_dro_layout.addWidget(self.drolabel_machine_c) + self.drolabel_dtg_c = DROLabel(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_c.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_c.setSizePolicy(sizePolicy) + self.drolabel_dtg_c.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_c.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_c.setProperty("referenceType", 2) + self.drolabel_dtg_c.setProperty("axisNumber", 4) + self.drolabel_dtg_c.setProperty("latheMode", 0) + self.drolabel_dtg_c.setObjectName("drolabel_dtg_c") + self.c_axis_dro_layout.addWidget(self.drolabel_dtg_c) + self.ref_c_button = ActionButton(self.widget_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_c_button.sizePolicy().hasHeightForWidth()) + self.ref_c_button.setSizePolicy(sizePolicy) + self.ref_c_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_c_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_c_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_c_button.setObjectName("ref_c_button") + self.c_axis_dro_layout.addWidget(self.ref_c_button) + self._2.addLayout(self.c_axis_dro_layout) + self.y_axis_dro_layout_2.addWidget(self.widget_xyzac) + + self.retranslateUi(dros_xyzac) + QtCore.QMetaObject.connectSlotsByName(dros_xyzac) + + def retranslateUi(self, dros_xyzac): + _translate = QtCore.QCoreApplication.translate + dros_xyzac.setWindowTitle(_translate("dros_xyzac", "dros_xyzac")) + self.zero_all_button.setText(_translate("dros_xyzac", "ALL")) + self.zero_all_button.setProperty("rules", _translate("dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_all_button.setProperty("MDICommand", _translate("dros_xyzac", "G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 C0.0")) + self.work_column_header.setProperty("rules", _translate("dros_xyzac", "[{\"channels\": [{\"url\": \"status:g5x_index?text\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"ch[0] + \' WORK\'\\n\", \"name\": \"WCS Header\"}]")) + self.machine_column_header.setText(_translate("dros_xyzac", "MACHINE")) + self.dtg_column_header.setText(_translate("dros_xyzac", "DTG")) + self.ref_all_button.setText(_translate("dros_xyzac", "REF ALL")) + self.ref_all_button.setProperty("rules", _translate("dros_xyzac", "[{\"channels\": [{\"url\": \"status:all_axes_homed\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\'HOMED\' if ch[0] else \'REF ALL\'\", \"name\": \"reference_all\"}, {\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_all_button.setProperty("actionName", _translate("dros_xyzac", "machine.home.all")) + self.zero_x_button.setText(_translate("dros_xyzac", "X")) + self.zero_x_button.setProperty("rules", _translate("dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("dros_xyzac", "G10 L20 P{ch[0]} X0.0")) + self.dro_entry_main_x.setText(_translate("dros_xyzac", " 0.000")) + self.dro_entry_main_x.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.dro_entry_main_x.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.dro_entry_main_x.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_machine_x.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_machine_x.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_machine_x.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_dtg_x.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_dtg_x.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_dtg_x.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.ref_x_button_3.setText(_translate("dros_xyzac", "REF X")) + self.ref_x_button_3.setProperty("rules", _translate("dros_xyzac", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_x_button_3.setProperty("actionName", _translate("dros_xyzac", "machine.home.axis:x")) + self.zero_y_button.setText(_translate("dros_xyzac", "Y")) + self.zero_y_button.setProperty("rules", _translate("dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("dros_xyzac", "G10 L20 P{ch[0]} Y0.0")) + self.drolabel_machine_y.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_machine_y.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_machine_y.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_dtg_y.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_dtg_y.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_dtg_y.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.ref_y_button.setText(_translate("dros_xyzac", "REF Y")) + self.ref_y_button.setProperty("rules", _translate("dros_xyzac", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_y_button.setProperty("actionName", _translate("dros_xyzac", "machine.home.axis:y")) + self.zero_z_button.setText(_translate("dros_xyzac", "Z")) + self.zero_z_button.setProperty("rules", _translate("dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("dros_xyzac", "G10 L20 P{ch[0]} Z0.0")) + self.drolabel_machine_z.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_machine_z.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_machine_z.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_dtg_z.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_dtg_z.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_dtg_z.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.ref_z_button.setText(_translate("dros_xyzac", "REF Z")) + self.ref_z_button.setProperty("rules", _translate("dros_xyzac", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_z_button.setProperty("actionName", _translate("dros_xyzac", "machine.home.axis:z")) + self.zero_a_button.setText(_translate("dros_xyzac", "A")) + self.zero_a_button.setProperty("rules", _translate("dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button.setProperty("MDICommand", _translate("dros_xyzac", "G10 L20 P{ch[0]} A0.0")) + self.drolabel_machine_a.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_machine_a.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_machine_a.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_dtg_a.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_dtg_a.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_dtg_a.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.ref_a_button.setText(_translate("dros_xyzac", "REF A")) + self.ref_a_button.setProperty("rules", _translate("dros_xyzac", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_a_button.setProperty("actionName", _translate("dros_xyzac", "machine.home.axis:a")) + self.zero_c_button.setText(_translate("dros_xyzac", "C")) + self.zero_c_button.setProperty("rules", _translate("dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_c_button.setProperty("MDICommand", _translate("dros_xyzac", "G10 L20 P{ch[0]} C0.0")) + self.dro_entry_main_b.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.dro_entry_main_b.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.dro_entry_main_b.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_machine_c.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_machine_c.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_machine_c.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.drolabel_dtg_c.setProperty("inchFormat", _translate("dros_xyzac", "%9.4f")) + self.drolabel_dtg_c.setProperty("millimeterFormat", _translate("dros_xyzac", "%10.3f")) + self.drolabel_dtg_c.setProperty("degreeFormat", _translate("dros_xyzac", "%10.2f")) + self.ref_c_button.setText(_translate("dros_xyzac", "REF C")) + self.ref_c_button.setProperty("rules", _translate("dros_xyzac", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_c_button.setProperty("actionName", _translate("dros_xyzac", "machine.home.axis:c")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyzac_dros/offset_dros_xyzac.ui b/user_dro_display/xyzac_dros/offset_dros_xyzac.ui new file mode 100644 index 0000000..51ecd8c --- /dev/null +++ b/user_dro_display/xyzac_dros/offset_dros_xyzac.ui @@ -0,0 +1,1701 @@ + + + offset_dros_xyzac + + + + 0 + 0 + 493 + 276 + + + + + 0 + 0 + + + + offset_dros_xyzac + + + Qt::LeftToRight + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 0 + 0 + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + X + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Y + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Z + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"url": "status:tool_offset", "trigger": true}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "tool offset"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} A0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + A + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 3 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][3])", "name": "New Rule"}] + + + + + + + + + 12 + + + 6 + + + 6 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} C0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + C + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyzac_dros/offset_dros_xyzac_ui.py b/user_dro_display/xyzac_dros/offset_dros_xyzac_ui.py new file mode 100644 index 0000000..69cbb90 --- /dev/null +++ b/user_dro_display/xyzac_dros/offset_dros_xyzac_ui.py @@ -0,0 +1,912 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyzac_dros/offset_dros_xyzac.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_offset_dros_xyzac(object): + def setupUi(self, offset_dros_xyzac): + offset_dros_xyzac.setObjectName("offset_dros_xyzac") + offset_dros_xyzac.resize(493, 276) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(offset_dros_xyzac.sizePolicy().hasHeightForWidth()) + offset_dros_xyzac.setSizePolicy(sizePolicy) + offset_dros_xyzac.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(offset_dros_xyzac) + self.verticalLayout.setContentsMargins(9, 9, 9, 9) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.x_axis_dro_layout.setSpacing(12) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(offset_dros_xyzac) + self.zero_x_button.setEnabled(False) + self.zero_x_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_x_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.axis_label_x = QtWidgets.QLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_label_x.sizePolicy().hasHeightForWidth()) + self.axis_label_x.setSizePolicy(sizePolicy) + self.axis_label_x.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_x.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_x.setObjectName("axis_label_x") + self.x_axis_dro_layout.addWidget(self.axis_label_x) + self.dro_entry_offset_x = DROLineEdit(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_x.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_x.setSizePolicy(sizePolicy) + self.dro_entry_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_x.setFont(font) + self.dro_entry_offset_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_x.setObjectName("dro_entry_offset_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_offset_x) + self.drolabel_work_x = DROLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_x.sizePolicy().hasHeightForWidth()) + self.drolabel_work_x.setSizePolicy(sizePolicy) + self.drolabel_work_x.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_x.setProperty("referenceType", 0) + self.drolabel_work_x.setProperty("axisNumber", 0) + self.drolabel_work_x.setProperty("latheMode", 0) + self.drolabel_work_x.setObjectName("drolabel_work_x") + self.x_axis_dro_layout.addWidget(self.drolabel_work_x) + self.work_offset_x = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_x.sizePolicy().hasHeightForWidth()) + self.work_offset_x.setSizePolicy(sizePolicy) + self.work_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_x.setObjectName("work_offset_x") + self.x_axis_dro_layout.addWidget(self.work_offset_x) + self.g52_g92_x = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_x.sizePolicy().hasHeightForWidth()) + self.g52_g92_x.setSizePolicy(sizePolicy) + self.g52_g92_x.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_x.setObjectName("g52_g92_x") + self.x_axis_dro_layout.addWidget(self.g52_g92_x) + self.tool_offset_x = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_x.sizePolicy().hasHeightForWidth()) + self.tool_offset_x.setSizePolicy(sizePolicy) + self.tool_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_x.setObjectName("tool_offset_x") + self.x_axis_dro_layout.addWidget(self.tool_offset_x) + self.verticalLayout.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.y_axis_dro_layout.setSpacing(12) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(offset_dros_xyzac) + self.zero_y_button.setEnabled(False) + self.zero_y_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_y_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.axis_label_y = QtWidgets.QLabel(offset_dros_xyzac) + self.axis_label_y.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_y.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_y.setObjectName("axis_label_y") + self.y_axis_dro_layout.addWidget(self.axis_label_y) + self.dro_entry_offset_y = DROLineEdit(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_y.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_y.setSizePolicy(sizePolicy) + self.dro_entry_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_y.setFont(font) + self.dro_entry_offset_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_y.setProperty("axisNumber", 1) + self.dro_entry_offset_y.setObjectName("dro_entry_offset_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_offset_y) + self.drolabel_work_y = DROLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_y.sizePolicy().hasHeightForWidth()) + self.drolabel_work_y.setSizePolicy(sizePolicy) + self.drolabel_work_y.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_y.setProperty("referenceType", 0) + self.drolabel_work_y.setProperty("axisNumber", 1) + self.drolabel_work_y.setProperty("latheMode", 0) + self.drolabel_work_y.setObjectName("drolabel_work_y") + self.y_axis_dro_layout.addWidget(self.drolabel_work_y) + self.work_offset_y = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_y.sizePolicy().hasHeightForWidth()) + self.work_offset_y.setSizePolicy(sizePolicy) + self.work_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_y.setObjectName("work_offset_y") + self.y_axis_dro_layout.addWidget(self.work_offset_y) + self.g52_g92_y = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_y.sizePolicy().hasHeightForWidth()) + self.g52_g92_y.setSizePolicy(sizePolicy) + self.g52_g92_y.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_y.setObjectName("g52_g92_y") + self.y_axis_dro_layout.addWidget(self.g52_g92_y) + self.tool_offset_y = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_y.sizePolicy().hasHeightForWidth()) + self.tool_offset_y.setSizePolicy(sizePolicy) + self.tool_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_y.setObjectName("tool_offset_y") + self.y_axis_dro_layout.addWidget(self.tool_offset_y) + self.verticalLayout.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.z_axis_dro_layout.setSpacing(12) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(offset_dros_xyzac) + self.zero_z_button.setEnabled(False) + self.zero_z_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_z_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.axis_label_z = QtWidgets.QLabel(offset_dros_xyzac) + self.axis_label_z.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_z.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_z.setObjectName("axis_label_z") + self.z_axis_dro_layout.addWidget(self.axis_label_z) + self.dro_entry_offset_z = DROLineEdit(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_z.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_z.setSizePolicy(sizePolicy) + self.dro_entry_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_z.setFont(font) + self.dro_entry_offset_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_z.setProperty("axisNumber", 2) + self.dro_entry_offset_z.setObjectName("dro_entry_offset_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_offset_z) + self.drolabel_work_z = DROLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_z.sizePolicy().hasHeightForWidth()) + self.drolabel_work_z.setSizePolicy(sizePolicy) + self.drolabel_work_z.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_z.setProperty("referenceType", 0) + self.drolabel_work_z.setProperty("axisNumber", 2) + self.drolabel_work_z.setProperty("latheMode", 0) + self.drolabel_work_z.setObjectName("drolabel_work_z") + self.z_axis_dro_layout.addWidget(self.drolabel_work_z) + self.work_offset_z = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_z.sizePolicy().hasHeightForWidth()) + self.work_offset_z.setSizePolicy(sizePolicy) + self.work_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_z.setObjectName("work_offset_z") + self.z_axis_dro_layout.addWidget(self.work_offset_z) + self.g52_g92_z = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_z.sizePolicy().hasHeightForWidth()) + self.g52_g92_z.setSizePolicy(sizePolicy) + self.g52_g92_z.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_z.setObjectName("g52_g92_z") + self.z_axis_dro_layout.addWidget(self.g52_g92_z) + self.tool_offset_z = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_z.sizePolicy().hasHeightForWidth()) + self.tool_offset_z.setSizePolicy(sizePolicy) + self.tool_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_z.setObjectName("tool_offset_z") + self.z_axis_dro_layout.addWidget(self.tool_offset_z) + self.verticalLayout.addLayout(self.z_axis_dro_layout) + self.a_axis_dro_layout = QtWidgets.QHBoxLayout() + self.a_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.a_axis_dro_layout.setSpacing(12) + self.a_axis_dro_layout.setObjectName("a_axis_dro_layout") + self.zero_a_button = MDIButton(offset_dros_xyzac) + self.zero_a_button.setEnabled(False) + self.zero_a_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_a_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_a_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_a_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_a_button.setObjectName("zero_a_button") + self.a_axis_dro_layout.addWidget(self.zero_a_button) + self.axis_label_a = QtWidgets.QLabel(offset_dros_xyzac) + self.axis_label_a.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_a.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_a.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_a.setObjectName("axis_label_a") + self.a_axis_dro_layout.addWidget(self.axis_label_a) + self.dro_entry_offset_a = DROLineEdit(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_a.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_a.setSizePolicy(sizePolicy) + self.dro_entry_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_a.setFont(font) + self.dro_entry_offset_a.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_a.setProperty("axisNumber", 3) + self.dro_entry_offset_a.setObjectName("dro_entry_offset_a") + self.a_axis_dro_layout.addWidget(self.dro_entry_offset_a) + self.drolabel_work_a = DROLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_a.sizePolicy().hasHeightForWidth()) + self.drolabel_work_a.setSizePolicy(sizePolicy) + self.drolabel_work_a.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_a.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_a.setProperty("referenceType", 0) + self.drolabel_work_a.setProperty("axisNumber", 3) + self.drolabel_work_a.setProperty("latheMode", 0) + self.drolabel_work_a.setObjectName("drolabel_work_a") + self.a_axis_dro_layout.addWidget(self.drolabel_work_a) + self.work_offset_a = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_a.sizePolicy().hasHeightForWidth()) + self.work_offset_a.setSizePolicy(sizePolicy) + self.work_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_a.setObjectName("work_offset_a") + self.a_axis_dro_layout.addWidget(self.work_offset_a) + self.g52_g92_a = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_a.sizePolicy().hasHeightForWidth()) + self.g52_g92_a.setSizePolicy(sizePolicy) + self.g52_g92_a.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_a.setObjectName("g52_g92_a") + self.a_axis_dro_layout.addWidget(self.g52_g92_a) + self.tool_offset_a = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_a.sizePolicy().hasHeightForWidth()) + self.tool_offset_a.setSizePolicy(sizePolicy) + self.tool_offset_a.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_a.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_a.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_a.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_a.setObjectName("tool_offset_a") + self.a_axis_dro_layout.addWidget(self.tool_offset_a) + self.verticalLayout.addLayout(self.a_axis_dro_layout) + self.c_axis_dro_layout = QtWidgets.QHBoxLayout() + self.c_axis_dro_layout.setContentsMargins(-1, 6, -1, 6) + self.c_axis_dro_layout.setSpacing(12) + self.c_axis_dro_layout.setObjectName("c_axis_dro_layout") + self.zero_c_button = MDIButton(offset_dros_xyzac) + self.zero_c_button.setEnabled(False) + self.zero_c_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_c_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_c_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_c_button.setObjectName("zero_c_button") + self.c_axis_dro_layout.addWidget(self.zero_c_button) + self.axis_label_c = QtWidgets.QLabel(offset_dros_xyzac) + self.axis_label_c.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_c.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_c.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_c.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_c.setObjectName("axis_label_c") + self.c_axis_dro_layout.addWidget(self.axis_label_c) + self.dro_entry_offset_c = DROLineEdit(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_c.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_c.setSizePolicy(sizePolicy) + self.dro_entry_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_c.setFont(font) + self.dro_entry_offset_c.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_c.setProperty("referenceType", 1) + self.dro_entry_offset_c.setProperty("axisNumber", 4) + self.dro_entry_offset_c.setProperty("latheMode", 0) + self.dro_entry_offset_c.setObjectName("dro_entry_offset_c") + self.c_axis_dro_layout.addWidget(self.dro_entry_offset_c) + self.drolabel_work_c = DROLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_c.sizePolicy().hasHeightForWidth()) + self.drolabel_work_c.setSizePolicy(sizePolicy) + self.drolabel_work_c.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_c.setProperty("referenceType", 0) + self.drolabel_work_c.setProperty("axisNumber", 4) + self.drolabel_work_c.setProperty("latheMode", 0) + self.drolabel_work_c.setObjectName("drolabel_work_c") + self.c_axis_dro_layout.addWidget(self.drolabel_work_c) + self.work_offset_c = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_c.sizePolicy().hasHeightForWidth()) + self.work_offset_c.setSizePolicy(sizePolicy) + self.work_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_c.setObjectName("work_offset_c") + self.c_axis_dro_layout.addWidget(self.work_offset_c) + self.g52_g92_c = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_c.sizePolicy().hasHeightForWidth()) + self.g52_g92_c.setSizePolicy(sizePolicy) + self.g52_g92_c.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_c.setObjectName("g52_g92_c") + self.c_axis_dro_layout.addWidget(self.g52_g92_c) + self.tool_offset_c = StatusLabel(offset_dros_xyzac) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_c.sizePolicy().hasHeightForWidth()) + self.tool_offset_c.setSizePolicy(sizePolicy) + self.tool_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_c.setObjectName("tool_offset_c") + self.c_axis_dro_layout.addWidget(self.tool_offset_c) + self.verticalLayout.addLayout(self.c_axis_dro_layout) + + self.retranslateUi(offset_dros_xyzac) + QtCore.QMetaObject.connectSlotsByName(offset_dros_xyzac) + + def retranslateUi(self, offset_dros_xyzac): + _translate = QtCore.QCoreApplication.translate + offset_dros_xyzac.setWindowTitle(_translate("offset_dros_xyzac", "offset_dros_xyzac")) + self.zero_x_button.setText(_translate("offset_dros_xyzac", "ZERO")) + self.zero_x_button.setProperty("rules", _translate("offset_dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("offset_dros_xyzac", "G10 L20 P{ch[0]} X0.0")) + self.axis_label_x.setText(_translate("offset_dros_xyzac", "X")) + self.drolabel_work_x.setProperty("inchFormat", _translate("offset_dros_xyzac", "%9.4f")) + self.drolabel_work_x.setProperty("millimeterFormat", _translate("offset_dros_xyzac", "%10.3f")) + self.drolabel_work_x.setProperty("degreeFormat", _translate("offset_dros_xyzac", "%10.2f")) + self.work_offset_x.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.g52_g92_x.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.tool_offset_x.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.zero_y_button.setText(_translate("offset_dros_xyzac", "ZERO")) + self.zero_y_button.setProperty("rules", _translate("offset_dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("offset_dros_xyzac", "G10 L20 P{ch[0]} Y0.0")) + self.axis_label_y.setText(_translate("offset_dros_xyzac", "Y")) + self.drolabel_work_y.setProperty("inchFormat", _translate("offset_dros_xyzac", "%9.4f")) + self.drolabel_work_y.setProperty("millimeterFormat", _translate("offset_dros_xyzac", "%10.3f")) + self.drolabel_work_y.setProperty("degreeFormat", _translate("offset_dros_xyzac", "%10.2f")) + self.work_offset_y.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.g52_g92_y.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.tool_offset_y.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.zero_z_button.setText(_translate("offset_dros_xyzac", "ZERO")) + self.zero_z_button.setProperty("rules", _translate("offset_dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("offset_dros_xyzac", "G10 L20 P{ch[0]} Z0.0")) + self.axis_label_z.setText(_translate("offset_dros_xyzac", "Z")) + self.drolabel_work_z.setProperty("inchFormat", _translate("offset_dros_xyzac", "%9.4f")) + self.drolabel_work_z.setProperty("millimeterFormat", _translate("offset_dros_xyzac", "%10.3f")) + self.drolabel_work_z.setProperty("degreeFormat", _translate("offset_dros_xyzac", "%10.2f")) + self.work_offset_z.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.g52_g92_z.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.tool_offset_z.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"url\": \"status:tool_offset\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"tool offset\"}]")) + self.zero_a_button.setText(_translate("offset_dros_xyzac", "ZERO")) + self.zero_a_button.setProperty("rules", _translate("offset_dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_a_button.setProperty("MDICommand", _translate("offset_dros_xyzac", "G10 L20 P{ch[0]} A0.0")) + self.axis_label_a.setText(_translate("offset_dros_xyzac", "A")) + self.drolabel_work_a.setProperty("inchFormat", _translate("offset_dros_xyzac", "%9.4f")) + self.drolabel_work_a.setProperty("millimeterFormat", _translate("offset_dros_xyzac", "%10.3f")) + self.drolabel_work_a.setProperty("degreeFormat", _translate("offset_dros_xyzac", "%10.2f")) + self.work_offset_a.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.g52_g92_a.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.tool_offset_a.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][3])\", \"name\": \"New Rule\"}]")) + self.zero_c_button.setText(_translate("offset_dros_xyzac", "ZERO")) + self.zero_c_button.setProperty("rules", _translate("offset_dros_xyzac", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_c_button.setProperty("MDICommand", _translate("offset_dros_xyzac", "G10 L20 P{ch[0]} C0.0")) + self.axis_label_c.setText(_translate("offset_dros_xyzac", "C")) + self.dro_entry_offset_c.setProperty("inchFormat", _translate("offset_dros_xyzac", "%9.4f")) + self.dro_entry_offset_c.setProperty("millimeterFormat", _translate("offset_dros_xyzac", "%10.3f")) + self.dro_entry_offset_c.setProperty("degreeFormat", _translate("offset_dros_xyzac", "%10.2f")) + self.drolabel_work_c.setProperty("inchFormat", _translate("offset_dros_xyzac", "%9.4f")) + self.drolabel_work_c.setProperty("millimeterFormat", _translate("offset_dros_xyzac", "%10.3f")) + self.drolabel_work_c.setProperty("degreeFormat", _translate("offset_dros_xyzac", "%10.2f")) + self.work_offset_c.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.g52_g92_c.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.tool_offset_c.setProperty("rules", _translate("offset_dros_xyzac", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyzbc_dros/dros_xyzbc.py b/user_dro_display/xyzbc_dros/dros_xyzbc.py new file mode 100644 index 0000000..1a29dfb --- /dev/null +++ b/user_dro_display/xyzbc_dros/dros_xyzbc.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserDRO(QWidget): + def __init__(self, parent=None): + super(UserDRO, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_dro_display/xyzbc_dros/dros_xyzbc.ui b/user_dro_display/xyzbc_dros/dros_xyzbc.ui new file mode 100644 index 0000000..3498520 --- /dev/null +++ b/user_dro_display/xyzbc_dros/dros_xyzbc.ui @@ -0,0 +1,1862 @@ + + + dros_xyzbc + + + + 0 + 0 + 458 + 272 + + + + + 0 + 0 + + + + dros_xyzbc + + + Qt::LeftToRight + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 14pt "Bebas Kai"; +} + + + ALL + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 B0.0 + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + .QFrame{ + border-style: solid; + border-color: rgb(176, 179,172); + border-width: 1px; + border-radius: 4px; + background-color: rgb(90, 90, 90); + padding: -5px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + 5 + + + 7 + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; + padding-left: 6px; +} + + + Qt::AlignCenter + + + [{"channels": [{"url": "status:g5x_index?text", "trigger": true}], "property": "Text", "expression": "ch[0] + ' WORK'\n", "name": "WCS Header"}] + + + + + + + false + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + MACHINE + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 100 + 17 + + + + + 100 + 17 + + + + QLabel{ + color: rgb(238, 238, 236); + font: 16pt "Bebas Kai"; +} + + + DTG + + + Qt::AlignCenter + + + + + + + + + + + 1 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF ALL + + + [{"channels": [{"url": "status:all_axes_homed", "trigger": true}], "property": "Text", "expression": "'HOMED' if ch[0] else 'REF ALL'", "name": "reference_all"}, {"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.all + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + Qt::LeftToRight + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + X + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + 0.000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF X + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:x + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Y + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Y + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:y + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + Z + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF Z + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:z + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + B + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} B0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 3 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF B + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:b + + + + + + + + + 7 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + false + + + + 0 + 0 + + + + + 60 + 40 + + + + + 60 + 40 + + + + Qt::NoFocus + + + MDIButton { + font: 17pt "Bebas Kai"; +} + + + C + + + + :/images/zero.png:/images/zero.png + + + + 20 + 20 + + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} C0.0 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + + Bebas Kai + 17 + 50 + false + false + + + + Qt::ClickFocus + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 100 + 35 + + + + + 100 + 35 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 0 + 0 + + + + + 62 + 40 + + + + + 62 + 40 + + + + Qt::NoFocus + + + QPushButton { + font: 15pt "Bebas Kai"; +} + + + REF C + + + [{"name": "home_prohibit", "property": "Enable", "expression": "not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])", "channels": [{"url": "status:joint.0.homing", "trigger": true}, {"url": "status:joint.1.homing", "trigger": true}, {"url": "status:joint.2.homing", "trigger": true}, {"url": "status:joint.3.homing", "trigger": true}, {"url": "status:joint.4.homing", "trigger": true}]}] + + + machine.home.axis:c + + + + + + + + + + + + + ActionButton + QPushButton +
qtpyvcp.widgets.button_widgets.action_button
+
+ + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyzbc_dros/dros_xyzbc_ui.py b/user_dro_display/xyzbc_dros/dros_xyzbc_ui.py new file mode 100644 index 0000000..30426ed --- /dev/null +++ b/user_dro_display/xyzbc_dros/dros_xyzbc_ui.py @@ -0,0 +1,906 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyzbc_dros/dros_xyzbc.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_dros_xyzbc(object): + def setupUi(self, dros_xyzbc): + dros_xyzbc.setObjectName("dros_xyzbc") + dros_xyzbc.resize(458, 272) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(dros_xyzbc.sizePolicy().hasHeightForWidth()) + dros_xyzbc.setSizePolicy(sizePolicy) + dros_xyzbc.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(dros_xyzbc) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(4) + self.verticalLayout.setObjectName("verticalLayout") + self.widget_xyzbc = QtWidgets.QWidget(dros_xyzbc) + self.widget_xyzbc.setObjectName("widget_xyzbc") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget_xyzbc) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_4.setSpacing(4) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.header_layout = QtWidgets.QHBoxLayout() + self.header_layout.setContentsMargins(1, 1, 1, 1) + self.header_layout.setSpacing(7) + self.header_layout.setObjectName("header_layout") + self.zero_all_button = MDIButton(self.widget_xyzbc) + self.zero_all_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_all_button.sizePolicy().hasHeightForWidth()) + self.zero_all_button.setSizePolicy(sizePolicy) + self.zero_all_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_all_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_all_button.setStyleSheet("MDIButton {\n" +" font: 14pt \"Bebas Kai\";\n" +"}") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/images/zero.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.zero_all_button.setIcon(icon) + self.zero_all_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_all_button.setObjectName("zero_all_button") + self.header_layout.addWidget(self.zero_all_button) + self.frame = QtWidgets.QFrame(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy) + self.frame.setMinimumSize(QtCore.QSize(0, 40)) + self.frame.setMaximumSize(QtCore.QSize(16777215, 40)) + self.frame.setStyleSheet(".QFrame{\n" +" border-style: solid;\n" +" border-color: rgb(176, 179,172);\n" +" border-width: 1px;\n" +" border-radius: 4px;\n" +" background-color: rgb(90, 90, 90);\n" +" padding: -5px;\n" +"}") + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.horizontalLayout_103 = QtWidgets.QHBoxLayout(self.frame) + self.horizontalLayout_103.setContentsMargins(5, -1, 7, -1) + self.horizontalLayout_103.setSpacing(8) + self.horizontalLayout_103.setObjectName("horizontalLayout_103") + self.work_column_header = StatusLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_column_header.sizePolicy().hasHeightForWidth()) + self.work_column_header.setSizePolicy(sizePolicy) + self.work_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.work_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.work_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +" padding-left: 6px;\n" +"}") + self.work_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.work_column_header.setObjectName("work_column_header") + self.horizontalLayout_103.addWidget(self.work_column_header) + self.machine_column_header = QtWidgets.QLabel(self.frame) + self.machine_column_header.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.machine_column_header.sizePolicy().hasHeightForWidth()) + self.machine_column_header.setSizePolicy(sizePolicy) + self.machine_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.machine_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.machine_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.machine_column_header.setObjectName("machine_column_header") + self.horizontalLayout_103.addWidget(self.machine_column_header) + self.dtg_column_header = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dtg_column_header.sizePolicy().hasHeightForWidth()) + self.dtg_column_header.setSizePolicy(sizePolicy) + self.dtg_column_header.setMinimumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setMaximumSize(QtCore.QSize(100, 17)) + self.dtg_column_header.setStyleSheet("QLabel{\n" +" color: rgb(238, 238, 236);\n" +" font: 16pt \"Bebas Kai\";\n" +"}") + self.dtg_column_header.setAlignment(QtCore.Qt.AlignCenter) + self.dtg_column_header.setObjectName("dtg_column_header") + self.horizontalLayout_103.addWidget(self.dtg_column_header) + self.header_layout.addWidget(self.frame) + self.ref_all_button = ActionButton(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_all_button.sizePolicy().hasHeightForWidth()) + self.ref_all_button.setSizePolicy(sizePolicy) + self.ref_all_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_all_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_all_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_all_button.setObjectName("ref_all_button") + self.header_layout.addWidget(self.ref_all_button) + self.verticalLayout_4.addLayout(self.header_layout) + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.x_axis_dro_layout.setSpacing(7) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(self.widget_xyzbc) + self.zero_x_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_x_button.sizePolicy().hasHeightForWidth()) + self.zero_x_button.setSizePolicy(sizePolicy) + self.zero_x_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setLayoutDirection(QtCore.Qt.LeftToRight) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_x_button.setIcon(icon) + self.zero_x_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.dro_entry_main_x = DROLineEdit(self.widget_xyzbc) + self.dro_entry_main_x.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_x.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_x.setFont(font) + self.dro_entry_main_x.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_x.setProperty("referenceType", 1) + self.dro_entry_main_x.setProperty("axisNumber", 0) + self.dro_entry_main_x.setProperty("latheMode", 0) + self.dro_entry_main_x.setObjectName("dro_entry_main_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_main_x) + self.drolabel_machine_x = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_x.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_x.setSizePolicy(sizePolicy) + self.drolabel_machine_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_x.setProperty("referenceType", 0) + self.drolabel_machine_x.setProperty("axisNumber", 0) + self.drolabel_machine_x.setProperty("latheMode", 0) + self.drolabel_machine_x.setObjectName("drolabel_machine_x") + self.x_axis_dro_layout.addWidget(self.drolabel_machine_x) + self.drolabel_dtg_x = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_x.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_x.setSizePolicy(sizePolicy) + self.drolabel_dtg_x.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_x.setProperty("referenceType", 2) + self.drolabel_dtg_x.setProperty("axisNumber", 0) + self.drolabel_dtg_x.setProperty("latheMode", 0) + self.drolabel_dtg_x.setObjectName("drolabel_dtg_x") + self.x_axis_dro_layout.addWidget(self.drolabel_dtg_x) + self.ref_x_button = ActionButton(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_x_button.sizePolicy().hasHeightForWidth()) + self.ref_x_button.setSizePolicy(sizePolicy) + self.ref_x_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_x_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_x_button.setObjectName("ref_x_button") + self.x_axis_dro_layout.addWidget(self.ref_x_button) + self.verticalLayout_4.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.y_axis_dro_layout.setSpacing(7) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(self.widget_xyzbc) + self.zero_y_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_y_button.sizePolicy().hasHeightForWidth()) + self.zero_y_button.setSizePolicy(sizePolicy) + self.zero_y_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setIcon(icon) + self.zero_y_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.dro_entry_main_y = DROLineEdit(self.widget_xyzbc) + self.dro_entry_main_y.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_y.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_y.setFont(font) + self.dro_entry_main_y.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_y.setProperty("axisNumber", 1) + self.dro_entry_main_y.setObjectName("dro_entry_main_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_main_y) + self.drolabel_machine_y = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_y.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_y.setSizePolicy(sizePolicy) + self.drolabel_machine_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_y.setProperty("referenceType", 0) + self.drolabel_machine_y.setProperty("axisNumber", 1) + self.drolabel_machine_y.setProperty("latheMode", 0) + self.drolabel_machine_y.setObjectName("drolabel_machine_y") + self.y_axis_dro_layout.addWidget(self.drolabel_machine_y) + self.drolabel_dtg_y = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_y.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_y.setSizePolicy(sizePolicy) + self.drolabel_dtg_y.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_y.setProperty("referenceType", 2) + self.drolabel_dtg_y.setProperty("axisNumber", 1) + self.drolabel_dtg_y.setProperty("latheMode", 0) + self.drolabel_dtg_y.setObjectName("drolabel_dtg_y") + self.y_axis_dro_layout.addWidget(self.drolabel_dtg_y) + self.ref_y_button = ActionButton(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_y_button.sizePolicy().hasHeightForWidth()) + self.ref_y_button.setSizePolicy(sizePolicy) + self.ref_y_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_y_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_y_button.setObjectName("ref_y_button") + self.y_axis_dro_layout.addWidget(self.ref_y_button) + self.verticalLayout_4.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.z_axis_dro_layout.setSpacing(7) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(self.widget_xyzbc) + self.zero_z_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_z_button.sizePolicy().hasHeightForWidth()) + self.zero_z_button.setSizePolicy(sizePolicy) + self.zero_z_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setIcon(icon) + self.zero_z_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.dro_entry_main_z = DROLineEdit(self.widget_xyzbc) + self.dro_entry_main_z.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_z.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_z.setFont(font) + self.dro_entry_main_z.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_z.setProperty("axisNumber", 2) + self.dro_entry_main_z.setObjectName("dro_entry_main_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_main_z) + self.drolabel_machine_z = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_z.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_z.setSizePolicy(sizePolicy) + self.drolabel_machine_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_z.setProperty("referenceType", 0) + self.drolabel_machine_z.setProperty("axisNumber", 2) + self.drolabel_machine_z.setProperty("latheMode", 0) + self.drolabel_machine_z.setObjectName("drolabel_machine_z") + self.z_axis_dro_layout.addWidget(self.drolabel_machine_z) + self.drolabel_dtg_z = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_z.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_z.setSizePolicy(sizePolicy) + self.drolabel_dtg_z.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_z.setProperty("referenceType", 2) + self.drolabel_dtg_z.setProperty("axisNumber", 2) + self.drolabel_dtg_z.setProperty("latheMode", 0) + self.drolabel_dtg_z.setObjectName("drolabel_dtg_z") + self.z_axis_dro_layout.addWidget(self.drolabel_dtg_z) + self.ref_z_button = ActionButton(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_z_button.sizePolicy().hasHeightForWidth()) + self.ref_z_button.setSizePolicy(sizePolicy) + self.ref_z_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_z_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_z_button.setObjectName("ref_z_button") + self.z_axis_dro_layout.addWidget(self.ref_z_button) + self.verticalLayout_4.addLayout(self.z_axis_dro_layout) + self.b_axis_dro_layout = QtWidgets.QHBoxLayout() + self.b_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.b_axis_dro_layout.setSpacing(7) + self.b_axis_dro_layout.setObjectName("b_axis_dro_layout") + self.zero_b_button = MDIButton(self.widget_xyzbc) + self.zero_b_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_b_button.sizePolicy().hasHeightForWidth()) + self.zero_b_button.setSizePolicy(sizePolicy) + self.zero_b_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_b_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_b_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_b_button.setIcon(icon) + self.zero_b_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_b_button.setObjectName("zero_b_button") + self.b_axis_dro_layout.addWidget(self.zero_b_button) + self.dro_entry_main_b = DROLineEdit(self.widget_xyzbc) + self.dro_entry_main_b.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_b.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_b.setFont(font) + self.dro_entry_main_b.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_b.setProperty("referenceType", 1) + self.dro_entry_main_b.setProperty("axisNumber", 3) + self.dro_entry_main_b.setProperty("latheMode", 0) + self.dro_entry_main_b.setObjectName("dro_entry_main_b") + self.b_axis_dro_layout.addWidget(self.dro_entry_main_b) + self.drolabel_machine_b = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_b.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_b.setSizePolicy(sizePolicy) + self.drolabel_machine_b.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_b.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_b.setProperty("referenceType", 0) + self.drolabel_machine_b.setProperty("axisNumber", 3) + self.drolabel_machine_b.setProperty("latheMode", 0) + self.drolabel_machine_b.setObjectName("drolabel_machine_b") + self.b_axis_dro_layout.addWidget(self.drolabel_machine_b) + self.drolabel_dtg_b = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_b.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_b.setSizePolicy(sizePolicy) + self.drolabel_dtg_b.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_b.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_b.setProperty("referenceType", 2) + self.drolabel_dtg_b.setProperty("axisNumber", 3) + self.drolabel_dtg_b.setProperty("latheMode", 0) + self.drolabel_dtg_b.setObjectName("drolabel_dtg_b") + self.b_axis_dro_layout.addWidget(self.drolabel_dtg_b) + self.ref_b_button = ActionButton(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_b_button.sizePolicy().hasHeightForWidth()) + self.ref_b_button.setSizePolicy(sizePolicy) + self.ref_b_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_b_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_b_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_b_button.setObjectName("ref_b_button") + self.b_axis_dro_layout.addWidget(self.ref_b_button) + self.verticalLayout_4.addLayout(self.b_axis_dro_layout) + self.c_axis_dro_layout = QtWidgets.QHBoxLayout() + self.c_axis_dro_layout.setContentsMargins(1, 1, 1, 1) + self.c_axis_dro_layout.setSpacing(7) + self.c_axis_dro_layout.setObjectName("c_axis_dro_layout") + self.zero_c_button = MDIButton(self.widget_xyzbc) + self.zero_c_button.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.zero_c_button.sizePolicy().hasHeightForWidth()) + self.zero_c_button.setSizePolicy(sizePolicy) + self.zero_c_button.setMinimumSize(QtCore.QSize(60, 40)) + self.zero_c_button.setMaximumSize(QtCore.QSize(60, 40)) + self.zero_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_c_button.setStyleSheet("MDIButton {\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.zero_c_button.setIcon(icon) + self.zero_c_button.setIconSize(QtCore.QSize(20, 20)) + self.zero_c_button.setObjectName("zero_c_button") + self.c_axis_dro_layout.addWidget(self.zero_c_button) + self.dro_entry_main_c = DROLineEdit(self.widget_xyzbc) + self.dro_entry_main_c.setMinimumSize(QtCore.QSize(100, 35)) + self.dro_entry_main_c.setMaximumSize(QtCore.QSize(100, 35)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_main_c.setFont(font) + self.dro_entry_main_c.setFocusPolicy(QtCore.Qt.ClickFocus) + self.dro_entry_main_c.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_main_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_main_c.setProperty("referenceType", 1) + self.dro_entry_main_c.setProperty("axisNumber", 4) + self.dro_entry_main_c.setProperty("latheMode", 0) + self.dro_entry_main_c.setObjectName("dro_entry_main_c") + self.c_axis_dro_layout.addWidget(self.dro_entry_main_c) + self.drolabel_machine_c = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_machine_c.sizePolicy().hasHeightForWidth()) + self.drolabel_machine_c.setSizePolicy(sizePolicy) + self.drolabel_machine_c.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_c.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_machine_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_machine_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_machine_c.setProperty("referenceType", 0) + self.drolabel_machine_c.setProperty("axisNumber", 4) + self.drolabel_machine_c.setProperty("latheMode", 0) + self.drolabel_machine_c.setObjectName("drolabel_machine_c") + self.c_axis_dro_layout.addWidget(self.drolabel_machine_c) + self.drolabel_dtg_c = DROLabel(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_dtg_c.sizePolicy().hasHeightForWidth()) + self.drolabel_dtg_c.setSizePolicy(sizePolicy) + self.drolabel_dtg_c.setMinimumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_c.setMaximumSize(QtCore.QSize(100, 35)) + self.drolabel_dtg_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}") + self.drolabel_dtg_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_dtg_c.setProperty("referenceType", 2) + self.drolabel_dtg_c.setProperty("axisNumber", 4) + self.drolabel_dtg_c.setProperty("latheMode", 0) + self.drolabel_dtg_c.setObjectName("drolabel_dtg_c") + self.c_axis_dro_layout.addWidget(self.drolabel_dtg_c) + self.ref_c_button = ActionButton(self.widget_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ref_c_button.sizePolicy().hasHeightForWidth()) + self.ref_c_button.setSizePolicy(sizePolicy) + self.ref_c_button.setMinimumSize(QtCore.QSize(62, 40)) + self.ref_c_button.setMaximumSize(QtCore.QSize(62, 40)) + self.ref_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.ref_c_button.setStyleSheet("QPushButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.ref_c_button.setObjectName("ref_c_button") + self.c_axis_dro_layout.addWidget(self.ref_c_button) + self.verticalLayout_4.addLayout(self.c_axis_dro_layout) + self.verticalLayout.addWidget(self.widget_xyzbc) + + self.retranslateUi(dros_xyzbc) + QtCore.QMetaObject.connectSlotsByName(dros_xyzbc) + + def retranslateUi(self, dros_xyzbc): + _translate = QtCore.QCoreApplication.translate + dros_xyzbc.setWindowTitle(_translate("dros_xyzbc", "dros_xyzbc")) + self.zero_all_button.setText(_translate("dros_xyzbc", "ALL")) + self.zero_all_button.setProperty("rules", _translate("dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_all_button.setProperty("MDICommand", _translate("dros_xyzbc", "G10 L20 P{ch[0]} X0.0 Y0.0 Z0.0 A0.0 B0.0")) + self.work_column_header.setProperty("rules", _translate("dros_xyzbc", "[{\"channels\": [{\"url\": \"status:g5x_index?text\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"ch[0] + \' WORK\'\\n\", \"name\": \"WCS Header\"}]")) + self.machine_column_header.setText(_translate("dros_xyzbc", "MACHINE")) + self.dtg_column_header.setText(_translate("dros_xyzbc", "DTG")) + self.ref_all_button.setText(_translate("dros_xyzbc", "REF ALL")) + self.ref_all_button.setProperty("rules", _translate("dros_xyzbc", "[{\"channels\": [{\"url\": \"status:all_axes_homed\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\'HOMED\' if ch[0] else \'REF ALL\'\", \"name\": \"reference_all\"}, {\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_all_button.setProperty("actionName", _translate("dros_xyzbc", "machine.home.all")) + self.zero_x_button.setText(_translate("dros_xyzbc", "X")) + self.zero_x_button.setProperty("rules", _translate("dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("dros_xyzbc", "G10 L20 P{ch[0]} X0.0")) + self.dro_entry_main_x.setText(_translate("dros_xyzbc", " 0.000")) + self.dro_entry_main_x.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.dro_entry_main_x.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.dro_entry_main_x.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_machine_x.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_machine_x.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_machine_x.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_dtg_x.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_dtg_x.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_dtg_x.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.ref_x_button.setText(_translate("dros_xyzbc", "REF X")) + self.ref_x_button.setProperty("rules", _translate("dros_xyzbc", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_x_button.setProperty("actionName", _translate("dros_xyzbc", "machine.home.axis:x")) + self.zero_y_button.setText(_translate("dros_xyzbc", "Y")) + self.zero_y_button.setProperty("rules", _translate("dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("dros_xyzbc", "G10 L20 P{ch[0]} Y0.0")) + self.drolabel_machine_y.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_machine_y.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_machine_y.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_dtg_y.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_dtg_y.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_dtg_y.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.ref_y_button.setText(_translate("dros_xyzbc", "REF Y")) + self.ref_y_button.setProperty("rules", _translate("dros_xyzbc", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_y_button.setProperty("actionName", _translate("dros_xyzbc", "machine.home.axis:y")) + self.zero_z_button.setText(_translate("dros_xyzbc", "Z")) + self.zero_z_button.setProperty("rules", _translate("dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("dros_xyzbc", "G10 L20 P{ch[0]} Z0.0")) + self.drolabel_machine_z.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_machine_z.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_machine_z.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_dtg_z.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_dtg_z.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_dtg_z.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.ref_z_button.setText(_translate("dros_xyzbc", "REF Z")) + self.ref_z_button.setProperty("rules", _translate("dros_xyzbc", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_z_button.setProperty("actionName", _translate("dros_xyzbc", "machine.home.axis:z")) + self.zero_b_button.setText(_translate("dros_xyzbc", "B")) + self.zero_b_button.setProperty("rules", _translate("dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_b_button.setProperty("MDICommand", _translate("dros_xyzbc", "G10 L20 P{ch[0]} B0.0")) + self.dro_entry_main_b.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.dro_entry_main_b.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.dro_entry_main_b.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_machine_b.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_machine_b.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_machine_b.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_dtg_b.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_dtg_b.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_dtg_b.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.ref_b_button.setText(_translate("dros_xyzbc", "REF B")) + self.ref_b_button.setProperty("rules", _translate("dros_xyzbc", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_b_button.setProperty("actionName", _translate("dros_xyzbc", "machine.home.axis:b")) + self.zero_c_button.setText(_translate("dros_xyzbc", "C")) + self.zero_c_button.setProperty("rules", _translate("dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_c_button.setProperty("MDICommand", _translate("dros_xyzbc", "G10 L20 P{ch[0]} C0.0")) + self.dro_entry_main_c.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.dro_entry_main_c.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.dro_entry_main_c.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_machine_c.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_machine_c.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_machine_c.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.drolabel_dtg_c.setProperty("inchFormat", _translate("dros_xyzbc", "%9.4f")) + self.drolabel_dtg_c.setProperty("millimeterFormat", _translate("dros_xyzbc", "%10.3f")) + self.drolabel_dtg_c.setProperty("degreeFormat", _translate("dros_xyzbc", "%10.2f")) + self.ref_c_button.setText(_translate("dros_xyzbc", "REF C")) + self.ref_c_button.setProperty("rules", _translate("dros_xyzbc", "[{\"name\": \"home_prohibit\", \"property\": \"Enable\", \"expression\": \"not (ch[0] or ch[1] or ch[2] or ch[3] or ch[4])\", \"channels\": [{\"url\": \"status:joint.0.homing\", \"trigger\": true}, {\"url\": \"status:joint.1.homing\", \"trigger\": true}, {\"url\": \"status:joint.2.homing\", \"trigger\": true}, {\"url\": \"status:joint.3.homing\", \"trigger\": true}, {\"url\": \"status:joint.4.homing\", \"trigger\": true}]}]")) + self.ref_c_button.setProperty("actionName", _translate("dros_xyzbc", "machine.home.axis:c")) +from qtpyvcp.widgets.button_widgets.action_button import ActionButton +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_dro_display/xyzbc_dros/offset_dros_xyzbc.ui b/user_dro_display/xyzbc_dros/offset_dros_xyzbc.ui new file mode 100644 index 0000000..6f994d7 --- /dev/null +++ b/user_dro_display/xyzbc_dros/offset_dros_xyzbc.ui @@ -0,0 +1,1702 @@ + + + offset_dros_xyzbc + + + + 0 + 0 + 493 + 280 + + + + + 0 + 0 + + + + offset_dros_xyzbc + + + Qt::LeftToRight + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} X0.0 + + + + + + + + 0 + 0 + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + X + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 0 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][0])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Y0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Y + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 1 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][1])", "name": "New Rule"}] + + + + + + + + + 12 + + + 4 + + + 4 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} Z0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + Z + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 2 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 2 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"url": "status:tool_offset", "trigger": true}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][2])", "name": "tool offset"}] + + + + + + + + + 12 + + + 6 + + + 6 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} B0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + B + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 4 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + + 12 + + + 6 + + + 6 + + + + + false + + + + 55 + 38 + + + + + 55 + 38 + + + + Qt::NoFocus + + + MDIButton { + font: 15pt "Bebas Kai"; +} + + + ZERO + + + [ + { + "channels": [ + { + "url": "status:g5x_index", + "trigger": true, + "type": "int" + } + ], + "expression": "", + "name": "G5x Index", + "property": "None" + } +] + + + G10 L20 P{ch[0]} C0.0 + + + + + + + + 45 + 35 + + + + + 45 + 35 + + + + QLabel{ + border-style: solid; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: rgb(238, 238, 236); + font: 18pt "Bebas Kai"; +} + + + C + + + Qt::AlignCenter + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + + Bebas Kai + 17 + 50 + false + false + + + + QLineEdit{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + padding-right: 2px; + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + QLabel{ + border-style: transparent; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; + padding-right: 2px; +} + +QLabel[style="unhomed"]{ + color: red; +} + +QLabel[style="homing"]{ + color: rgb(196, 160, 0); +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + + + 4 + + + %9.4f + + + %10.3f + + + %10.2f + + + 0 + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g92_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:g5x_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + 1 + 0 + + + + + 0 + 38 + + + + + 16777215 + 38 + + + + StatusLabel{ + border-style: transparant; + border-color: rgb(235, 235, 235); + border-width: 1px; + border-radius: 5px; + color: black; + background: rgb(235, 235, 235); + font: 17pt "Bebas Kai"; +} + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + [{"channels": [{"trigger": true, "type": "tuple", "url": "status:tool_offset"}], "property": "Text", "expression": "\"{:.4f}\".format(ch[0][4])", "name": "New Rule"}] + + + + + + + + + + MDIButton + QPushButton +
qtpyvcp.widgets.button_widgets.mdi_button
+
+ + StatusLabel + QLabel +
qtpyvcp.widgets.display_widgets.status_label
+
+ + DROLabel + QLabel +
qtpyvcp.widgets.display_widgets.dro_label
+
+ + DROLineEdit + QLineEdit +
qtpyvcp.widgets.input_widgets.dro_line_edit
+
+
+ + + + +
diff --git a/user_dro_display/xyzbc_dros/offset_dros_xyzbc_ui.py b/user_dro_display/xyzbc_dros/offset_dros_xyzbc_ui.py new file mode 100644 index 0000000..b3474c5 --- /dev/null +++ b/user_dro_display/xyzbc_dros/offset_dros_xyzbc_ui.py @@ -0,0 +1,913 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_dro_display/xyzbc_dros/offset_dros_xyzbc.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_offset_dros_xyzbc(object): + def setupUi(self, offset_dros_xyzbc): + offset_dros_xyzbc.setObjectName("offset_dros_xyzbc") + offset_dros_xyzbc.resize(493, 280) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(offset_dros_xyzbc.sizePolicy().hasHeightForWidth()) + offset_dros_xyzbc.setSizePolicy(sizePolicy) + offset_dros_xyzbc.setLayoutDirection(QtCore.Qt.LeftToRight) + self.verticalLayout = QtWidgets.QVBoxLayout(offset_dros_xyzbc) + self.verticalLayout.setContentsMargins(9, 9, 9, 9) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.x_axis_dro_layout = QtWidgets.QHBoxLayout() + self.x_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.x_axis_dro_layout.setSpacing(12) + self.x_axis_dro_layout.setObjectName("x_axis_dro_layout") + self.zero_x_button = MDIButton(offset_dros_xyzbc) + self.zero_x_button.setEnabled(False) + self.zero_x_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_x_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_x_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_x_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_x_button.setObjectName("zero_x_button") + self.x_axis_dro_layout.addWidget(self.zero_x_button) + self.axis_label_x = QtWidgets.QLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.axis_label_x.sizePolicy().hasHeightForWidth()) + self.axis_label_x.setSizePolicy(sizePolicy) + self.axis_label_x.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_x.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_x.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_x.setObjectName("axis_label_x") + self.x_axis_dro_layout.addWidget(self.axis_label_x) + self.dro_entry_offset_x = DROLineEdit(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_x.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_x.setSizePolicy(sizePolicy) + self.dro_entry_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_x.setFont(font) + self.dro_entry_offset_x.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_x.setObjectName("dro_entry_offset_x") + self.x_axis_dro_layout.addWidget(self.dro_entry_offset_x) + self.drolabel_work_x = DROLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_x.sizePolicy().hasHeightForWidth()) + self.drolabel_work_x.setSizePolicy(sizePolicy) + self.drolabel_work_x.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_x.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_x.setProperty("referenceType", 0) + self.drolabel_work_x.setProperty("axisNumber", 0) + self.drolabel_work_x.setProperty("latheMode", 0) + self.drolabel_work_x.setObjectName("drolabel_work_x") + self.x_axis_dro_layout.addWidget(self.drolabel_work_x) + self.work_offset_x = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_x.sizePolicy().hasHeightForWidth()) + self.work_offset_x.setSizePolicy(sizePolicy) + self.work_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_x.setObjectName("work_offset_x") + self.x_axis_dro_layout.addWidget(self.work_offset_x) + self.g52_g92_x = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_x.sizePolicy().hasHeightForWidth()) + self.g52_g92_x.setSizePolicy(sizePolicy) + self.g52_g92_x.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_x.setObjectName("g52_g92_x") + self.x_axis_dro_layout.addWidget(self.g52_g92_x) + self.tool_offset_x = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_x.sizePolicy().hasHeightForWidth()) + self.tool_offset_x.setSizePolicy(sizePolicy) + self.tool_offset_x.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_x.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_x.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_x.setObjectName("tool_offset_x") + self.x_axis_dro_layout.addWidget(self.tool_offset_x) + self.verticalLayout.addLayout(self.x_axis_dro_layout) + self.y_axis_dro_layout = QtWidgets.QHBoxLayout() + self.y_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.y_axis_dro_layout.setSpacing(12) + self.y_axis_dro_layout.setObjectName("y_axis_dro_layout") + self.zero_y_button = MDIButton(offset_dros_xyzbc) + self.zero_y_button.setEnabled(False) + self.zero_y_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_y_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_y_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_y_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_y_button.setObjectName("zero_y_button") + self.y_axis_dro_layout.addWidget(self.zero_y_button) + self.axis_label_y = QtWidgets.QLabel(offset_dros_xyzbc) + self.axis_label_y.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_y.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_y.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_y.setObjectName("axis_label_y") + self.y_axis_dro_layout.addWidget(self.axis_label_y) + self.dro_entry_offset_y = DROLineEdit(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_y.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_y.setSizePolicy(sizePolicy) + self.dro_entry_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_y.setFont(font) + self.dro_entry_offset_y.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_y.setProperty("axisNumber", 1) + self.dro_entry_offset_y.setObjectName("dro_entry_offset_y") + self.y_axis_dro_layout.addWidget(self.dro_entry_offset_y) + self.drolabel_work_y = DROLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_y.sizePolicy().hasHeightForWidth()) + self.drolabel_work_y.setSizePolicy(sizePolicy) + self.drolabel_work_y.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_y.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_y.setProperty("referenceType", 0) + self.drolabel_work_y.setProperty("axisNumber", 1) + self.drolabel_work_y.setProperty("latheMode", 0) + self.drolabel_work_y.setObjectName("drolabel_work_y") + self.y_axis_dro_layout.addWidget(self.drolabel_work_y) + self.work_offset_y = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_y.sizePolicy().hasHeightForWidth()) + self.work_offset_y.setSizePolicy(sizePolicy) + self.work_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_y.setObjectName("work_offset_y") + self.y_axis_dro_layout.addWidget(self.work_offset_y) + self.g52_g92_y = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_y.sizePolicy().hasHeightForWidth()) + self.g52_g92_y.setSizePolicy(sizePolicy) + self.g52_g92_y.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_y.setObjectName("g52_g92_y") + self.y_axis_dro_layout.addWidget(self.g52_g92_y) + self.tool_offset_y = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_y.sizePolicy().hasHeightForWidth()) + self.tool_offset_y.setSizePolicy(sizePolicy) + self.tool_offset_y.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_y.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_y.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_y.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_y.setObjectName("tool_offset_y") + self.y_axis_dro_layout.addWidget(self.tool_offset_y) + self.verticalLayout.addLayout(self.y_axis_dro_layout) + self.z_axis_dro_layout = QtWidgets.QHBoxLayout() + self.z_axis_dro_layout.setContentsMargins(-1, 4, -1, 4) + self.z_axis_dro_layout.setSpacing(12) + self.z_axis_dro_layout.setObjectName("z_axis_dro_layout") + self.zero_z_button = MDIButton(offset_dros_xyzbc) + self.zero_z_button.setEnabled(False) + self.zero_z_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_z_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_z_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_z_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_z_button.setObjectName("zero_z_button") + self.z_axis_dro_layout.addWidget(self.zero_z_button) + self.axis_label_z = QtWidgets.QLabel(offset_dros_xyzbc) + self.axis_label_z.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_z.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_z.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_z.setObjectName("axis_label_z") + self.z_axis_dro_layout.addWidget(self.axis_label_z) + self.dro_entry_offset_z = DROLineEdit(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_z.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_z.setSizePolicy(sizePolicy) + self.dro_entry_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_z.setFont(font) + self.dro_entry_offset_z.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_z.setProperty("axisNumber", 2) + self.dro_entry_offset_z.setObjectName("dro_entry_offset_z") + self.z_axis_dro_layout.addWidget(self.dro_entry_offset_z) + self.drolabel_work_z = DROLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_z.sizePolicy().hasHeightForWidth()) + self.drolabel_work_z.setSizePolicy(sizePolicy) + self.drolabel_work_z.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_z.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_z.setProperty("referenceType", 0) + self.drolabel_work_z.setProperty("axisNumber", 2) + self.drolabel_work_z.setProperty("latheMode", 0) + self.drolabel_work_z.setObjectName("drolabel_work_z") + self.z_axis_dro_layout.addWidget(self.drolabel_work_z) + self.work_offset_z = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_z.sizePolicy().hasHeightForWidth()) + self.work_offset_z.setSizePolicy(sizePolicy) + self.work_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_z.setObjectName("work_offset_z") + self.z_axis_dro_layout.addWidget(self.work_offset_z) + self.g52_g92_z = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_z.sizePolicy().hasHeightForWidth()) + self.g52_g92_z.setSizePolicy(sizePolicy) + self.g52_g92_z.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_z.setObjectName("g52_g92_z") + self.z_axis_dro_layout.addWidget(self.g52_g92_z) + self.tool_offset_z = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_z.sizePolicy().hasHeightForWidth()) + self.tool_offset_z.setSizePolicy(sizePolicy) + self.tool_offset_z.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_z.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_z.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_z.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_z.setObjectName("tool_offset_z") + self.z_axis_dro_layout.addWidget(self.tool_offset_z) + self.verticalLayout.addLayout(self.z_axis_dro_layout) + self.b_axis_dro_layout = QtWidgets.QHBoxLayout() + self.b_axis_dro_layout.setContentsMargins(-1, 6, -1, 6) + self.b_axis_dro_layout.setSpacing(12) + self.b_axis_dro_layout.setObjectName("b_axis_dro_layout") + self.zero_b_button = MDIButton(offset_dros_xyzbc) + self.zero_b_button.setEnabled(False) + self.zero_b_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_b_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_b_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_b_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_b_button.setObjectName("zero_b_button") + self.b_axis_dro_layout.addWidget(self.zero_b_button) + self.axis_label_b = QtWidgets.QLabel(offset_dros_xyzbc) + self.axis_label_b.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_b.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_b.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_b.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_b.setObjectName("axis_label_b") + self.b_axis_dro_layout.addWidget(self.axis_label_b) + self.dro_entry_offset_b = DROLineEdit(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_b.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_b.setSizePolicy(sizePolicy) + self.dro_entry_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_b.setFont(font) + self.dro_entry_offset_b.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_b.setProperty("axisNumber", 4) + self.dro_entry_offset_b.setObjectName("dro_entry_offset_b") + self.b_axis_dro_layout.addWidget(self.dro_entry_offset_b) + self.drolabel_work_b = DROLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_b.sizePolicy().hasHeightForWidth()) + self.drolabel_work_b.setSizePolicy(sizePolicy) + self.drolabel_work_b.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_b.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_b.setProperty("referenceType", 0) + self.drolabel_work_b.setProperty("axisNumber", 4) + self.drolabel_work_b.setProperty("latheMode", 0) + self.drolabel_work_b.setObjectName("drolabel_work_b") + self.b_axis_dro_layout.addWidget(self.drolabel_work_b) + self.work_offset_b = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_b.sizePolicy().hasHeightForWidth()) + self.work_offset_b.setSizePolicy(sizePolicy) + self.work_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_b.setObjectName("work_offset_b") + self.b_axis_dro_layout.addWidget(self.work_offset_b) + self.g52_g92_b = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_b.sizePolicy().hasHeightForWidth()) + self.g52_g92_b.setSizePolicy(sizePolicy) + self.g52_g92_b.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_b.setObjectName("g52_g92_b") + self.b_axis_dro_layout.addWidget(self.g52_g92_b) + self.tool_offset_b = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_b.sizePolicy().hasHeightForWidth()) + self.tool_offset_b.setSizePolicy(sizePolicy) + self.tool_offset_b.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_b.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_b.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_b.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_b.setObjectName("tool_offset_b") + self.b_axis_dro_layout.addWidget(self.tool_offset_b) + self.verticalLayout.addLayout(self.b_axis_dro_layout) + self.c_axis_dro_layout = QtWidgets.QHBoxLayout() + self.c_axis_dro_layout.setContentsMargins(-1, 6, -1, 6) + self.c_axis_dro_layout.setSpacing(12) + self.c_axis_dro_layout.setObjectName("c_axis_dro_layout") + self.zero_c_button = MDIButton(offset_dros_xyzbc) + self.zero_c_button.setEnabled(False) + self.zero_c_button.setMinimumSize(QtCore.QSize(55, 38)) + self.zero_c_button.setMaximumSize(QtCore.QSize(55, 38)) + self.zero_c_button.setFocusPolicy(QtCore.Qt.NoFocus) + self.zero_c_button.setStyleSheet("MDIButton {\n" +" font: 15pt \"Bebas Kai\";\n" +"}") + self.zero_c_button.setObjectName("zero_c_button") + self.c_axis_dro_layout.addWidget(self.zero_c_button) + self.axis_label_c = QtWidgets.QLabel(offset_dros_xyzbc) + self.axis_label_c.setMinimumSize(QtCore.QSize(45, 35)) + self.axis_label_c.setMaximumSize(QtCore.QSize(45, 35)) + self.axis_label_c.setStyleSheet("QLabel{\n" +" border-style: solid;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: rgb(238, 238, 236);\n" +" font: 18pt \"Bebas Kai\";\n" +"}") + self.axis_label_c.setAlignment(QtCore.Qt.AlignCenter) + self.axis_label_c.setObjectName("axis_label_c") + self.c_axis_dro_layout.addWidget(self.axis_label_c) + self.dro_entry_offset_c = DROLineEdit(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.dro_entry_offset_c.sizePolicy().hasHeightForWidth()) + self.dro_entry_offset_c.setSizePolicy(sizePolicy) + self.dro_entry_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.dro_entry_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + font = QtGui.QFont() + font.setFamily("Bebas Kai") + font.setPointSize(17) + font.setBold(False) + font.setItalic(False) + font.setWeight(50) + self.dro_entry_offset_c.setFont(font) + self.dro_entry_offset_c.setStyleSheet("QLineEdit{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" padding-right: 2px;\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.dro_entry_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.dro_entry_offset_c.setProperty("referenceType", 1) + self.dro_entry_offset_c.setProperty("axisNumber", 4) + self.dro_entry_offset_c.setProperty("latheMode", 0) + self.dro_entry_offset_c.setObjectName("dro_entry_offset_c") + self.c_axis_dro_layout.addWidget(self.dro_entry_offset_c) + self.drolabel_work_c = DROLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.drolabel_work_c.sizePolicy().hasHeightForWidth()) + self.drolabel_work_c.setSizePolicy(sizePolicy) + self.drolabel_work_c.setMinimumSize(QtCore.QSize(0, 38)) + self.drolabel_work_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.drolabel_work_c.setStyleSheet("QLabel{\n" +" border-style: transparent;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +" padding-right: 2px;\n" +"}\n" +"\n" +"QLabel[style=\"unhomed\"]{\n" +" color: red;\n" +"}\n" +"\n" +"QLabel[style=\"homing\"]{\n" +" color: rgb(196, 160, 0);\n" +"}") + self.drolabel_work_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.drolabel_work_c.setProperty("referenceType", 0) + self.drolabel_work_c.setProperty("axisNumber", 4) + self.drolabel_work_c.setProperty("latheMode", 0) + self.drolabel_work_c.setObjectName("drolabel_work_c") + self.c_axis_dro_layout.addWidget(self.drolabel_work_c) + self.work_offset_c = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.work_offset_c.sizePolicy().hasHeightForWidth()) + self.work_offset_c.setSizePolicy(sizePolicy) + self.work_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.work_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.work_offset_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.work_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.work_offset_c.setObjectName("work_offset_c") + self.c_axis_dro_layout.addWidget(self.work_offset_c) + self.g52_g92_c = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.g52_g92_c.sizePolicy().hasHeightForWidth()) + self.g52_g92_c.setSizePolicy(sizePolicy) + self.g52_g92_c.setMinimumSize(QtCore.QSize(0, 38)) + self.g52_g92_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.g52_g92_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.g52_g92_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.g52_g92_c.setObjectName("g52_g92_c") + self.c_axis_dro_layout.addWidget(self.g52_g92_c) + self.tool_offset_c = StatusLabel(offset_dros_xyzbc) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tool_offset_c.sizePolicy().hasHeightForWidth()) + self.tool_offset_c.setSizePolicy(sizePolicy) + self.tool_offset_c.setMinimumSize(QtCore.QSize(0, 38)) + self.tool_offset_c.setMaximumSize(QtCore.QSize(16777215, 38)) + self.tool_offset_c.setStyleSheet("StatusLabel{\n" +" border-style: transparant;\n" +" border-color: rgb(235, 235, 235);\n" +" border-width: 1px;\n" +" border-radius: 5px;\n" +" color: black;\n" +" background: rgb(235, 235, 235);\n" +" font: 17pt \"Bebas Kai\";\n" +"}") + self.tool_offset_c.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.tool_offset_c.setObjectName("tool_offset_c") + self.c_axis_dro_layout.addWidget(self.tool_offset_c) + self.verticalLayout.addLayout(self.c_axis_dro_layout) + + self.retranslateUi(offset_dros_xyzbc) + QtCore.QMetaObject.connectSlotsByName(offset_dros_xyzbc) + + def retranslateUi(self, offset_dros_xyzbc): + _translate = QtCore.QCoreApplication.translate + offset_dros_xyzbc.setWindowTitle(_translate("offset_dros_xyzbc", "offset_dros_xyzbc")) + self.zero_x_button.setText(_translate("offset_dros_xyzbc", "ZERO")) + self.zero_x_button.setProperty("rules", _translate("offset_dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_x_button.setProperty("MDICommand", _translate("offset_dros_xyzbc", "G10 L20 P{ch[0]} X0.0")) + self.axis_label_x.setText(_translate("offset_dros_xyzbc", "X")) + self.drolabel_work_x.setProperty("inchFormat", _translate("offset_dros_xyzbc", "%9.4f")) + self.drolabel_work_x.setProperty("millimeterFormat", _translate("offset_dros_xyzbc", "%10.3f")) + self.drolabel_work_x.setProperty("degreeFormat", _translate("offset_dros_xyzbc", "%10.2f")) + self.work_offset_x.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.g52_g92_x.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.tool_offset_x.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][0])\", \"name\": \"New Rule\"}]")) + self.zero_y_button.setText(_translate("offset_dros_xyzbc", "ZERO")) + self.zero_y_button.setProperty("rules", _translate("offset_dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_y_button.setProperty("MDICommand", _translate("offset_dros_xyzbc", "G10 L20 P{ch[0]} Y0.0")) + self.axis_label_y.setText(_translate("offset_dros_xyzbc", "Y")) + self.drolabel_work_y.setProperty("inchFormat", _translate("offset_dros_xyzbc", "%9.4f")) + self.drolabel_work_y.setProperty("millimeterFormat", _translate("offset_dros_xyzbc", "%10.3f")) + self.drolabel_work_y.setProperty("degreeFormat", _translate("offset_dros_xyzbc", "%10.2f")) + self.work_offset_y.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.g52_g92_y.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.tool_offset_y.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][1])\", \"name\": \"New Rule\"}]")) + self.zero_z_button.setText(_translate("offset_dros_xyzbc", "ZERO")) + self.zero_z_button.setProperty("rules", _translate("offset_dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_z_button.setProperty("MDICommand", _translate("offset_dros_xyzbc", "G10 L20 P{ch[0]} Z0.0")) + self.axis_label_z.setText(_translate("offset_dros_xyzbc", "Z")) + self.drolabel_work_z.setProperty("inchFormat", _translate("offset_dros_xyzbc", "%9.4f")) + self.drolabel_work_z.setProperty("millimeterFormat", _translate("offset_dros_xyzbc", "%10.3f")) + self.drolabel_work_z.setProperty("degreeFormat", _translate("offset_dros_xyzbc", "%10.2f")) + self.work_offset_z.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.g52_g92_z.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"New Rule\"}]")) + self.tool_offset_z.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"url\": \"status:tool_offset\", \"trigger\": true}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][2])\", \"name\": \"tool offset\"}]")) + self.zero_b_button.setText(_translate("offset_dros_xyzbc", "ZERO")) + self.zero_b_button.setProperty("rules", _translate("offset_dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_b_button.setProperty("MDICommand", _translate("offset_dros_xyzbc", "G10 L20 P{ch[0]} B0.0")) + self.axis_label_b.setText(_translate("offset_dros_xyzbc", "B")) + self.drolabel_work_b.setProperty("inchFormat", _translate("offset_dros_xyzbc", "%9.4f")) + self.drolabel_work_b.setProperty("millimeterFormat", _translate("offset_dros_xyzbc", "%10.3f")) + self.drolabel_work_b.setProperty("degreeFormat", _translate("offset_dros_xyzbc", "%10.2f")) + self.work_offset_b.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.g52_g92_b.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.tool_offset_b.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.zero_c_button.setText(_translate("offset_dros_xyzbc", "ZERO")) + self.zero_c_button.setProperty("rules", _translate("offset_dros_xyzbc", "[\n" +" {\n" +" \"channels\": [\n" +" {\n" +" \"url\": \"status:g5x_index\",\n" +" \"trigger\": true,\n" +" \"type\": \"int\"\n" +" }\n" +" ],\n" +" \"expression\": \"\",\n" +" \"name\": \"G5x Index\",\n" +" \"property\": \"None\"\n" +" }\n" +"]")) + self.zero_c_button.setProperty("MDICommand", _translate("offset_dros_xyzbc", "G10 L20 P{ch[0]} C0.0")) + self.axis_label_c.setText(_translate("offset_dros_xyzbc", "C")) + self.dro_entry_offset_c.setProperty("inchFormat", _translate("offset_dros_xyzbc", "%9.4f")) + self.dro_entry_offset_c.setProperty("millimeterFormat", _translate("offset_dros_xyzbc", "%10.3f")) + self.dro_entry_offset_c.setProperty("degreeFormat", _translate("offset_dros_xyzbc", "%10.2f")) + self.drolabel_work_c.setProperty("inchFormat", _translate("offset_dros_xyzbc", "%9.4f")) + self.drolabel_work_c.setProperty("millimeterFormat", _translate("offset_dros_xyzbc", "%10.3f")) + self.drolabel_work_c.setProperty("degreeFormat", _translate("offset_dros_xyzbc", "%10.2f")) + self.work_offset_c.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g92_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.g52_g92_c.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:g5x_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) + self.tool_offset_c.setProperty("rules", _translate("offset_dros_xyzbc", "[{\"channels\": [{\"trigger\": true, \"type\": \"tuple\", \"url\": \"status:tool_offset\"}], \"property\": \"Text\", \"expression\": \"\\\"{:.4f}\\\".format(ch[0][4])\", \"name\": \"New Rule\"}]")) +from qtpyvcp.widgets.button_widgets.mdi_button import MDIButton +from qtpyvcp.widgets.display_widgets.dro_label import DROLabel +from qtpyvcp.widgets.display_widgets.status_label import StatusLabel +from qtpyvcp.widgets.input_widgets.dro_line_edit import DROLineEdit +import probe_basic_rc diff --git a/user_tabs/template_main/template_main.py b/user_tabs/template_main/template_main.py new file mode 100644 index 0000000..1bcd807 --- /dev/null +++ b/user_tabs/template_main/template_main.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserTab(QWidget): + def __init__(self, parent=None): + super(UserTab, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_tabs/template_main/template_main.ui b/user_tabs/template_main/template_main.ui new file mode 100644 index 0000000..e9c3969 --- /dev/null +++ b/user_tabs/template_main/template_main.ui @@ -0,0 +1,28 @@ + + + USER + + + + 0 + 0 + 1645 + 619 + + + + + 1645 + 619 + + + + USER MAIN + + + false + + + + + diff --git a/user_tabs/template_main/template_main_ui.py b/user_tabs/template_main/template_main_ui.py new file mode 100644 index 0000000..91fe4f0 --- /dev/null +++ b/user_tabs/template_main/template_main_ui.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_tabs/template_main/template_main.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_USER(object): + def setupUi(self, USER): + USER.setObjectName("USER") + USER.resize(1645, 619) + USER.setMaximumSize(QtCore.QSize(1645, 619)) + USER.setProperty("sidebar", False) + + self.retranslateUi(USER) + QtCore.QMetaObject.connectSlotsByName(USER) + + def retranslateUi(self, USER): + _translate = QtCore.QCoreApplication.translate + USER.setWindowTitle(_translate("USER", "USER MAIN")) diff --git a/user_tabs/template_sidebar/template_sidebar.py b/user_tabs/template_sidebar/template_sidebar.py new file mode 100644 index 0000000..1bcd807 --- /dev/null +++ b/user_tabs/template_sidebar/template_sidebar.py @@ -0,0 +1,23 @@ +import os +import linuxcnc + +from qtpy import uic +from qtpy.QtCore import Qt +from qtpy.QtWidgets import QWidget + +from qtpyvcp.plugins import getPlugin +from qtpyvcp.utilities import logger + +LOG = logger.getLogger(__name__) + +STATUS = getPlugin('status') +TOOL_TABLE = getPlugin('tooltable') + +INI_FILE = linuxcnc.ini(os.getenv('INI_FILE_NAME')) + + +class UserTab(QWidget): + def __init__(self, parent=None): + super(UserTab, self).__init__(parent) + ui_file = os.path.splitext(os.path.basename(__file__))[0] + ".ui" + uic.loadUi(os.path.join(os.path.dirname(__file__), ui_file), self) diff --git a/user_tabs/template_sidebar/template_sidebar.ui b/user_tabs/template_sidebar/template_sidebar.ui new file mode 100644 index 0000000..6b28ca9 --- /dev/null +++ b/user_tabs/template_sidebar/template_sidebar.ui @@ -0,0 +1,28 @@ + + + USER + + + + 0 + 0 + 179 + 511 + + + + + 179 + 511 + + + + Sidebar User Tab + + + true + + + + + diff --git a/user_tabs/template_sidebar/template_sidebar_ui.py b/user_tabs/template_sidebar/template_sidebar_ui.py new file mode 100644 index 0000000..68a189a --- /dev/null +++ b/user_tabs/template_sidebar/template_sidebar_ui.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/buildbot/buildbot/worker/probe_basic-dev/sources/debian/python3-probe-basic/usr/share/configs/machine_setup_files/user_tabs/template_sidebar/template_sidebar.ui' +# +# Created by: PyQt5 UI code generator 5.15.9 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_USER(object): + def setupUi(self, USER): + USER.setObjectName("USER") + USER.resize(179, 511) + USER.setMaximumSize(QtCore.QSize(179, 511)) + USER.setProperty("sidebar", True) + + self.retranslateUi(USER) + QtCore.QMetaObject.connectSlotsByName(USER) + + def retranslateUi(self, USER): + _translate = QtCore.QCoreApplication.translate + USER.setWindowTitle(_translate("USER", "Sidebar User Tab"))