Compare commits

..

No commits in common. "d65d635577554bdec3cda918eec22e26d9b7c180" and "e2188897cfa3f68ecf392fbefa7c023988387f91" have entirely different histories.

3 changed files with 38 additions and 98 deletions

View File

@ -1,3 +1,4 @@
# Importer des fichiers .OBJ
* https://en.wikipedia.org/wiki/Wavefront_.obj_file
@ -19,9 +20,9 @@ en déduire les arètes (aka: edges).
Et à partir de cette analyse, nous allons générer un fichier
binaire contenant les points xyx, et les arêtes pointA-pointB.
Le format de ce fichier doit être considéré *opaque*.
il sera généré dans le $PWD en utilisant le basename du fichier .OBJ mais
avec l'extension `.evblob`.
Le format de ce fichier doit être considéré //opaque//.
il sera généré dans le $PWD avec le nom du fichier .OBJ mais
avec l'extension .evblob.
Ce n'est qu'une première étape, d'autres formats de sortie
pourront être implémentés.
@ -36,28 +37,16 @@ Deuxième étape : À partir du fichier .evblob généré à l'étape
précédente, nous allons créer (entre autres options ?)
un fichier utilisable par Povray. La première option a été
la génération des arêtes, nous aurons donc sur `stdout`
six nombres réels: xyz(pointA) et xyz(pointB) :
six nombres réels: xyz(pointA) et xyz(pointB).
```
25.2275466 19.5029792 -25.1227169 35.6406135 19.5029792 0.0166420
35.6406135 19.5029792 0.0166420 0.0881849 19.5029792 -35.5357818
0.0881849 19.5029792 -35.5357818 25.2275466 19.5029792 -25.1227169
```
Et là, c'est trop facile pour la suite, Unix sait le faire depuis
quarante ans.
Un petit [script Awk](./edges2cylinders.awk) fera l'affaire,
en toute simplicité.
Bien entendu, la même chose pourrait être faire pour les vertices,
ce qui nous remet dans la droite ligne orthodoxe des bubulles.
Et là, c'est trop facile, Unix le fait depuis quarante ans.
Un petit [script Awk](./edges2cylinders.awk) fera l'affaire.
## TODO LIST
* Songer à un système d'auto-scaler et de recentrage
* Comment générer un `.obj` à partir d'une image flottante ?
* Gérer les arêtes de longueur nulle (degenerated cylinder)
* Que faire des vertices qui ne sont pas utilisées par des faces ?
## rendu final

View File

