DMU50_GUI_PY/funct_grp.py
2025-03-03 11:08:19 +01:00

89 lines
3.1 KiB
Python

import matplotlib.pyplot as plt
import numpy as np
def generate_picture_grp(all_group_vars, picture_path, DEBUG=False):
try:
# Extract variables for the gripper
vars = all_group_vars['grp']
h_offset = float(vars['h_offset'])
h_step = float(vars['h_step'])
w_offset = float(vars['w_offset'])
w_step = float(vars['w_step'])
steps_num = int(vars['steps_num'])
# ERROR HANDLING
if h_step <= 0 or w_step <= 0 or steps_num <= 0:
raise ValueError("h_step, w_step, and steps_num must be positive values.")
# Initialize figure
fig, ax = plt.subplots(figsize=(6, 6)) # Square figure
ax.set_aspect('equal')
# Draw the gripper finger
def draw_gripper(x_sign=1):
max_width = x_sign * (w_offset + w_step * (steps_num - 1))
current_height = h_offset
current_width = x_sign * w_offset
# Draw the first block
rect = plt.Rectangle((x_sign, 0), max_width - x_sign, h_offset, facecolor='black', linewidth=0)
ax.add_patch(rect)
# Draw the steps
for _ in range(steps_num):
rect = plt.Rectangle((current_width, current_height), max_width - current_width, h_step, facecolor='black', linewidth=0)
ax.add_patch(rect)
current_height += h_step
current_width += x_sign * w_step
# Draw original gripper finger and x flipped
draw_gripper()
draw_gripper(x_sign=-1)
# Plot the origin point at (0, 0)
ax.plot(0, 0, marker='o', markersize=10, color='red') # Red point at origin
# Flip the y-axis (invert it)
ax.invert_yaxis()
# Set equal aspect ratio to make grid cells look square
ax.set_aspect('equal')
# Hide major ticks and labels (only gridlines should be visible)
ax.set_xticks([])
ax.set_yticks([])
# Add a white border around the plot to ensure the outer gridlines are visible
fig.patch.set_facecolor('white')
plt.subplots_adjust(left=0.05, right=0.95, top=0.95, bottom=0.05) # Adjust padding for the white border
if not DEBUG:
# Save the figure to the specified picture path
plt.gca().set_aspect('equal', adjustable='box')
fig.savefig(picture_path, bbox_inches='tight', pad_inches=0.1, dpi=300, transparent=True)
else:
plt.show()
# Close the figure to free memory
plt.close()
except ValueError as ve:
# Handle value error (e.g., invalid input)
print(f"Invalid Input: Error: {ve}")
except Exception as e:
# Catch any other exceptions and show a generic error message
print(f"An error occurred while generating the gripper finger: {e}")
if __name__ == "__main__":
vars = {
'h_offset': 10,
'h_step': 5,
'w_offset': 20,
'w_step': 10,
'steps_num': 5
}
picture_path = "cfg_picture/TEST_gripper_finger.jpg"
generate_picture_grp(vars, picture_path, DEBUG=True)