From 377fb1422f7cea2e922cd9713091b5f943e224c9 Mon Sep 17 00:00:00 2001 From: Eduard Gerlitz Date: Tue, 11 Mar 2025 15:06:20 +0100 Subject: [PATCH] . --- .gitignore | 1 - BAK/241031_def.yml | 47 ++++++++++++++++++++++++++++++ cfg_parsets/inlay.yml | 12 -------- cfg_picture/img_inlay.png | Bin 35482 -> 92849 bytes def.yml | 9 +++--- funct_gen.py | 8 +++--- funct_inlay.py | 59 +++++++++++++++++++++----------------- funct_wp.py | 55 +++++++++++++++++++++++++++++++++++ 8 files changed, 143 insertions(+), 48 deletions(-) create mode 100644 BAK/241031_def.yml delete mode 100644 cfg_parsets/inlay.yml diff --git a/.gitignore b/.gitignore index 50897f0..efe34cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ /.idea /__pycache__/ *ARCHIV* -*BAK* *BACKUP* out cfg_inlay_PUTx.xlsx diff --git a/BAK/241031_def.yml b/BAK/241031_def.yml new file mode 100644 index 0000000..534b8b5 --- /dev/null +++ b/BAK/241031_def.yml @@ -0,0 +1,47 @@ +general: + yolovar: int + initpic_name: puppy.png + +groups: + inlay: + parameter: + x_num: int + x_offset: double + y_num: int + y_offset: double + kos: str + cfg: + picture_name: img_inlay.png + wp_raw: + parameter: + x_wpraw: double + y_wpraw: double + z_wpraw: double + h_grp_wpraw: double + cfg: + picture_name: img_wpraw.png + wp_fin: + parameter: + x_wpfin: double + y_wpfin: double + z_wpfin: double + l_wpfin: double + h_grp_wpfin: double + cfg: + picture_name: img_wpfin.png + clp: + parameter: + clp_offset: double + y_prb_floor1: double + z_prb_floor1: double + y_prb_floor2: double + z_prb_floor2: double + x_prb_backen: double + z_prb_backen: double + l_prb_backen: double + y_prb_seite: double + z_prb_seite: double + + + cfg: + picture_name: img_clp.png diff --git a/cfg_parsets/inlay.yml b/cfg_parsets/inlay.yml deleted file mode 100644 index 6cb620e..0000000 --- a/cfg_parsets/inlay.yml +++ /dev/null @@ -1,12 +0,0 @@ -'2': - kos: '4' - x_num: '5' - x_offset: '5' - y_num: '5' - y_offset: '5' -inlay1: - kos: '4' - x_num: '6' - x_offset: '120' - y_num: '5' - y_offset: '250' diff --git a/cfg_picture/img_inlay.png b/cfg_picture/img_inlay.png index 213c9c1a67189b4ae86fffe0bd9527a9452d6bcf..a2c8c979fc3338ecce7ec2d721979850e4a689f5 100644 GIT binary patch literal 92849 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 literal 35482 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 I8|X3r0n=*x-v9sr diff --git a/def.yml b/def.yml index 1566130..420dc9c 100644 --- a/def.yml +++ b/def.yml @@ -5,11 +5,10 @@ general: groups: inlay: parameter: - x_num: int - x_offset: double - y_num: int - y_offset: double - kos: str + INL_X_NUM: int + INL_X_OFFSET: double + INL_Y_NUM: int + INL_Y_OFFSET: double cfg: picture_name: img_inlay.png wp_raw: diff --git a/funct_gen.py b/funct_gen.py index 95269c8..ef085d0 100644 --- a/funct_gen.py +++ b/funct_gen.py @@ -66,10 +66,10 @@ def generate_config_spf_custom1(folder_output, input_vars, selected_params, file xlsx_path = "cfg_inlay_PUTx.xlsx" # Extract grid parameters - x_num = int(input_vars['inlay']['x_num'].get()) # Number of columns - y_num = int(input_vars['inlay']['y_num'].get()) # Number of rows - x_offset = float(input_vars['inlay']['x_offset'].get()) # X offset - y_offset = float(input_vars['inlay']['y_offset'].get()) # Y offset + x_num = int(input_vars['inlay']['INL_X_NUM'].get()) # Number of columns + y_num = int(input_vars['inlay']['INL_Y_NUM'].get()) # Number of rows + x_offset = float(input_vars['inlay']['INL_X_OFFSET'].get()) # X offset + y_offset = float(input_vars['inlay']['INL_Y_OFFSET'].get()) # Y offset # Check if Excel file exists, if not create it with 'x' values if not os.path.exists(xlsx_path): diff --git a/funct_inlay.py b/funct_inlay.py index 011e9f1..0576f05 100644 --- a/funct_inlay.py +++ b/funct_inlay.py @@ -4,49 +4,56 @@ 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['x_num']), int(vars['y_num']) - x_offset_mm, y_offset_mm = float(vars['x_offset']), float(vars['y_offset']) - canvas_width_mm, canvas_height_mm = 800, 1200 + 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']) + + 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 + 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) + x_offset = x_offset_mm / canvas_height_mm # Swapping due to axis swap y_offset = y_offset_mm / canvas_width_mm # Swapping due to axis swap - if x_num <= 0 or y_num <= 0: - raise ValueError("x_num and y_num must be positive integers.") + + x_wide = x_offset * rect_realsize_factor + y_wide = y_offset * rect_realsize_factor + fig, ax = plt.subplots(figsize=(12, 8)) ax.set_facecolor('black') - total_x_offset = x_offset * (y_num + 1) - total_y_offset = y_offset * (x_num + 1) - rect_width = (1 - total_y_offset) / x_num - rect_height = (1 - total_x_offset) / y_num - - for j in range(x_num): - for i in range(y_num): + for xxx in range(x_num): + for yyy in range(y_num): # Mirroring horizontally - x_start = 1 - (y_offset + i * (rect_height + y_offset) + rect_height) - y_start = x_offset + j * (rect_width + x_offset) + x_start = xxx * x_offset + y_start = ((yyy) * y_offset) # Corrected vertical mirroring - rect = plt.Rectangle((x_start, y_start), rect_height, rect_width, color='white') + rect = plt.Rectangle((y_start, x_start), y_wide, x_wide, color='white') ax.add_patch(rect) + triangle_sizefactor = 0.2 triangle = plt.Polygon([ - (x_start + rect_height, y_start), # Bottom right of the rectangle - (x_start + rect_height - 0.05 * rect_height, y_start), # Left along the bottom - (x_start + rect_height, y_start + 0.05 * rect_width) # Up from the bottom right + (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) # Arrows with adjusted margins - ax.arrow(0.98, 0.02, -0.9, 0, head_width=0.03, head_length=0.02, fc='green', ec='green', linewidth=2, edgecolor='white') - ax.arrow(0.98, 0.02, 0, 0.9, head_width=0.02, head_length=0.03, fc='red', ec='red', linewidth=2, edgecolor='white') + 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') - ax.set_xlim(0, 1) - ax.set_ylim(0, 1) + margin = 0.03 + ax.set_xlim(0-margin, 1+margin) + ax.set_ylim(0-margin, 1+margin) ax.set_xticks([]), ax.set_yticks([]) - plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) # Adjusting the margins - ax.set_xlim(1, 0) # Flipping the x-axis - ax.set_ylim(1, 0) # Flipping the y-axis + # plt.subplots_adjust(left=0.01, right=0.99, top=0.99, bottom=0.01) # Adjusting the margins + # ax.set_xlim(1, 0) # Flipping the x-axis + # ax.set_ylim(1, 0) # Flipping the y-axis if DEBUG: plt.show() @@ -60,6 +67,6 @@ def generate_picture_inlay(all_group_vars, picture_path, DEBUG=False): print(f"Error generating matrix: {e}") if __name__ == "__main__": - vars = {'x_num': 5, 'y_num': 3, 'x_offset': 20, 'y_offset': 20} + vars = {'INL_X_NUM': 8, 'INL_Y_NUM': 12, 'INL_X_OFFSET': 100, 'INL_Y_OFFSET': 125} picture_path = "cfg_picture/TEST_inlay.jpg" generate_picture_inlay({'inlay': vars}, picture_path, DEBUG=True) diff --git a/funct_wp.py b/funct_wp.py index abdcc7f..0ea6a22 100644 --- a/funct_wp.py +++ b/funct_wp.py @@ -3,6 +3,61 @@ from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as np +def generate_picture_wp(all_group_vars, picture_path, DEBUG=False): + try: + # --- wpraw + vars = all_group_vars['wp_raw'] + x, y, z = float(vars['x_wpraw']), float(vars['y_wpraw']), float(vars['z_wpraw']) + if min(x, y, z) <= 0: + raise ValueError("Dimensions must be positive.") + + fig, ax = plt.subplots(subplot_kw={'projection': '3d'}) + x_cube, y_cube = 2 * x, 2 * y + vertices = np.array([[0, 0, 0], [x_cube, 0, 0], [x_cube, y_cube, 0], [0, y_cube, 0], + [0, 0, z], [x_cube, 0, z], [x_cube, y_cube, z], [0, y_cube, z]]) + faces = [vertices[[0, 1, 2, 3]], vertices[[4, 5, 6, 7]], vertices[[0, 3, 7, 4]], + vertices[[1, 2, 6, 5]], vertices[[0, 1, 5, 4]], vertices[[2, 3, 7, 6]]] + + ax.add_collection3d(Poly3DCollection(faces, facecolors='k', linewidths=1, edgecolors='k', alpha=.15)) + ax.set_box_aspect([x_cube, y_cube, z]) + ax.set_xticks([]); + ax.set_yticks([]); + ax.set_zticks([]) + ball_radius = min(x, y, z) * 0.1 + u, v = np.linspace(0, 2 * np.pi, 20), np.linspace(0, np.pi, 20) + x_sphere = x + ball_radius * np.outer(np.cos(u), np.sin(v)) + y_sphere = y + ball_radius * np.outer(np.sin(u), np.sin(v)) + z_sphere = z + ball_radius * np.outer(np.ones_like(u), np.cos(v)) + ax.plot_surface(x_sphere, y_sphere, z_sphere, color='r', alpha=1) + + max_size = max(x_cube, y_cube, z) * 0.3 + ax.quiver(0, 0, 0, max_size, 0, 0, color='r', linewidth=5) + ax.quiver(0, 0, 0, 0, max_size, 0, color='g', linewidth=5) + ax.quiver(0, 0, 0, 0, 0, max_size, color='b', linewidth=5) + + block_depth = y * 0.4 + ax.bar3d(-max_size, (y_cube - block_depth) * 0.5, z * 0.8, max_size, block_depth, z * 0.8, color='k', alpha=.25) + ax.bar3d(x_cube, (y_cube - block_depth) * 0.5, z * 0.8, max_size, block_depth, z * 0.8, color='k', alpha=.25) + + + + ax.view_init(elev=18, azim=-130) + ax.set_xlim([0, x_cube]); ax.set_ylim([0, y_cube]); ax.set_zlim([0, z]) + ax.set_aspect('auto') + + if not DEBUG: + fig.savefig(picture_path, bbox_inches='tight', dpi=300, transparent=True) + else: + plt.show() + plt.close() + + except Exception as e: + print(f"An error occurred: {e}") + + + + +# --------------- OLD ------------------------ def generate_picture_wpraw(all_group_vars, picture_path, DEBUG=False): try: # --- wpraw