Show
Ignore:
Timestamp:
04/22/09 17:46:24 (5 years ago)
Author:
robert
Message:

From Neil Hughes, converted across to use istream for reading data from file to enable reading .3ds files over http (use OSG's libcurl plugin).

From Robert Osfield, ammendments of the above to better support reading of files from local directories.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/3ds/viewport.cpp

    r9397 r10076  
    3939 */ 
    4040Lib3dsBool 
    41 lib3ds_viewport_read(Lib3dsViewport *viewport, FILE *f) 
     41lib3ds_viewport_read(Lib3dsViewport *viewport, iostream *strm) 
    4242{ 
    4343  Lib3dsChunk c; 
    4444  Lib3dsWord chunk; 
    4545 
    46   if (!lib3ds_chunk_read_start(&c, 0, f)) { 
     46  if (!lib3ds_chunk_read_start(&c, 0, strm)) { 
    4747    return(LIB3DS_FALSE); 
    4848  } 
     
    5252      { 
    5353        int cur=0; 
    54         viewport->layout.style=lib3ds_word_read(f); 
    55         viewport->layout.active=lib3ds_intw_read(f); 
    56         lib3ds_intw_read(f); 
    57         viewport->layout.swap=lib3ds_intw_read(f); 
    58         lib3ds_intw_read(f); 
    59         viewport->layout.swap_prior=lib3ds_intw_read(f); 
    60         viewport->layout.swap_view=lib3ds_intw_read(f); 
    61         lib3ds_chunk_read_tell(&c, f); 
    62         while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { 
     54        viewport->layout.style=lib3ds_word_read(strm); 
     55        viewport->layout.active=lib3ds_intw_read(strm); 
     56        lib3ds_intw_read(strm); 
     57        viewport->layout.swap=lib3ds_intw_read(strm); 
     58        lib3ds_intw_read(strm); 
     59        viewport->layout.swap_prior=lib3ds_intw_read(strm); 
     60        viewport->layout.swap_view=lib3ds_intw_read(strm); 
     61        lib3ds_chunk_read_tell(&c, strm); 
     62        while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 
    6363          switch (chunk) { 
    6464            case LIB3DS_VIEWPORT_SIZE: 
    6565              { 
    66                 viewport->layout.position[0]=lib3ds_word_read(f); 
    67                 viewport->layout.position[1]=lib3ds_word_read(f); 
    68                 viewport->layout.size[0]=lib3ds_word_read(f); 
    69                 viewport->layout.size[1]=lib3ds_word_read(f); 
     66                viewport->layout.position[0]=lib3ds_word_read(strm); 
     67                viewport->layout.position[1]=lib3ds_word_read(strm); 
     68                viewport->layout.size[0]=lib3ds_word_read(strm); 
     69                viewport->layout.size[1]=lib3ds_word_read(strm); 
    7070              } 
    7171              break; 
     
    7373              { 
    7474                lib3ds_viewport_set_views(viewport,cur+1); 
    75                 lib3ds_intw_read(f); 
    76                 viewport->layout.viewL[cur].axis_lock=lib3ds_word_read(f); 
    77                 viewport->layout.viewL[cur].position[0]=lib3ds_intw_read(f); 
    78                 viewport->layout.viewL[cur].position[1]=lib3ds_intw_read(f); 
    79                 viewport->layout.viewL[cur].size[0]=lib3ds_intw_read(f); 
    80                 viewport->layout.viewL[cur].size[1]=lib3ds_intw_read(f); 
    81                 viewport->layout.viewL[cur].type=lib3ds_word_read(f); 
    82                 viewport->layout.viewL[cur].zoom=lib3ds_float_read(f); 
    83                 lib3ds_vector_read(viewport->layout.viewL[cur].center,f); 
    84                 viewport->layout.viewL[cur].horiz_angle=lib3ds_float_read(f); 
    85                 viewport->layout.viewL[cur].vert_angle=lib3ds_float_read(f); 
    86  
    87                 int result = fread(viewport->layout.viewL[cur].camera,11,1,f); 
    88                 if (result==0) return (LIB3DS_FALSE); 
    89  
     75                lib3ds_intw_read(strm); 
     76                viewport->layout.viewL[cur].axis_lock=lib3ds_word_read(strm); 
     77                viewport->layout.viewL[cur].position[0]=lib3ds_intw_read(strm); 
     78                viewport->layout.viewL[cur].position[1]=lib3ds_intw_read(strm); 
     79                viewport->layout.viewL[cur].size[0]=lib3ds_intw_read(strm); 
     80                viewport->layout.viewL[cur].size[1]=lib3ds_intw_read(strm); 
     81                viewport->layout.viewL[cur].type=lib3ds_word_read(strm); 
     82                viewport->layout.viewL[cur].zoom=lib3ds_float_read(strm); 
     83                lib3ds_vector_read(viewport->layout.viewL[cur].center,strm); 
     84                viewport->layout.viewL[cur].horiz_angle=lib3ds_float_read(strm); 
     85                viewport->layout.viewL[cur].vert_angle=lib3ds_float_read(strm); 
     86                strm->read(viewport->layout.viewL[cur].camera,11); 
    9087                ++cur; 
    9188              } 
     
    104101      { 
    105102        memset(&viewport->default_view,0,sizeof(Lib3dsDefaultView)); 
    106         while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { 
     103        while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 
    107104          switch (chunk) { 
    108105            case LIB3DS_VIEW_TOP: 
    109106              { 
    110107                viewport->default_view.type=LIB3DS_VIEW_TYPE_TOP; 
    111                 lib3ds_vector_read(viewport->default_view.position,f); 
    112                 viewport->default_view.width=lib3ds_float_read(f); 
     108                lib3ds_vector_read(viewport->default_view.position,strm); 
     109                viewport->default_view.width=lib3ds_float_read(strm); 
    113110              } 
    114111              break; 
     
    116113              { 
    117114                viewport->default_view.type=LIB3DS_VIEW_TYPE_BOTTOM; 
    118                 lib3ds_vector_read(viewport->default_view.position,f); 
    119                 viewport->default_view.width=lib3ds_float_read(f); 
     115                lib3ds_vector_read(viewport->default_view.position,strm); 
     116                viewport->default_view.width=lib3ds_float_read(strm); 
    120117              } 
    121118              break; 
     
    123120              { 
    124121                viewport->default_view.type=LIB3DS_VIEW_TYPE_LEFT; 
    125                 lib3ds_vector_read(viewport->default_view.position,f); 
    126                 viewport->default_view.width=lib3ds_float_read(f); 
     122                lib3ds_vector_read(viewport->default_view.position,strm); 
     123                viewport->default_view.width=lib3ds_float_read(strm); 
    127124              } 
    128125              break; 
     
    130127              { 
    131128                viewport->default_view.type=LIB3DS_VIEW_TYPE_RIGHT; 
    132                 lib3ds_vector_read(viewport->default_view.position,f); 
    133                 viewport->default_view.width=lib3ds_float_read(f); 
     129                lib3ds_vector_read(viewport->default_view.position,strm); 
     130                viewport->default_view.width=lib3ds_float_read(strm); 
    134131              } 
    135132              break; 
     
    137134              { 
    138135                viewport->default_view.type=LIB3DS_VIEW_TYPE_FRONT; 
    139                 lib3ds_vector_read(viewport->default_view.position,f); 
    140                 viewport->default_view.width=lib3ds_float_read(f); 
     136                lib3ds_vector_read(viewport->default_view.position,strm); 
     137                viewport->default_view.width=lib3ds_float_read(strm); 
    141138              } 
    142139              break; 
     
    144141              { 
    145142                viewport->default_view.type=LIB3DS_VIEW_TYPE_BACK; 
    146                 lib3ds_vector_read(viewport->default_view.position,f); 
    147                 viewport->default_view.width=lib3ds_float_read(f); 
     143                lib3ds_vector_read(viewport->default_view.position,strm); 
     144                viewport->default_view.width=lib3ds_float_read(strm); 
    148145              } 
    149146              break; 
     
    151148              { 
    152149                viewport->default_view.type=LIB3DS_VIEW_TYPE_USER; 
    153                 lib3ds_vector_read(viewport->default_view.position,f); 
    154                 viewport->default_view.width=lib3ds_float_read(f); 
    155                 viewport->default_view.horiz_angle=lib3ds_float_read(f); 
    156                 viewport->default_view.vert_angle=lib3ds_float_read(f); 
    157                 viewport->default_view.roll_angle=lib3ds_float_read(f); 
     150                lib3ds_vector_read(viewport->default_view.position,strm); 
     151                viewport->default_view.width=lib3ds_float_read(strm); 
     152                viewport->default_view.horiz_angle=lib3ds_float_read(strm); 
     153                viewport->default_view.vert_angle=lib3ds_float_read(strm); 
     154                viewport->default_view.roll_angle=lib3ds_float_read(strm); 
    158155              } 
    159156              break; 
     
    161158              { 
    162159                viewport->default_view.type=LIB3DS_VIEW_TYPE_CAMERA; 
    163                 int result = fread(viewport->default_view.camera,11,1,f); 
    164                 if (result==0) return (LIB3DS_FALSE); 
     160                strm->read(viewport->default_view.camera,11); 
    165161              } 
    166162              break; 
     
    173169  } 
    174170 
    175   lib3ds_chunk_read_end(&c, f); 
     171  lib3ds_chunk_read_end(&c, strm); 
    176172  return(LIB3DS_TRUE); 
    177173} 
     
    207203 */ 
    208204Lib3dsBool 
    209 lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) 
     205lib3ds_viewport_write(Lib3dsViewport *viewport, iostream *strm) 
    210206{ 
    211207  if (viewport->layout.views) { 
     
    214210 
    215211    c.chunk=LIB3DS_VIEWPORT_LAYOUT; 
    216     if (!lib3ds_chunk_write_start(&c,f)) { 
     212    if (!lib3ds_chunk_write_start(&c,strm)) { 
    217213      return(LIB3DS_FALSE); 
    218214    } 
    219215 
    220     lib3ds_word_write(viewport->layout.style,f); 
    221     lib3ds_intw_write(viewport->layout.active,f); 
    222     lib3ds_intw_write(0,f); 
    223     lib3ds_intw_write(viewport->layout.swap,f); 
    224     lib3ds_intw_write(0,f); 
    225     lib3ds_intw_write(viewport->layout.swap_prior,f); 
    226     lib3ds_intw_write(viewport->layout.swap_view,f); 
     216    lib3ds_word_write(viewport->layout.style,strm); 
     217    lib3ds_intw_write(viewport->layout.active,strm); 
     218    lib3ds_intw_write(0,strm); 
     219    lib3ds_intw_write(viewport->layout.swap,strm); 
     220    lib3ds_intw_write(0,strm); 
     221    lib3ds_intw_write(viewport->layout.swap_prior,strm); 
     222    lib3ds_intw_write(viewport->layout.swap_view,strm); 
    227223     
    228224    { 
     
    230226      c.chunk=LIB3DS_VIEWPORT_SIZE; 
    231227      c.size=14; 
    232       lib3ds_chunk_write(&c,f); 
    233       lib3ds_intw_write(viewport->layout.position[0],f); 
    234       lib3ds_intw_write(viewport->layout.position[1],f); 
    235       lib3ds_intw_write(viewport->layout.size[0],f); 
    236       lib3ds_intw_write(viewport->layout.size[1],f); 
     228      lib3ds_chunk_write(&c,strm); 
     229      lib3ds_intw_write(viewport->layout.position[0],strm); 
     230      lib3ds_intw_write(viewport->layout.position[1],strm); 
     231      lib3ds_intw_write(viewport->layout.size[0],strm); 
     232      lib3ds_intw_write(viewport->layout.size[1],strm); 
    237233    } 
    238234 
     
    241237      c.chunk=LIB3DS_VIEWPORT_DATA_3; 
    242238      c.size=55; 
    243       lib3ds_chunk_write(&c,f); 
    244  
    245       lib3ds_intw_write(0,f); 
    246       lib3ds_word_write(viewport->layout.viewL[i].axis_lock,f); 
    247       lib3ds_intw_write(viewport->layout.viewL[i].position[0],f); 
    248       lib3ds_intw_write(viewport->layout.viewL[i].position[1],f); 
    249       lib3ds_intw_write(viewport->layout.viewL[i].size[0],f); 
    250       lib3ds_intw_write(viewport->layout.viewL[i].size[1],f); 
    251       lib3ds_word_write(viewport->layout.viewL[i].type,f); 
    252       lib3ds_float_write(viewport->layout.viewL[i].zoom,f); 
    253       lib3ds_vector_write(viewport->layout.viewL[i].center,f); 
    254       lib3ds_float_write(viewport->layout.viewL[i].horiz_angle,f); 
    255       lib3ds_float_write(viewport->layout.viewL[i].vert_angle,f); 
    256       int result = fwrite(viewport->layout.viewL[i].camera,11,1,f); 
    257       if (result==0) return (LIB3DS_FALSE); 
    258     } 
    259  
    260     if (!lib3ds_chunk_write_end(&c,f)) { 
     239      lib3ds_chunk_write(&c,strm); 
     240 
     241      lib3ds_intw_write(0,strm); 
     242      lib3ds_word_write(viewport->layout.viewL[i].axis_lock,strm); 
     243      lib3ds_intw_write(viewport->layout.viewL[i].position[0],strm); 
     244      lib3ds_intw_write(viewport->layout.viewL[i].position[1],strm); 
     245      lib3ds_intw_write(viewport->layout.viewL[i].size[0],strm); 
     246      lib3ds_intw_write(viewport->layout.viewL[i].size[1],strm); 
     247      lib3ds_word_write(viewport->layout.viewL[i].type,strm); 
     248      lib3ds_float_write(viewport->layout.viewL[i].zoom,strm); 
     249      lib3ds_vector_write(viewport->layout.viewL[i].center,strm); 
     250      lib3ds_float_write(viewport->layout.viewL[i].horiz_angle,strm); 
     251      lib3ds_float_write(viewport->layout.viewL[i].vert_angle,strm); 
     252      strm->write(viewport->layout.viewL[i].camera,11); 
     253    } 
     254 
     255    if (!lib3ds_chunk_write_end(&c,strm)) { 
    261256      return(LIB3DS_FALSE); 
    262257    } 
     
    267262 
    268263    c.chunk=LIB3DS_DEFAULT_VIEW; 
    269     if (!lib3ds_chunk_write_start(&c,f)) { 
     264    if (!lib3ds_chunk_write_start(&c,strm)) { 
    270265      return(LIB3DS_FALSE); 
    271266    } 
     
    277272          c.chunk=LIB3DS_VIEW_TOP; 
    278273          c.size=22; 
    279           lib3ds_chunk_write(&c,f); 
    280           lib3ds_vector_write(viewport->default_view.position,f); 
    281           lib3ds_float_write(viewport->default_view.width,f); 
     274          lib3ds_chunk_write(&c,strm); 
     275          lib3ds_vector_write(viewport->default_view.position,strm); 
     276          lib3ds_float_write(viewport->default_view.width,strm); 
    282277        } 
    283278        break; 
     
    287282          c.chunk=LIB3DS_VIEW_BOTTOM; 
    288283          c.size=22; 
    289           lib3ds_chunk_write(&c,f); 
    290           lib3ds_vector_write(viewport->default_view.position,f); 
    291           lib3ds_float_write(viewport->default_view.width,f); 
     284          lib3ds_chunk_write(&c,strm); 
     285          lib3ds_vector_write(viewport->default_view.position,strm); 
     286          lib3ds_float_write(viewport->default_view.width,strm); 
    292287        } 
    293288        break; 
     
    297292          c.chunk=LIB3DS_VIEW_LEFT; 
    298293          c.size=22; 
    299           lib3ds_chunk_write(&c,f); 
    300           lib3ds_vector_write(viewport->default_view.position,f); 
    301           lib3ds_float_write(viewport->default_view.width,f); 
     294          lib3ds_chunk_write(&c,strm); 
     295          lib3ds_vector_write(viewport->default_view.position,strm); 
     296          lib3ds_float_write(viewport->default_view.width,strm); 
    302297        } 
    303298        break; 
     
    307302          c.chunk=LIB3DS_VIEW_RIGHT; 
    308303          c.size=22; 
    309           lib3ds_chunk_write(&c,f); 
    310           lib3ds_vector_write(viewport->default_view.position,f); 
    311           lib3ds_float_write(viewport->default_view.width,f); 
     304          lib3ds_chunk_write(&c,strm); 
     305          lib3ds_vector_write(viewport->default_view.position,strm); 
     306          lib3ds_float_write(viewport->default_view.width,strm); 
    312307        } 
    313308        break; 
     
    317312          c.chunk=LIB3DS_VIEW_FRONT; 
    318313          c.size=22; 
    319           lib3ds_chunk_write(&c,f); 
    320           lib3ds_vector_write(viewport->default_view.position,f); 
    321           lib3ds_float_write(viewport->default_view.width,f); 
     314          lib3ds_chunk_write(&c,strm); 
     315          lib3ds_vector_write(viewport->default_view.position,strm); 
     316          lib3ds_float_write(viewport->default_view.width,strm); 
    322317        } 
    323318        break; 
     
    327322          c.chunk=LIB3DS_VIEW_BACK; 
    328323          c.size=22; 
    329           lib3ds_chunk_write(&c,f); 
    330           lib3ds_vector_write(viewport->default_view.position,f); 
    331           lib3ds_float_write(viewport->default_view.width,f); 
     324          lib3ds_chunk_write(&c,strm); 
     325          lib3ds_vector_write(viewport->default_view.position,strm); 
     326          lib3ds_float_write(viewport->default_view.width,strm); 
    332327        } 
    333328        break; 
     
    337332          c.chunk=LIB3DS_VIEW_USER; 
    338333          c.size=34; 
    339           lib3ds_chunk_write(&c,f); 
    340           lib3ds_vector_write(viewport->default_view.position,f); 
    341           lib3ds_float_write(viewport->default_view.width,f); 
    342           lib3ds_float_write(viewport->default_view.horiz_angle,f); 
    343           lib3ds_float_write(viewport->default_view.vert_angle,f); 
    344           lib3ds_float_write(viewport->default_view.roll_angle,f); 
     334          lib3ds_chunk_write(&c,strm); 
     335          lib3ds_vector_write(viewport->default_view.position,strm); 
     336          lib3ds_float_write(viewport->default_view.width,strm); 
     337          lib3ds_float_write(viewport->default_view.horiz_angle,strm); 
     338          lib3ds_float_write(viewport->default_view.vert_angle,strm); 
     339          lib3ds_float_write(viewport->default_view.roll_angle,strm); 
    345340        } 
    346341        break; 
     
    350345          c.chunk=LIB3DS_VIEW_CAMERA; 
    351346          c.size=17; 
    352           lib3ds_chunk_write(&c,f); 
    353           int result = fwrite(viewport->default_view.camera,1,11,f); 
    354           if (result==0) return (LIB3DS_FALSE); 
    355         } 
    356         break; 
    357     } 
    358  
    359     if (!lib3ds_chunk_write_end(&c,f)) { 
     347          lib3ds_chunk_write(&c,strm); 
     348          strm->write(viewport->default_view.camera,11); // NAH Potential issue here 
     349        } 
     350        break; 
     351    } 
     352 
     353    if (!lib3ds_chunk_write_end(&c,strm)) { 
    360354      return(LIB3DS_FALSE); 
    361355    }