diff --git a/CHANGELOG.md b/CHANGELOG.md index 41f5197..c3ae3b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # CHANGELOG +v2.1.1-custom-jl +- changes by jl + v2.1.1 - Installer und Run Skripte als BAT (ehemals als PS1) - Bugfix funct_gen: WP_NUM diff --git a/MAIN.py b/MAIN.py index 04e240b..7e51f1f 100644 --- a/MAIN.py +++ b/MAIN.py @@ -17,7 +17,7 @@ file_def = "def.yml" file_jobs = "jobs.yml" name_newparset = "" name_newjob = "" -pic_sizelimit = 200 +pic_sizelimit = 250 def setup_group(frame, group_name, data, input_vars, selected_params, group_widgets): @@ -162,10 +162,10 @@ def setup_group(frame, group_name, data, input_vars, selected_params, group_widg if idx+1 in multicolumn_idx: col += 2 row = 0 - ttk.Label(frame_var, text=var_name, font=("TkDefaultFont", 7)).grid(row=row, column=col, padx=5, pady=5, sticky="e") + ttk.Label(frame_var, text=VarDescription(var_name), font=("TkDefaultFont", 8)).grid(row=row, column=col, padx=5, pady=5, sticky="e") var = tk.StringVar() group_vars[var_name] = var - ttk.Entry(frame_var, textvariable=var, font=("TkDefaultFont", 7), width=7).grid(row=row, column=col + 1, padx=5, pady=5, sticky="w") + ttk.Entry(frame_var, textvariable=var, font=("TkDefaultFont", 8), width=7).grid(row=row, column=col + 1, padx=5, pady=5, sticky="w") row += 1 input_vars[group_name] = group_vars @@ -186,7 +186,6 @@ def setup_group(frame, group_name, data, input_vars, selected_params, group_widg update_inlay_picture() - def setup_jobs(frame, data, selected_job, selected_params, input_vars, group_widgets): # Load existing jobs from the jobs.yml file job_values = get_existing_parameters("jobs", folder_parsets) @@ -276,33 +275,32 @@ def setup_evaluation(root, folder_pictures, data, folder_output, input_vars, sel image_label.image = group_image_tk # Keep a reference to avoid garbage collection image_label.grid(row=0, column=0, rowspan=2, padx=10, pady=10) + # Function to generate configuration file based on current parameters def btn_gen_cfg_dmuaut1(): gen_cfg_dmuaut(folder_output, input_vars, selected_params) - def btn_gen_cfg_dmuaut2(): - gen_cfg_dmuaut(folder_output, input_vars, selected_params, filetransfer=True) - def btn_gen_cfg_inlay1(): - gen_cfg_inlay(folder_output, input_vars, selected_params) - def btn_gen_cfg_inlay2(): - gen_cfg_inlay(folder_output, input_vars, selected_params, filetransfer=True) + +# def btn_gen_cfg_dmuaut2(): +# gen_cfg_dmuaut(folder_output, input_vars, selected_params, filetransfer=True) +# def btn_gen_cfg_inlay1(): +# gen_cfg_inlay(folder_output, input_vars, selected_params) +# def btn_gen_cfg_inlay2(): +# gen_cfg_inlay(folder_output, input_vars, selected_params, filetransfer=True) # Place buttons in the vertical frame for operations button_frame = ttk.Frame(frame) button_frame.grid(row=0, column=1, padx=10, pady=10, sticky="n") button1 = ttk.Button(button_frame, text="GEN CFG_DMUAUT.SPF FILE", width=45, command=btn_gen_cfg_dmuaut1) button1.grid(row=0, column=0, padx=10, pady=5) - button2 = ttk.Button(button_frame, text="GEN+TRANSFER CFG_DMUAUT.SPF FILE", width=45, command=btn_gen_cfg_dmuaut2) - button2.grid(row=0, column=1, padx=10, pady=5) - - button3 = ttk.Button(button_frame, text="GEN CFG_INLAY.SPF FILE", width=45, command=btn_gen_cfg_inlay1) - button3.grid(row=1, column=0, padx=5, pady=5) - button4 = ttk.Button(button_frame, text="GEN+TRANSFER CFG_INLAY.SPF FILE", width=45, command=btn_gen_cfg_inlay2) - button4.grid(row=1, column=1, padx=5, pady=5) - - root.grid_columnconfigure(0, weight=1) - +# button2 = ttk.Button(button_frame, text="GEN+TRANSFER CFG_DMUAUT.SPF FILE", width=45, command=btn_gen_cfg_dmuaut2) + #button2.grid(row=0, column=1, padx=10, pady=5) + #button3 = ttk.Button(button_frame, text="GEN CFG_INLAY.SPF FILE", width=45, command=btn_gen_cfg_inlay1) + #button3.grid(row=1, column=0, padx=5, pady=5) + #button4 = ttk.Button(button_frame, text="GEN+TRANSFER CFG_INLAY.SPF FILE", width=45, command=btn_gen_cfg_inlay2) + #button4.grid(row=1, column=1, padx=5, pady=5) + # Drag-and-Drop File Field def main(): # Tkinter root setup @@ -327,7 +325,7 @@ def main(): # ---- Create the UI for each group for col_idx, group_name in enumerate(data['groups']): - frame_group = ttk.LabelFrame(root, text=group_name, padding=(10, 10)) + frame_group = ttk.LabelFrame(root, text=VarDescription(group_name), padding=(10, 10)) frame_group.grid(row=1, column=col_idx, padx=10, pady=10, sticky="nsew") selected_params[group_name] = tk.StringVar() diff --git a/def.yml b/def.yml index 4499428..9a4f6da 100644 --- a/def.yml +++ b/def.yml @@ -7,25 +7,29 @@ groups: inlay: parameter: INL_X_NUM: int + INL_X_LENGTH: double INL_X_OFFSET: double INL_Y_NUM: int + INL_Y_LENGTH: double INL_Y_OFFSET: double + PRT_NUM: int cfg: picture_name: img_inlay.png - multicolumn_idx: [] + multicolumn_idx: [4] wp: parameter: WPR_X: double WPR_Y: double WPR_Z: double + WP_CLP_OFFSET_X: double WPF_X: double WPF_Y: double - WPF_Z: double - WP_CLP_OFFSET_X: double + WPF_Z: doublE + WP_CLP_OFFSET_Y: double WP_GRP_OFFSET_Z: double cfg: picture_name: img_wp.png - multicolumn_idx: [7] + multicolumn_idx: [5] clp: parameter: CLP_BACKENWEITE: double @@ -51,8 +55,9 @@ groups: PRB_SEI_VO_Z: double PRB_VERS_X_Y: double PRB_VERS_X_Z: double + PRB_VERS_X_TOL: double cfg: picture_name: img_probe.png - multicolumn_idx: [5] + multicolumn_idx: [6] diff --git a/funct_clp.py b/funct_clp.py index c2ff713..fde6c01 100644 --- a/funct_clp.py +++ b/funct_clp.py @@ -4,13 +4,19 @@ from functions import * def generate_picture_clp(all_group_vars, picture_path, DEBUG=False): vars = all_group_vars['clp'] - CLP_BACKENWEITE, CLP_BACKENHOHE, CLP_SPANNHOHE, CLP_AUFLAGETIEFE = (float(vars[k]) for k in + CLP_BACKENWEITE, CLP_BACKENHOHE, CLP_SPANNHOHE, CLP_AUFLAGETIEFE,MESSPOS_Z = (float(vars[k]) for k in ['CLP_BACKENWEITE', 'CLP_BACKENHOHE', - 'CLP_SPANNHOHE', 'CLP_AUFLAGETIEFE']) + 'CLP_SPANNHOHE', 'CLP_AUFLAGETIEFE', + 'MESSPOS_Z']) - WPR_X = CLP_BACKENWEITE/2 - WPR_Y = CLP_BACKENWEITE/2 - WPR_Z = CLP_BACKENWEITE + try: + WPR_X, WPR_Y, WPR_Z = ( + float(all_group_vars['wp'][k]) for k in ['WPR_X', 'WPR_Y', 'WPR_Z'] + ) + except (KeyError, ValueError): + WPR_X = CLP_BACKENWEITE/2 + WPR_Y = CLP_BACKENWEITE/2 + WPR_Z = CLP_BACKENWEITE if min(WPR_X, WPR_Y, WPR_Z) <= 0: raise ValueError("Dimensions must be positive.") @@ -18,7 +24,7 @@ def generate_picture_clp(all_group_vars, picture_path, DEBUG=False): fig, ax = plt.subplots(subplot_kw={'projection': '3d'}) # Define raw workpiece dimensions - x_cube, y_cube, z_cube = 2 * WPR_X, 2 * WPR_Y, WPR_Z + x_cube, y_cube, z_cube = WPR_X,WPR_Y, WPR_Z vertices_raw = np.array([[0, 0, 0], [x_cube, 0, 0], [x_cube, y_cube, 0], [0, y_cube, 0], [0, 0, WPR_Z], [x_cube, 0, WPR_Z], [x_cube, y_cube, WPR_Z], [0, y_cube, WPR_Z]]) faces_raw = [vertices_raw[[0, 1, 2, 3]], vertices_raw[[4, 5, 6, 7]], vertices_raw[[0, 3, 7, 4]], @@ -45,8 +51,8 @@ def generate_picture_clp(all_group_vars, picture_path, DEBUG=False): # Draw CLP coordinate system axis_len = max(x_cube, y_cube, z_cube) * 0.15 colors = ['r', 'g', 'b'] - origin_x = WPR_X - origin_y = WPR_Y + origin_x = WPR_X/2 + origin_y = WPR_Y/2 origin_z = 0 for i, vec in enumerate(np.eye(3)): ax.quiver(origin_x, origin_y, origin_z, *(axis_len * vec), color=colors[i], linewidth=3) @@ -54,8 +60,8 @@ def generate_picture_clp(all_group_vars, picture_path, DEBUG=False): va='top') # Define clamping block dimensions - clp_deep = y_cube * 0.3 - base_x = WPR_X - CLP_BACKENWEITE / 2 + clp_deep = MESSPOS_Z + base_x = WPR_X/2 - CLP_BACKENWEITE / 2 alpha = 0.35 color = 'blue' linewidth = 1 @@ -76,10 +82,10 @@ def generate_picture_clp(all_group_vars, picture_path, DEBUG=False): alpha=alpha, linewidth=linewidth, inverty=True) # Draw text for geometry values - ax.text(0, 2*WPR_Y+clp_deep, CLP_SPANNHOHE/2, f'{CLP_SPANNHOHE}mm', color='blue', fontsize=9, weight='bold', ha='right', va='center') - ax.text(0, 2*WPR_Y+clp_deep, -CLP_BACKENHOHE/2, f'{CLP_BACKENHOHE}mm', color='blue', fontsize=9, weight='bold', ha='right', va='center') - ax.text(WPR_X, 2*WPR_Y+clp_deep, CLP_SPANNHOHE, f'{CLP_BACKENWEITE}mm', color='blue', fontsize=9, weight='bold', ha='right', va='center') - ax.text(WPR_X*2, 2*WPR_Y-CLP_AUFLAGETIEFE/2, 0, f'{CLP_AUFLAGETIEFE}mm', color='blue', fontsize=9, weight='bold', ha='left', va='bottom') + ax.text(0, WPR_Y+clp_deep, CLP_SPANNHOHE/2, f'{CLP_SPANNHOHE}mm', color='blue', fontsize=9, weight='bold', ha='right', va='center') + ax.text(0, WPR_Y+clp_deep, -CLP_BACKENHOHE/2, f'{CLP_BACKENHOHE}mm', color='blue', fontsize=9, weight='bold', ha='right', va='center') + ax.text(WPR_X, WPR_Y+clp_deep, CLP_SPANNHOHE, f'{CLP_BACKENWEITE}mm', color='blue', fontsize=9, weight='bold', ha='right', va='center') + ax.text(WPR_X, WPR_Y-CLP_AUFLAGETIEFE/2, 0, f'{CLP_AUFLAGETIEFE}mm', color='blue', fontsize=9, weight='bold', ha='left', va='bottom') # Set view properties z_trans = WPR_Z*0.3 @@ -113,4 +119,4 @@ if __name__ == "__main__": 'CLP_SPANNHOHE': 3, 'CLP_AUFLAGETIEFE': 3 } - generate_picture_clp({'clp': all_group_vars}, "cfg_picture/TEST_wpraw.jpg", DEBUG=True) + generate_picture_clp({'clp': all_group_vars}, "cfg_picture/TEST_wpraw.jpg", DEBUG=True) \ No newline at end of file diff --git a/funct_gen.py b/funct_gen.py index a1d8732..00354de 100644 --- a/funct_gen.py +++ b/funct_gen.py @@ -1,5 +1,5 @@ # funct_gen.py - +from functions import * import os import time import pandas as pd @@ -32,7 +32,7 @@ def gen_cfg_dmuaut(folder_output, input_vars, selected_params, filetransfer=Fals # Iterate over the input variables (each group), and write them into the file for group_name, variables in input_vars.items(): for var_name, var_value in variables.items(): - spf_file.write(f"{var_name.upper()} = {var_value.get()}\n") + spf_file.write(f"{var_name.upper()} = {var_value.get()} ; {VarDescription(var_name)} \n") spf_file.write("; ---------------------------------------------------\n") spf_file.write(f"M17\n") diff --git a/funct_inlay.py b/funct_inlay.py index 0576f05..3ec3056 100644 --- a/funct_inlay.py +++ b/funct_inlay.py @@ -4,14 +4,13 @@ import numpy as np def generate_picture_inlay(all_group_vars, picture_path, DEBUG=False): try: vars = all_group_vars['inlay'] - x_num, y_num = int(vars['INL_X_NUM']), int(vars['INL_Y_NUM']) - x_offset_mm, y_offset_mm = float(vars['INL_X_OFFSET']), float(vars['INL_Y_OFFSET']) - + x_num, y_num, prt_num = int(vars['INL_X_NUM']), int(vars['INL_Y_NUM']),int(vars['PRT_NUM']) + x_offset_mm, y_offset_mm,y_wide_mm,x_wide_mm = float(vars['INL_X_OFFSET']), float(vars['INL_Y_OFFSET']),float(vars['INL_Y_LENGTH']),float(vars['INL_X_LENGTH']) + if x_num <= 0 or y_num <= 0: raise ValueError("INL_X_NUM and INL_Y_NUM must be positive integers.") - - rect_realsize_factor = 0.90 + rect_realsize_factor = 0.9 canvas_height_mm = x_num * x_offset_mm - x_offset_mm * (1-rect_realsize_factor) canvas_width_mm = y_num * y_offset_mm - y_offset_mm * (1-rect_realsize_factor) @@ -19,13 +18,16 @@ def generate_picture_inlay(all_group_vars, picture_path, DEBUG=False): y_offset = y_offset_mm / canvas_width_mm # Swapping due to axis swap - x_wide = x_offset * rect_realsize_factor - y_wide = y_offset * rect_realsize_factor + x_wide = x_wide_mm / canvas_height_mm + y_wide = y_wide_mm / canvas_width_mm fig, ax = plt.subplots(figsize=(12, 8)) ax.set_facecolor('black') + rect = plt.Rectangle((-1, -1),2+y_offset*y_num,2+x_offset*x_num, color='lightgrey') + ax.add_patch(rect) + for xxx in range(x_num): for yyy in range(y_num): # Mirroring horizontally @@ -35,19 +37,30 @@ def generate_picture_inlay(all_group_vars, picture_path, DEBUG=False): rect = plt.Rectangle((y_start, x_start), y_wide, x_wide, color='white') ax.add_patch(rect) - triangle_sizefactor = 0.2 - triangle = plt.Polygon([ - (y_start+y_wide, x_start), # Bottom right of the rectangle - (y_start+y_wide, x_start + triangle_sizefactor * y_wide), # Left along the bottom - (y_start+y_wide - triangle_sizefactor * y_wide, x_start ) # Up from the bottom right - ], color='black') - ax.add_patch(triangle) + for parts in range(prt_num): + col='black' + if parts ==0: + rect = plt.Rectangle((y_start+y_wide-y_wide*0.3, x_start), y_wide*0.3,x_wide*0.3, color=col) + ax.add_patch(rect) + + elif parts ==1: + rect = plt.Rectangle((y_start,x_start+x_wide-x_wide*0.3), y_wide*0.3,x_wide*0.3, color=col) + ax.add_patch(rect) + + elif parts ==2: + rect = plt.Rectangle((y_start+y_wide-y_wide*0.3, x_start+x_wide-x_wide*0.3), y_wide*0.3,x_wide*0.3, color=col) + ax.add_patch(rect) + + elif parts ==3: + rect = plt.Rectangle((y_start, x_start), y_wide*0.3,x_wide*0.3, color=col) + ax.add_patch(rect) + # Arrows with adjusted margins ax.arrow(1.0, 0.0, -0.3, 0, head_width=0.03, head_length=0.02, fc='green', ec='green', linewidth=2, edgecolor='white') ax.arrow(1.0, 0.0, 0, 0.3, head_width=0.02, head_length=0.03, fc='red', ec='red', linewidth=2, edgecolor='white') - margin = 0.03 + margin = 0.06 ax.set_xlim(0-margin, 1+margin) ax.set_ylim(0-margin, 1+margin) ax.set_xticks([]), ax.set_yticks([]) @@ -67,6 +80,6 @@ def generate_picture_inlay(all_group_vars, picture_path, DEBUG=False): print(f"Error generating matrix: {e}") if __name__ == "__main__": - vars = {'INL_X_NUM': 8, 'INL_Y_NUM': 12, 'INL_X_OFFSET': 100, 'INL_Y_OFFSET': 125} + vars = {'INL_X_NUM': 8, 'INL_Y_NUM': 12, 'INL_X_OFFSET': 100, 'INL_Y_OFFSET': 125, 'PRT_NUM': 1, 'INL_X_LENGTH':50, 'INL_Y_LENGTH':50} picture_path = "cfg_picture/TEST_inlay.jpg" generate_picture_inlay({'inlay': vars}, picture_path, DEBUG=True) diff --git a/funct_probe.py b/funct_probe.py index 8b5ebbe..9c13e52 100644 --- a/funct_probe.py +++ b/funct_probe.py @@ -13,9 +13,9 @@ def generate_picture_probe(all_group_vars, picture_path, DEBUG=False): 'PRB_VERS_X_Y', 'PRB_VERS_X_Z']) try: - CLP_BACKENWEITE, CLP_BACKENHOHE, CLP_SPANNHOHE, CLP_AUFLAGETIEFE = ( + CLP_BACKENWEITE, CLP_BACKENHOHE, CLP_SPANNHOHE, CLP_AUFLAGETIEFE, MESSPOSZ = ( float(all_group_vars['clp'][k]) for k in - ['CLP_BACKENWEITE', 'CLP_BACKENHOHE', 'CLP_SPANNHOHE', 'CLP_AUFLAGETIEFE'] + ['CLP_BACKENWEITE', 'CLP_BACKENHOHE', 'CLP_SPANNHOHE', 'CLP_AUFLAGETIEFE','MESSPOS_Z'] ) except (KeyError, ValueError): CLP_BACKENWEITE = 100 @@ -35,7 +35,7 @@ def generate_picture_probe(all_group_vars, picture_path, DEBUG=False): fig, ax = plt.subplots(subplot_kw={'projection': '3d'}) # Define raw workpiece dimensions - x_cube, y_cube, z_cube = 2 * WPR_X, 2 * WPR_Y, WPR_Z + x_cube, y_cube, z_cube = WPR_X,WPR_Y, WPR_Z vertices_raw = np.array([[0, 0, 0], [x_cube, 0, 0], [x_cube, y_cube, 0], [0, y_cube, 0], [0, 0, WPR_Z], [x_cube, 0, WPR_Z], [x_cube, y_cube, WPR_Z], [0, y_cube, WPR_Z]]) faces_raw = [vertices_raw[[0, 1, 2, 3]], vertices_raw[[4, 5, 6, 7]], vertices_raw[[0, 3, 7, 4]], @@ -62,8 +62,8 @@ def generate_picture_probe(all_group_vars, picture_path, DEBUG=False): # Draw CLP coordinate system axis_len = max(x_cube, y_cube, z_cube) * 0.15 colors = ['r', 'g', 'b'] - origin_x = WPR_X - origin_y = WPR_Y + origin_x = WPR_X/2 + origin_y = WPR_Y/2 origin_z = 0 for i, vec in enumerate(np.eye(3)): ax.quiver(origin_x, origin_y, origin_z, *(axis_len * vec), color=colors[i], linewidth=3) @@ -71,8 +71,8 @@ def generate_picture_probe(all_group_vars, picture_path, DEBUG=False): va='top') # Define clamping block dimensions - clp_deep = y_cube * 0.3 - base_x = WPR_X - CLP_BACKENWEITE / 2 + clp_deep = MESSPOSZ + base_x = WPR_X/2 - CLP_BACKENWEITE / 2 alpha = 0.35 color = 'blue' linewidth = 1 @@ -105,22 +105,22 @@ def generate_picture_probe(all_group_vars, picture_path, DEBUG=False): txt_offs = max(x_cube, y_cube, z_cube) * 0.05 #BODEN boden_colr = "red" - drawball(x_cube-PRB_BOD_RE_X, WPR_Y+PRB_BOD_RE_Y, 0, boden_colr, 0.03) - ax.text( x_cube-PRB_BOD_RE_X, WPR_Y+PRB_BOD_RE_Y, 0+txt_offs, f'PRB_BOD_RE', color=boden_colr, fontsize=7, weight='bold', ha='center', va='bottom') - drawball(0+PRB_BOD_LI_X, WPR_Y+PRB_BOD_LI_Y, 0, boden_colr, 0.03) - ax.text( 0+PRB_BOD_LI_X, WPR_Y+PRB_BOD_LI_Y, 0-txt_offs, f'PRB_BOD_LI', color=boden_colr, fontsize=7, weight='bold', ha='center', va='top') + drawball(x_cube-PRB_BOD_RE_X, WPR_Y/2+PRB_BOD_RE_Y, 0, boden_colr, 0.03) + ax.text( x_cube-PRB_BOD_RE_X, WPR_Y/2+PRB_BOD_RE_Y, 0+txt_offs, f'PRB_BOD_RE', color=boden_colr, fontsize=7, weight='bold', ha='center', va='bottom') + drawball(0+PRB_BOD_LI_X, WPR_Y/2+PRB_BOD_LI_Y*-1, 0, boden_colr, 0.03) + ax.text( 0+PRB_BOD_LI_X, WPR_Y/2+PRB_BOD_LI_Y*-1, 0-txt_offs, f'PRB_BOD_LI', color=boden_colr, fontsize=7, weight='bold', ha='center', va='top') #SEITE seiten_colr = "green" - drawball(WPR_X+PRB_SEI_HI_X, y_cube, PRB_SEI_HI_Z, seiten_colr, 0.03) - ax.text(WPR_X+PRB_SEI_HI_X, y_cube, PRB_SEI_HI_Z+txt_offs, f'PRB_SEI_HI', color=seiten_colr, fontsize=7, weight='bold', ha='right', va='bottom') - drawball(WPR_X+PRB_SEI_VO_X, 0, PRB_SEI_VO_Z, seiten_colr, 0.03) - ax.text(WPR_X+PRB_SEI_VO_X, 0, PRB_SEI_VO_Z+txt_offs, f'PRB_SEI_VO', color=seiten_colr, fontsize=7, weight='bold', ha='left', va='bottom') + drawball(WPR_X/2+PRB_SEI_HI_X*-1, y_cube, PRB_SEI_HI_Z*-1, seiten_colr, 0.03) + ax.text(WPR_X/2+PRB_SEI_HI_X*-1, y_cube, PRB_SEI_HI_Z*-1+txt_offs, f'PRB_SEI_HI', color=seiten_colr, fontsize=7, weight='bold', ha='right', va='bottom') + drawball(WPR_X/2+PRB_SEI_VO_X, 0, PRB_SEI_VO_Z*-1, seiten_colr, 0.03) + ax.text(WPR_X/2+PRB_SEI_VO_X, 0, PRB_SEI_VO_Z*-1+txt_offs, f'PRB_SEI_VO', color=seiten_colr, fontsize=7, weight='bold', ha='left', va='bottom') #VERSATZ Y vers_colr = "blue" - drawball(0, WPR_Y+PRB_VERS_X_Y, PRB_VERS_X_Z, vers_colr, 0.03) - ax.text( 0, WPR_Y+PRB_VERS_X_Y, PRB_VERS_X_Z+txt_offs, f'PRB_VERS_X', color=vers_colr, fontsize=7, weight='bold', ha='center', va='bottom') + drawball(0, WPR_Y/2+PRB_VERS_X_Y*-1, PRB_VERS_X_Z*-1, vers_colr, 0.03) + ax.text( 0, WPR_Y/2+PRB_VERS_X_Y*-1, PRB_VERS_X_Z+txt_offs, f'PRB_VERS_X', color=vers_colr, fontsize=7, weight='bold', ha='center', va='bottom') # Set view properties diff --git a/funct_wp.py b/funct_wp.py index 0dee5d2..a816ad6 100644 --- a/funct_wp.py +++ b/funct_wp.py @@ -9,13 +9,13 @@ def generate_picture_wp(all_group_vars, picture_path, DEBUG=False): 'WPF_Y', 'WPF_Z', 'WP_CLP_OFFSET_X', 'WP_GRP_OFFSET_Z']) - if min(WPR_X, WPR_Y, WPR_Z, WPF_X, WPF_Y, WPF_Z) <= 0: + if min(WPR_X, WPR_Y, WPR_Z) < 0: raise ValueError("Dimensions must be positive.") fig, ax = plt.subplots(subplot_kw={'projection': '3d'}) # Define raw workpiece dimensions - x_cube, y_cube, z_cube = 2 * WPR_X, 2 * WPR_Y, WPR_Z + x_cube, y_cube, z_cube = WPR_X,WPR_Y, WPR_Z vertices_raw = np.array([[0, 0, 0], [x_cube, 0, 0], [x_cube, y_cube, 0], [0, y_cube, 0], [0, 0, WPR_Z], [x_cube, 0, WPR_Z], [x_cube, y_cube, WPR_Z], [0, y_cube, WPR_Z]]) faces_raw = [vertices_raw[[0, 1, 2, 3]], vertices_raw[[4, 5, 6, 7]], vertices_raw[[0, 3, 7, 4]], @@ -41,10 +41,10 @@ def generate_picture_wp(all_group_vars, picture_path, DEBUG=False): # Draw gripping point u, v = np.mgrid[0:2 * np.pi:20j, 0:np.pi:20j] - ball_radius = min(WPR_X, WPR_Y, WPR_Z) * 0.1 + ball_radius = min(WPR_X, WPR_Y, WPR_Z) * 0.05 ax.plot_surface( - WPR_X + ball_radius * np.cos(u) * np.sin(v), - WPR_Y + ball_radius * np.sin(u) * np.sin(v), + WPR_X/2 + ball_radius * np.cos(u) * np.sin(v), + WPR_Y/2 + ball_radius * np.sin(u) * np.sin(v), WPR_Z + ball_radius * np.cos(v), color='r' ) @@ -65,15 +65,15 @@ def generate_picture_wp(all_group_vars, picture_path, DEBUG=False): ) # Define finished workpiece dimensions - x_cube2, y_cube2, z_cube2 = 2 * WPF_X, 2 * WPF_Y, WPF_Z + x_cube2, y_cube2, z_cube2 = WPR_X + WPF_X,WPR_Y + WPF_Y,WPR_Z + WPF_Z # Draw gripping point for finished workpiece u, v = np.mgrid[0:2 * np.pi:20j, 0:np.pi:20j] - ball_radius = min(WPF_X, WPF_Y, WPF_Z) * 0.08 + ball_radius = min(WPR_X, WPR_Y, WPR_Z) * 0.05 ax.plot_surface( - WPF_X + ball_radius * np.cos(u) * np.sin(v), - WPF_Y + ball_radius * np.sin(u) * np.sin(v), - WPF_Z + ball_radius * np.cos(v), + WPR_X/2+WPF_X + ball_radius * np.cos(u) * np.sin(v), + WPR_Y/2+WPF_Y + ball_radius * np.sin(u) * np.sin(v), + WPR_Z+WPF_Z + ball_radius * np.cos(v), color='g' ) @@ -83,46 +83,57 @@ def generate_picture_wp(all_group_vars, picture_path, DEBUG=False): GRP_ALPHA2 = .25 yyy2 = [-gripper_thickness2, y_cube2] if WPF_Y < WPR_Y else [-gripper_thickness2 + (WPF_Y - WPR_Y) * 2, y_cube] bars = [ - ((x_cube2 - gripper_wide2) * 0.5, yyy2[0], WPF_Z - WP_GRP_OFFSET_Z), - ((x_cube2 - gripper_wide2) * 0.5, yyy2[1], WPF_Z - WP_GRP_OFFSET_Z), + ((x_cube2 - gripper_wide2) * 0.5, yyy2[0],WPR_Z + WPF_Z - WP_GRP_OFFSET_Z), + ((x_cube2 - gripper_wide2) * 0.5, yyy2[1], WPR_Z +WPF_Z - WP_GRP_OFFSET_Z), ] for (x, y, z) in bars: ax.bar3d( x, y, z, - gripper_wide2, gripper_thickness2, 5 * WPF_Z + WP_GRP_OFFSET_Z, + gripper_wide2, gripper_thickness2, 5 *WPR_Z +WPF_Z + WP_GRP_OFFSET_Z, color='g', alpha=GRP_ALPHA2, edgecolor='k', linewidth=0.5 ) # Draw CLP coordinate system axis_len = max(x_cube, y_cube, z_cube) * 0.15 colors = ['r', 'g', 'b'] - origin_x = WPR_X - WP_CLP_OFFSET_X - origin_y = WPR_Y + origin_x = WPR_X/2 - WP_CLP_OFFSET_X + origin_y = WPR_Y/2 origin_z = 0 for i, vec in enumerate(np.eye(3)): ax.quiver(origin_x, origin_y, origin_z, *(axis_len * vec), color=colors[i], linewidth=3) ax.text(origin_x, origin_y, origin_z - axis_len * 0.3, 'CLP', color='blue', fontsize=9, weight='bold', ha='center', va='top') + + + try: + CLP_BACKENWEITE, CLP_BACKENHOHE, CLP_SPANNHOHE, CLP_AUFLAGETIEFE,MESSPOS_Z = ( + float(all_group_vars['clp'][k]) for k in + ['CLP_BACKENWEITE', 'CLP_BACKENHOHE', 'CLP_SPANNHOHE', 'CLP_AUFLAGETIEFE','MESSPOS_Z'] + ) + except (KeyError, ValueError): + CLP_BACKENWEITE = 100 + CLP_BACKENHOHE = 50 + CLP_SPANNHOHE = 5 + CLP_AUFLAGETIEFE = 5 + MESSPOS_Z = 5 + # Define clamping block dimensions - clp_height = z_cube * 0.2 - clp_width = 0.6 * x_cube - clp_deep = y_cube * 0.3 - clp_supportdeep = 3 - base_x = WPR_X - clp_width / 2 + clp_deep = MESSPOS_Z + base_x = WPR_X/2 - CLP_BACKENWEITE / 2 alpha = 0.35 color = 'blue' linewidth = 1 # Draw clamping blocks - x = base_x - WP_CLP_OFFSET_X - dx = clp_width + x = base_x + dx = CLP_BACKENWEITE y = 0 dy1 = clp_deep - dy2 = clp_supportdeep + dy2 = CLP_AUFLAGETIEFE z = 0 - dz1 = z_cube * 0.2 - dz2 = z_cube * 0.6 + dz1 = CLP_SPANNHOHE + dz2 = CLP_BACKENHOHE plot_clamping(ax, x, y, z, dx, dy1, dy2, dz1, dz2, color=color, alpha=alpha, linewidth=linewidth) y = y_cube diff --git a/functions.py b/functions.py index d0e6434..31baf19 100644 --- a/functions.py +++ b/functions.py @@ -128,3 +128,131 @@ def plot_clamping(ax, x, y, z, dx, dy1, dy2, dz1, dz2, color='blue', alpha=0.5, except Exception as e: print(f"Trimesh union failed: {e}") +def VarDescription(Name): + + #Workpiece + if Name == "wp": + return "Rohmaterial" + + elif Name == "WPR_X": + return "Rohmass X" + + elif Name == "WPR_Y": + return "Rohmass Y" + + elif Name == "WPR_Z": + return "Rohmass Z" + + elif Name == "WPF_X": + return "Griffversatz fertig X" + + elif Name == "WPF_Y": + return "Griffversatz fertig Y" + + elif Name == "WPF_Z": + return "Griffversatz fertig Z" + + elif Name == "WP_CLP_OFFSET_X": + return "Einlegeposition X" + + elif Name == "WP_CLP_OFFSET_Y": + return "Einlegeposition Y" + + elif Name == "WP_GRP_OFFSET_Z": + return "Greiftiefe" + + #CLP + elif Name == "clp": + return "Schraubstock Backen" + + elif Name == "CLP_BACKENWEITE": + return "Backenbreite" + + elif Name == "CLP_BACKENHOHE": + return "Backenhöhe" + + elif Name == "CLP_SPANNHOHE": + return "Backen Spanntiefe" + + elif Name == "CLP_AUFLAGETIEFE": + return "Auflagebreite" + + elif Name == "MESSPOS_X": + return "Messposition X" + + elif Name == "MESSPOS_Y": + return "Messposition Y" + + elif Name == "MESSPOS_Z": + return "Abstand Teil-Backe" + + elif Name == "MESSPOS_TOL": + return "Toleranz Spannen" + + #PROBE + elif Name == "probe": + return "Messen" + + elif Name == "PRB_BOD_RE_X": + return "Boden Rechts X" + + elif Name == "PRB_BOD_RE_Y": + return "Boden Rechts Y" + + elif Name == "PRB_BOD_LI_X": + return "Boden Links X" + + elif Name == "PRB_BOD_LI_Y": + return "Boden Links Y" + + elif Name == "PRB_SEI_HI_X": + return "Hinten X" + + elif Name == "PRB_SEI_HI_Z": + return "Hinten Z" + + elif Name == "PRB_SEI_VO_X": + return "Vorne X" + + elif Name == "PRB_SEI_VO_Z": + return "Vorne Z" + + elif Name == "PRB_VERS_X_Y": + return "X Mess Pos Y" + + elif Name == "PRB_VERS_X_Z": + return "X Mess Pos Z" + + elif Name == "PRB_VERS_X_TOL": + return "Pos Toleranz X" + + #INL + elif Name == "inlay": + return "Inlay" + + elif Name == "INL_X_NUM": + return "Felder in X" + + elif Name == "INL_X_LENGTH": + return "Feldlänge X" + + elif Name == "INL_X_OFFSET": + return "Abstand Felder X" + + elif Name == "INL_Y_NUM": + return "Felder in Y" + + elif Name == "INL_Y_LENGTH": + return "Feldlänge in Y" + + elif Name == "INL_Y_OFFSET": + return "Abstand Felder Y" + + elif Name == "PRT_NUM": + return "Teile pro Feld" + + + elif Name != "": + return Name + +