Add resizing of objects
authorLukas Jiriste <ljiriste@student.42prague.com>
Wed, 8 Jan 2025 13:10:37 +0000 (14:10 +0100)
committerLukas Jiriste <ljiriste@student.42prague.com>
Wed, 8 Jan 2025 13:10:37 +0000 (14:10 +0100)
inc/miniRT.h
src/main.c
src/manipulation.c

index bb81993efaa28b11ad94d7d8b5963670343679cb..00ec132b13e56e36c5f60ae391dbff60b50db953 100644 (file)
@@ -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
index 04585dea46e6c82a4c8db9ee40f42cf276d44345..40dc02af434b3ae0cd5a7910ff856f143de511f2 100644 (file)
@@ -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)
index e4bef9aae0e2957e854e8d9fa9753c12e29d39ea..98283c669a6965ae300a1cfe8de98b4e381d4b64 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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 ;
+}