카테고리 없음

[FDF] ft_make_layer_dot

Or71nH 2022. 6. 27. 09:35

https://github.com/liebespaar93/FDF/tree/layer_dot

 

GitHub - liebespaar93/FDF

Contribute to liebespaar93/FDF development by creating an account on GitHub.

github.com

 

예제 코드를 만들었다

 

#include <ft_dot.h>

t_dot *makedot(char *file_name)
{
    t_dot   *head_dot;
    t_oneline   *head_oneline;
	t_xyz	position;
    int     *layer_1D;
	int		x_len;
	
	ft_memset(&position, 0, sizeof(position));
    head_oneline = readfile(file_name);
    if (!head_oneline)
        return (NULL);

	head_dot = NULL;
	while (head_oneline)
	{
		layer_1D = ft_make_layer_1D(head_oneline, &x_len);
		head_dot = ft_dot_make_line(head_dot, position, layer_1D, x_len);
		head_oneline = head_oneline->next;
		position.y++;
	}
	while (--position.y)
		head_dot = head_dot->y_p;
	return (head_dot);
}

 

#include <ft_dot.h>

t_dot	*ft_make_dot_while(t_oneline *head_oneline, t_xyz *position)
{
    t_dot   *head_dot;
    int     *layer_1D;
	int		x_len;
	int		y_len;

	head_dot = NULL;
	y_len = 0;
	x_len = 0;
	while (head_oneline)
	{
		layer_1D = ft_make_layer_1D(head_oneline, &x_len);
		head_dot = ft_dot_make_line(head_dot, *position, layer_1D, x_len);
		free(layer_1D);
		head_oneline = head_oneline->next;
		position->y++;
		y_len++;
	}
	while (--y_len && head_dot)
		head_dot = head_dot->y_p;
	return (head_dot);
}

t_dot *makedot(char *file_name)
{
    t_dot   *head_dot;
    t_oneline   *head_oneline;
	t_xyz	position;
    int     *layer_1D;
	
	ft_memset(&position, 0, sizeof(position));
    head_oneline = readfile(file_name);
	head_dot = NULL;
	if (!head_oneline)
		return (NULL);
	head_dot = ft_make_dot_while(head_oneline, &position);
	ft_free_oneline(&head_oneline);
	return (head_dot);
}

새거 만들어 주는거

#include <ft_dot.h>

t_dot *ft_dot_make_line(t_dot *dot_ptr, t_xyz position, int *layer_1D, int x_len)
{
	t_dot	*new_dot_ptr;
	int	index;

	index = 0;
	new_dot_ptr = NULL;
	while (index++ < x_len)
	{
		new_dot_ptr = ft_dot_add_x(&new_dot_ptr, ft_new_dot(*layer_1D++, &position), 1);
		if (dot_ptr)
		{
			ft_dot_add_y(&dot_ptr, new_dot_ptr, -1);
			dot_ptr = dot_ptr->x_p;
		}
	}
	while (--index && new_dot_ptr->x_m)
		new_dot_ptr = new_dot_ptr->x_m;
	return (new_dot_ptr);
}

여기가 좀 중요하다 일단 한줄을 만들고 이으면 느리다 그래서 뜨게질 처럼 이어주는거다 

위에꺼 있으면 이어가면서 만들기

#include <ft_dot.h>

t_dot *ft_dot_add_x(t_dot **dot_ptr, t_dot *new_dot, int sign)
{
    if (!*dot_ptr)
    {
        *dot_ptr = new_dot;
        return (*dot_ptr);
    }
    if (sign > 0)
    {
        (*dot_ptr)->x_p = new_dot;
        new_dot->x_m = *dot_ptr;
    }
    else if (sign < 0)
    {
        (*dot_ptr)->x_m = new_dot;
        new_dot->x_p = *dot_ptr;
    }
    else
        return (*dot_ptr);
    return (new_dot);
}

t_dot *ft_dot_add_y(t_dot **dot_ptr, t_dot *new_dot, int sign)
{
    if (!*dot_ptr)
    {
        *dot_ptr = new_dot;
        return (*dot_ptr);
    }
    if (sign > 0)
    {
        (*dot_ptr)->y_p = new_dot;
        new_dot->y_m = *dot_ptr;
    }
    else if (sign < 0)
    {
        (*dot_ptr)->y_m = new_dot;
        new_dot->y_p = *dot_ptr;
    }
    else
        return (*dot_ptr);
    return (new_dot);
}

t_dot *ft_dot_add_z(t_dot **dot_ptr, t_dot *new_dot, int sign)
{
    if (!*dot_ptr)
    {
        *dot_ptr = new_dot;
        return (*dot_ptr);
    }
    if (sign > 0)
    {
        (*dot_ptr)->z_p = new_dot;
        new_dot->z_m = *dot_ptr;
    }
    else if (sign < 0)
    {
        (*dot_ptr)->z_m = new_dot;
        new_dot->z_p = *dot_ptr;
    }
    else
        return (*dot_ptr);
    return (new_dot);
}

점끼리 양쪽으로 이어주는 거

이렇게 dot 으로 잘이어 실행해 보았다

역시 점이 좀더 자유롭다 예를들어 가로 세로가 맞지 않아도 서로 이을수 있다

kyoulee@kyouleeui-MacBookAir FDF % ./a.out
1       2       3       4       5       6       7       8       9       10      11
11      12      13      14      15      16      17      18      19      20
21      22      23      24      25      26      27      28      29      30      31
31      32      33      34      35      36      37      38      39      40
41      42      43      44      45      46      47      48      49      50
51      52      53      54      55      56      57      58      59      60
61      62      63      64      65      66      67      68      69      70
71      72      73      74      75      76      77      78      79      80
81      82      83      84      85      86      87      88      89      90
91      92      93      94      95      96      97      98      99      100