@ -17,71 +17,22 @@
int verbosity;
/* --------------------------------------------------------------------- */
/* EXPERIMENTAL GRUIK-CODE !!! */
int printf_the_vertices(EdgesAndVertices *eav)
{
int idx;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p )\n", __func__, eav);
#endif
if (verbosity) fprintf(stderr, "fprinting %d vertices\n", eav->Blist->fidx);
for (idx=0; idx<eav->Blist->fidx; idx++) {
printf("%.9f %.9f %.9f\n",
eav->Blist->bbs[idx].p.x,
eav->Blist->bbs[idx].p.y,
eav->Blist->bbs[idx].p.z );
}
return 0;
}
/* --------------------------------------------------------------------- */
/* EXPERIMENTAL GRUIK-CODE !!! */
int printf_the_edges(EdgesAndVertices *eav)
{
int idx, a, b;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p )\n", __func__, eav);
#endif
if (verbosity) fprintf(stderr, "fprinting %d edges\n", eav->Elist->fidx);
/*
* OK we have (maybe) all the data in da place
* and we can spit all the edges to stdout
*/
for (idx=0; idx<eav->Elist->fidx; idx++) {
a = eav->Elist->edges[idx].A;
b = eav->Elist->edges[idx].B;
// fprintf(stderr, "%7d %7d\n", a, b);
printf("%.9f %.9f %.9f %.9f %.9f %.9f\n",
eav->Blist->bbs[a].p.x,
eav->Blist->bbs[a].p.y,
eav->Blist->bbs[a].p.z,
eav->Blist->bbs[b].p.x,
eav->Blist->bbs[b].p.y,
eav->Blist->bbs[b].p.z );
}
return 0; /* allway success ? */
}
/* --------------------------------------------------------------------- */
/* EXPERIMENTAL GRUIK-CODE !!! */
int load_and_printf_evblob(char *filename, int mode)
{
EdgesAndVertices eav;
int foo;
int foo, idx, a, b;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' %d )\n", __func__, filename, mode);
#endif
if (mode) {
fprintf(stderr, "W: in %s 'mode' must be zero, and was %d\n",
__func__, mode);
}
memset(&eav, 0, sizeof(EdgesAndVertices));
foo = x_load_vertedges(filename, &eav);
if (foo) {
@ -89,7 +40,7 @@ if (foo) {
return foo;
}
if (verbosity > 1) {
if (verbosity) {
fprintf(stderr, "vertices at %p\n", eav.Blist);
fprintf(stderr, "edges at %p\n", eav.Elist);
fprintf(stderr, "status is %d\n", eav.status);
@ -98,15 +49,24 @@ if (verbosity > 1) {
eav.Elist->fidx);
}
switch (mode) {
case 0:
printf_the_edges(&eav); break;
case 1:
printf_the_vertices(&eav); break;
default:
fprintf(stderr, "no way to do %d\n", mode);
exit(1);
break;
/*
* OK we have (maybe) all the data in da place
* and we can spit all the edges to stdout
*/
for (idx=0; idx<eav.Elist->fidx; idx++) {
a = eav.Elist->edges[idx].A;
b = eav.Elist->edges[idx].B;
// fprintf(stderr, "%7d %7d\n", a, b);
printf("%.9f %.9f %.9f %.9f %.9f %.9f\n",
eav.Blist->bbs[a].p.x,
eav.Blist->bbs[a].p.y,
eav.Blist->bbs[a].p.z,
eav.Blist->bbs[b].p.x,
eav.Blist->bbs[b].p.y,
eav.Blist->bbs[b].p.z );
}
return 0;
@ -115,7 +75,6 @@ return 0;
void help(void)
{
fprintf(stderr, "YOLO!\n");
/* XXX */
exit(0);
}
/* --------------------------------------------------------------------- */
@ -124,27 +83,19 @@ exit(0);
int main(int argc, char *argv[])
{
int opt, foo;
int outmode = 0;
fprintf(stderr, "### Export EVblob (%s %s)\n", __DATE__, __TIME__);
fprintf(stderr, "### EdgesAndVertices - %s %s\n", __DATE__, __TIME__);
verbosity = 0;
while ((opt = getopt(argc, argv, "ht:v")) != -1) {
while ((opt = getopt(argc, argv, "hv")) != -1) {
switch(opt) {
case 'h':
help(); break;
case 'v':
verbosity++; break;
case 't':
// fprintf(stderr, "t -> %s\n", optarg);
switch(optarg[0]) {
case 'e': outmode=0; break;
case 'v': outmode=1; break;
}
break;
default:
exit(1);
fprintf(stderr, "gni(%c)?\n", opt);
break;
}
}
@ -155,7 +106,7 @@ fprintf(stderr, "optind=%d argc=%d\n", optind, argc);
if (optind < argc) {
// fprintf(stderr, "ARG = %s\n", argv[optind]);
foo = load_and_printf_evblob(argv[optind], outmode);
foo = load_and_printf_evblob(argv[optind], 0);
if (foo) {
fprintf(stderr, "Error number %d on '%s'\n", foo, argv[optind]);
exit(1);

View File

@ -111,7 +111,7 @@ int ix, foo, a, b;
int pts[3];
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, cptr);
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, cptr, phy);
#endif
#if (0)
@ -183,7 +183,7 @@ Bubulle bubulle;
char *outfname, *baseptr;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' %d )\n\n", __func__, infname, outstyle);
fprintf(stderr, ">>> %s ( '%s' ... %d )\n\n", __func__, infname, notused);
#endif
/* get memory for generated output filename(s) */