From: Lukas Jiriste Date: Wed, 8 Jan 2025 13:10:37 +0000 (+0100) Subject: Add resizing of objects X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=3556c2ad8882e0169c88f716866fcb9ff022ec3b;p=42%2FminiRT.git Add resizing of objects --- diff --git a/inc/miniRT.h b/inc/miniRT.h index bb81993..00ec132 100644 --- a/inc/miniRT.h +++ b/inc/miniRT.h @@ -143,5 +143,7 @@ int parse_args(int argc, char **argv, t_session *s); int rotate(t_element *element, t_vec3 rot_axis, double angle); void translate(t_element *element, t_vec3 direction, double distance); +void change_radius(t_element *element, double change); +void change_height(t_element *element, double change); #endif // MINIRT_H diff --git a/src/main.c b/src/main.c index 04585de..40dc02a 100644 --- a/src/main.c +++ b/src/main.c @@ -137,6 +137,7 @@ int close_win(t_session *s) static const double TRANSLATION_STEP = 0.1; static const double ROTATION_STEP = 0.1; +static const double RESIZE_STEP = 0.1; static const t_vec3 X_VEC = {.x = 1, .y = 0, .z = 0}; static const t_vec3 Y_VEC = {.x = 0, .y = 1, .z = 0}; @@ -198,6 +199,14 @@ int handle_key_press(int keycode, t_session *s) rotate(element, forwards, -ROTATION_STEP); else if (keycode == XK_q) rotate(element, forwards, ROTATION_STEP); + else if (keycode == XK_r) + change_radius(element, RESIZE_STEP); + else if (keycode == XK_t) + change_radius(element, -RESIZE_STEP); + else if (keycode == XK_f) + change_height(element, RESIZE_STEP); + else if (keycode == XK_g) + change_height(element, -RESIZE_STEP); else if (keycode == XK_o) s->scene.relative_directions = !s->scene.relative_directions; if (keycode != XK_Escape && keycode != XK_A) diff --git a/src/manipulation.c b/src/manipulation.c index e4bef9a..98283c6 100644 --- a/src/manipulation.c +++ b/src/manipulation.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/06 09:48:43 by ljiriste #+# #+# */ -/* Updated: 2024/12/06 12:49:57 by ljiriste ### ########.fr */ +/* Updated: 2025/01/08 14:08:08 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,3 +65,33 @@ void translate(t_element *element, t_vec3 direction, double distance) *element_center = vec_add(*element_center, change); return ; } + +void change_radius(t_element *element, double change) +{ + double *radius; + + if (element->type == SPHERE) + radius = &element->object.sphere.radius; + else if (element->type == CYLINDER) + radius = &element->object.cylinder.radius; + else + return ; + *radius += change; + if (*radius < 0) + *radius = 0; + return ; +} + +void change_height(t_element *element, double change) +{ + double *height; + + if (element->type == CYLINDER) + height = &element->object.cylinder.height; + else + return ; + *height += change; + if (*height < 0) + *height = 0; + return ; +}