? fix_node_hierarchie.patch
? fix_node_id.patch
Index: lib3ds/file.c
===================================================================
RCS file: /cvsroot/lib3ds/lib3ds/lib3ds/file.c,v
retrieving revision 1.32
diff -u -8 -p -r1.32 file.c
--- lib3ds/file.c	15 Jun 2007 09:33:19 -0000	1.32
+++ lib3ds/file.c	19 Jun 2007 15:23:38 -0000
@@ -589,16 +589,17 @@ mdata_read(Lib3dsFile *file, Lib3dsIo *i
 }
 
 
 static Lib3dsBool
 kfdata_read(Lib3dsFile *file, Lib3dsIo *io)
 {
   Lib3dsChunk c;
   Lib3dsWord chunk;
+  int n = 0;
 
   if (!lib3ds_chunk_read_start(&c, LIB3DS_KFDATA, io)) {
     return(LIB3DS_FALSE);
   }
   
   while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) {
     switch (chunk) {
       case LIB3DS_KFHDR:
@@ -633,92 +634,98 @@ kfdata_read(Lib3dsFile *file, Lib3dsIo *
       case LIB3DS_AMBIENT_NODE_TAG:
         {
           Lib3dsNode *node;
 
           node=lib3ds_node_new_ambient();
           if (!node) {
             return(LIB3DS_FALSE);
           }
+          node->node_id = n ++;
           lib3ds_chunk_read_reset(&c, io);
           if (!lib3ds_node_read(node, file, io)) {
             return(LIB3DS_FALSE);
           }
           lib3ds_file_insert_node(file, node);
         }
         break;
       case LIB3DS_OBJECT_NODE_TAG:
         {
           Lib3dsNode *node;
 
           node=lib3ds_node_new_object();
           if (!node) {
             return(LIB3DS_FALSE);
           }
+          node->node_id = n ++;
           lib3ds_chunk_read_reset(&c, io);
           if (!lib3ds_node_read(node, file, io)) {
             return(LIB3DS_FALSE);
           }
           lib3ds_file_insert_node(file, node);
         }
         break;
       case LIB3DS_CAMERA_NODE_TAG:
         {
           Lib3dsNode *node;
 
           node=lib3ds_node_new_camera();
           if (!node) {
             return(LIB3DS_FALSE);
           }
+          node->node_id = n ++;
           lib3ds_chunk_read_reset(&c, io);
           if (!lib3ds_node_read(node, file, io)) {
             return(LIB3DS_FALSE);
           }
           lib3ds_file_insert_node(file, node);
         }
         break;
       case LIB3DS_TARGET_NODE_TAG:
         {
           Lib3dsNode *node;
 
           node=lib3ds_node_new_target();
           if (!node) {
             return(LIB3DS_FALSE);
           }
+          node->node_id = n ++;
           lib3ds_chunk_read_reset(&c, io);
           if (!lib3ds_node_read(node, file, io)) {
             return(LIB3DS_FALSE);
           }
           lib3ds_file_insert_node(file, node);
         }
         break;
       case LIB3DS_LIGHT_NODE_TAG:
       case LIB3DS_SPOTLIGHT_NODE_TAG:
         {
           Lib3dsNode *node;
 
           node=lib3ds_node_new_light();
           if (!node) {
             return(LIB3DS_FALSE);
           }
+          node->node_id = n ++;
           lib3ds_chunk_read_reset(&c, io);
           if (!lib3ds_node_read(node, file, io)) {
             return(LIB3DS_FALSE);
           }
           lib3ds_file_insert_node(file, node);
         }
         break;
       case LIB3DS_L_TARGET_NODE_TAG:
         {
           Lib3dsNode *node;
 
           node=lib3ds_node_new_spot();
           if (!node) {
             return(LIB3DS_FALSE);
           }
+          node->node_id = n ++;
           lib3ds_chunk_read_reset(&c, io);
           if (!lib3ds_node_read(node, file, io)) {
             return(LIB3DS_FALSE);
           }
           lib3ds_file_insert_node(file, node);
         }
         break;
       default:
