working on the .OBJ parser
This commit is contained in:
parent
02c13e0613
commit
bcd64245d2
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
#define LIBBB_VERSION 55
|
#define LIBBB_VERSION 56
|
||||||
|
|
||||||
#define SZ_BUBULLE_TEXT 51 /* arbitrary value */
|
#define SZ_BUBULLE_TEXT 51 /* arbitrary value */
|
||||||
|
|
||||||
|
87
importobj.c
87
importobj.c
@ -15,13 +15,66 @@ extern int verbosity;
|
|||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
#define LINE_SZ 666
|
#define LINE_SZ 666
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *token;
|
||||||
|
int id;
|
||||||
|
} Tokens;
|
||||||
|
|
||||||
|
enum token_id { T_comment=1, T_vertice };
|
||||||
|
|
||||||
|
Tokens TokenList[] = {
|
||||||
|
{ "#", T_comment },
|
||||||
|
{ "v", T_vertice },
|
||||||
|
{ NULL, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
static int type_of_the_line(char *text)
|
||||||
|
{
|
||||||
|
Tokens *token;
|
||||||
|
int id;
|
||||||
|
|
||||||
|
#if DEBUG_LEVEL
|
||||||
|
fprintf(stderr, "%s is searching '%s'\n", __func__, text);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (token=TokenList; token->token; token++) {
|
||||||
|
// fprintf(stderr, " %5s -> %d\n", token->token, token->id);
|
||||||
|
if (!strcmp(token->token, text)) {
|
||||||
|
return token->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
static int parse_vertice(char *cptr, float *px, float *py, float *pz)
|
||||||
|
{
|
||||||
|
float x, y, z;
|
||||||
|
int foo;
|
||||||
|
|
||||||
|
foo = 0;
|
||||||
|
cptr = strtok(NULL, " ");
|
||||||
|
foo += sscanf(cptr, "%f", &x);
|
||||||
|
cptr = strtok(NULL, " ");
|
||||||
|
foo += sscanf(cptr, "%f", &y);
|
||||||
|
cptr = strtok(NULL, " ");
|
||||||
|
foo += sscanf(cptr, "%f", &z);
|
||||||
|
|
||||||
|
if (3 == foo) {
|
||||||
|
*px = x; *py = y; *pz = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
return foo;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
int try_to_read_an_OBJ_file(char *fname, int notused)
|
int try_to_read_an_OBJ_file(char *fname, int notused)
|
||||||
{
|
{
|
||||||
FILE *fpin;
|
FILE *fpin;
|
||||||
char line[LINE_SZ+1], *cptr;
|
char line[LINE_SZ+1], *cptr;
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
int foo, nbre;
|
int foo, nbre, tokenid;
|
||||||
BBList *bublist;
|
BBList *bublist;
|
||||||
Bubulle bubulle;
|
Bubulle bubulle;
|
||||||
|
|
||||||
@ -44,24 +97,38 @@ print_bublist_desc(bublist, 0);
|
|||||||
nbre = 0;
|
nbre = 0;
|
||||||
while(NULL!=(cptr=fgets(line, LINE_SZ, fpin))) {
|
while(NULL!=(cptr=fgets(line, LINE_SZ, fpin))) {
|
||||||
|
|
||||||
if (verbosity>1) fputs(line, stderr);
|
if ('\n' != line[strlen(line)-1]) {
|
||||||
|
fprintf(stderr, "%s: short read, exiting...\n", __func__);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
line[strlen(line)-1] = '\0'; /* kill the newline */
|
||||||
|
if (verbosity>1) fprintf(stderr, "line read ===%s===\n", line);
|
||||||
|
|
||||||
cptr = strtok(line, " ");
|
cptr = strtok(line, " ");
|
||||||
if (strcmp(cptr, "v")) continue;
|
if (NULL == cptr) {
|
||||||
|
fprintf(stderr, "no token ?\n");
|
||||||
cptr = strtok(NULL, " ");
|
continue;
|
||||||
foo = sscanf(cptr, "%f", &x);
|
}
|
||||||
cptr = strtok(NULL, " ");
|
tokenid = type_of_the_line(cptr);
|
||||||
foo = sscanf(cptr, "%f", &y);
|
fprintf(stderr, "tok '%s' --> %d\n", cptr, tokenid);
|
||||||
cptr = strtok(NULL, " ");
|
|
||||||
foo = sscanf(cptr, "%f", &z);
|
|
||||||
|
|
||||||
memset(&bubulle, 0, sizeof(Bubulle));
|
memset(&bubulle, 0, sizeof(Bubulle));
|
||||||
|
|
||||||
|
switch (tokenid) {
|
||||||
|
case T_comment:
|
||||||
|
/* do nothing */
|
||||||
|
break;
|
||||||
|
case T_vertice:
|
||||||
|
foo = parse_vertice(cptr, &x, &y, &z);
|
||||||
bubulle.p.x = x;
|
bubulle.p.x = x;
|
||||||
bubulle.p.y = y;
|
bubulle.p.y = y;
|
||||||
bubulle.p.z = z;
|
bubulle.p.z = z;
|
||||||
if (verbosity > 1) niceprint_bubulle(&bubulle, 0);
|
if (verbosity > 1) niceprint_bubulle(&bubulle, 0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
|
||||||
|
continue; /* wtf ? */
|
||||||
|
}
|
||||||
|
|
||||||
foo = push_bubulle(bublist, &bubulle);
|
foo = push_bubulle(bublist, &bubulle);
|
||||||
if (foo) {
|
if (foo) {
|
||||||
|
@ -18,7 +18,7 @@ if (2 != argc) {
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
verbosity = 1;
|
verbosity = 2;
|
||||||
|
|
||||||
foo = try_to_read_an_OBJ_file(argv[1], 0);
|
foo = try_to_read_an_OBJ_file(argv[1], 0);
|
||||||
fprintf(stderr, "try to read -> %d\n", foo);
|
fprintf(stderr, "try to read -> %d\n", foo);
|
||||||
|
Loading…
Reference in New Issue
Block a user