Changeset 10076 for OpenSceneGraph/trunk/src/osgPlugins/3ds/file.cpp
- Timestamp:
- 04/22/09 17:46:24 (4 years ago)
- Files:
-
- 1 modified
-
OpenSceneGraph/trunk/src/osgPlugins/3ds/file.cpp (modified) (57 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgPlugins/3ds/file.cpp
r9124 r10076 38 38 #endif 39 39 40 #include <osgDB/FileUtils> 41 40 #include <istream> 41 #include <stdio.h> 42 //#include <strstream> 43 #include <sstream> 44 #include <fstream> 42 45 43 46 /*! … … 66 69 */ 67 70 Lib3dsFile* 68 lib3ds_file_load(const char *filename) 69 { 70 FILE *f; 71 Lib3dsFile *file; 72 73 f=osgDB::fopen(filename, "rb"); 74 if (!f) { 75 return(0); 76 } 77 file=lib3ds_file_new(); 78 if (!file) { 79 fclose(f); 80 return(0); 81 } 82 83 if (!lib3ds_file_read(file, f)) { 84 free(file); 85 fclose(f); 86 return(0); 87 } 88 fclose(f); 71 lib3ds_file_load(const char *filename, const osgDB::ReaderWriter::Options* options) 72 { 73 Lib3dsFile *file = NULL; 74 std::stringstream bufferedStream; 75 ifstream inputStream(filename,ios::in|ios::binary); 76 if (!inputStream.fail()) 77 { 78 bufferedStream.operator<<(inputStream.rdbuf()); 79 bufferedStream.seekp(ios_base::beg); 80 file = lib3ds_stream_load(&bufferedStream); 81 inputStream.close(); 82 } 89 83 return(file); 90 84 } 85 86 Lib3dsFile* 87 lib3ds_stream_load(iostream * strm) 88 { 89 Lib3dsFile *file = NULL; 90 if (strm) 91 { 92 file=lib3ds_file_new(); 93 if (file) 94 { 95 if (!lib3ds_file_read(file,strm)) 96 { 97 free(file); 98 file = NULL; 99 } 100 } 101 else 102 file = NULL; 103 } 104 return(file); 105 } 106 91 107 92 108 … … 107 123 lib3ds_file_save(Lib3dsFile *file, const char *filename) 108 124 { 109 FILE *f; 110 111 f=osgDB::fopen(filename, "wb"); 112 if (!f) { 125 fstream strm; 126 127 strm.open(filename,ios_base::out | ios_base::binary); 128 if (strm.fail()) return (LIB3DS_FALSE); 129 130 if (!lib3ds_file_write(file, &strm)) { 131 strm.close(); 113 132 return(LIB3DS_FALSE); 114 133 } 115 116 if (!lib3ds_file_write(file, f)) { 117 fclose(f); 118 return(LIB3DS_FALSE); 119 } 120 fclose(f); 134 strm.close(); 121 135 return(LIB3DS_TRUE); 122 136 } … … 214 228 215 229 static Lib3dsBool 216 named_object_read(Lib3dsFile *file, FILE *f)230 named_object_read(Lib3dsFile *file, iostream *strm) 217 231 { 218 232 Lib3dsChunk c; … … 220 234 Lib3dsWord chunk; 221 235 222 if (!lib3ds_chunk_read_start(&c, LIB3DS_NAMED_OBJECT, f)) {236 if (!lib3ds_chunk_read_start(&c, LIB3DS_NAMED_OBJECT, strm)) { 223 237 return(LIB3DS_FALSE); 224 238 } 225 if (!lib3ds_string_read(name, 64, f)) {239 if (!lib3ds_string_read(name, 64, strm)) { 226 240 return(LIB3DS_FALSE); 227 241 } 228 242 lib3ds_chunk_dump_info(" NAME=%s", name); 229 lib3ds_chunk_read_tell(&c, f);230 231 while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) {243 lib3ds_chunk_read_tell(&c, strm); 244 245 while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 232 246 switch (chunk) { 233 247 case LIB3DS_N_TRI_OBJECT: … … 239 253 return(LIB3DS_FALSE); 240 254 } 241 lib3ds_chunk_read_reset(&c, f);242 if (!lib3ds_mesh_read(mesh, f)) {255 lib3ds_chunk_read_reset(&c, strm); 256 if (!lib3ds_mesh_read(mesh, strm)) { 243 257 return(LIB3DS_FALSE); 244 258 } … … 254 268 return(LIB3DS_FALSE); 255 269 } 256 lib3ds_chunk_read_reset(&c, f);257 if (!lib3ds_camera_read(camera, f)) {270 lib3ds_chunk_read_reset(&c, strm); 271 if (!lib3ds_camera_read(camera, strm)) { 258 272 return(LIB3DS_FALSE); 259 273 } … … 269 283 return(LIB3DS_FALSE); 270 284 } 271 lib3ds_chunk_read_reset(&c, f);272 if (!lib3ds_light_read(light, f)) {285 lib3ds_chunk_read_reset(&c, strm); 286 if (!lib3ds_light_read(light, strm)) { 273 287 return(LIB3DS_FALSE); 274 288 } … … 281 295 } 282 296 283 lib3ds_chunk_read_end(&c, f);297 lib3ds_chunk_read_end(&c, strm); 284 298 return(LIB3DS_TRUE); 285 299 } … … 287 301 288 302 static Lib3dsBool 289 ambient_read(Lib3dsFile *file, FILE *f)303 ambient_read(Lib3dsFile *file, iostream *strm) 290 304 { 291 305 Lib3dsChunk c; … … 293 307 Lib3dsBool have_lin=LIB3DS_FALSE; 294 308 295 if (!lib3ds_chunk_read_start(&c, LIB3DS_AMBIENT_LIGHT, f)) {309 if (!lib3ds_chunk_read_start(&c, LIB3DS_AMBIENT_LIGHT, strm)) { 296 310 return(LIB3DS_FALSE); 297 311 } 298 312 299 while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) {313 while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 300 314 switch (chunk) { 301 315 case LIB3DS_LIN_COLOR_F: … … 303 317 int i; 304 318 for (i=0; i<3; ++i) { 305 file->ambient[i]=lib3ds_float_read( f);319 file->ambient[i]=lib3ds_float_read(strm); 306 320 } 307 321 } … … 315 329 int i; 316 330 for (i=0; i<3; ++i) { 317 file->ambient[i]=lib3ds_float_read( f);331 file->ambient[i]=lib3ds_float_read(strm); 318 332 } 319 333 } … … 325 339 } 326 340 327 lib3ds_chunk_read_end(&c, f);341 lib3ds_chunk_read_end(&c, strm); 328 342 return(LIB3DS_TRUE); 329 343 } … … 331 345 332 346 static Lib3dsBool 333 mdata_read(Lib3dsFile *file, FILE *f)347 mdata_read(Lib3dsFile *file, iostream *strm) 334 348 { 335 349 Lib3dsChunk c; 336 350 Lib3dsWord chunk; 337 351 338 if (!lib3ds_chunk_read_start(&c, LIB3DS_MDATA, f)) {352 if (!lib3ds_chunk_read_start(&c, LIB3DS_MDATA, strm)) { 339 353 return(LIB3DS_FALSE); 340 354 } 341 355 342 while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) {356 while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 343 357 switch (chunk) { 344 358 case LIB3DS_MESH_VERSION: 345 359 { 346 file->mesh_version=lib3ds_intd_read( f);360 file->mesh_version=lib3ds_intd_read(strm); 347 361 } 348 362 break; 349 363 case LIB3DS_MASTER_SCALE: 350 364 { 351 file->master_scale=lib3ds_float_read( f);365 file->master_scale=lib3ds_float_read(strm); 352 366 } 353 367 break; … … 360 374 case LIB3DS_RAY_BIAS: 361 375 { 362 lib3ds_chunk_read_reset(&c, f);363 if (!lib3ds_shadow_read(&file->shadow, f)) {376 lib3ds_chunk_read_reset(&c, strm); 377 if (!lib3ds_shadow_read(&file->shadow, strm)) { 364 378 return(LIB3DS_FALSE); 365 379 } … … 369 383 case LIB3DS_DEFAULT_VIEW: 370 384 { 371 lib3ds_chunk_read_reset(&c, f);372 if (!lib3ds_viewport_read(&file->viewport, f)) {385 lib3ds_chunk_read_reset(&c, strm); 386 if (!lib3ds_viewport_read(&file->viewport, strm)) { 373 387 return(LIB3DS_FALSE); 374 388 } … … 379 393 int i; 380 394 for (i=0; i<3; ++i) { 381 file->construction_plane[i]=lib3ds_float_read( f);395 file->construction_plane[i]=lib3ds_float_read(strm); 382 396 } 383 397 } … … 385 399 case LIB3DS_AMBIENT_LIGHT: 386 400 { 387 lib3ds_chunk_read_reset(&c, f);388 if (!ambient_read(file, f)) {401 lib3ds_chunk_read_reset(&c, strm); 402 if (!ambient_read(file, strm)) { 389 403 return(LIB3DS_FALSE); 390 404 } … … 398 412 case LIB3DS_USE_V_GRADIENT: 399 413 { 400 lib3ds_chunk_read_reset(&c, f);401 if (!lib3ds_background_read(&file->background, f)) {414 lib3ds_chunk_read_reset(&c, strm); 415 if (!lib3ds_background_read(&file->background, strm)) { 402 416 return(LIB3DS_FALSE); 403 417 } … … 411 425 case LIB3DS_USE_DISTANCE_CUE: 412 426 { 413 lib3ds_chunk_read_reset(&c, f);414 if (!lib3ds_atmosphere_read(&file->atmosphere, f)) {427 lib3ds_chunk_read_reset(&c, strm); 428 if (!lib3ds_atmosphere_read(&file->atmosphere, strm)) { 415 429 return(LIB3DS_FALSE); 416 430 } … … 425 439 return(LIB3DS_FALSE); 426 440 } 427 lib3ds_chunk_read_reset(&c, f);428 if (!lib3ds_material_read(material, f)) {441 lib3ds_chunk_read_reset(&c, strm); 442 if (!lib3ds_material_read(material, strm)) { 429 443 return(LIB3DS_FALSE); 430 444 } … … 434 448 case LIB3DS_NAMED_OBJECT: 435 449 { 436 lib3ds_chunk_read_reset(&c, f);437 if (!named_object_read(file, f)) {450 lib3ds_chunk_read_reset(&c, strm); 451 if (!named_object_read(file, strm)) { 438 452 return(LIB3DS_FALSE); 439 453 } … … 445 459 } 446 460 447 lib3ds_chunk_read_end(&c, f);461 lib3ds_chunk_read_end(&c, strm); 448 462 return(LIB3DS_TRUE); 449 463 } … … 451 465 452 466 static Lib3dsBool 453 kfdata_read(Lib3dsFile *file, FILE *f)467 kfdata_read(Lib3dsFile *file, iostream *strm) 454 468 { 455 469 Lib3dsChunk c; 456 470 Lib3dsWord chunk; 457 471 458 if (!lib3ds_chunk_read_start(&c, LIB3DS_KFDATA, f)) {472 if (!lib3ds_chunk_read_start(&c, LIB3DS_KFDATA, strm)) { 459 473 return(LIB3DS_FALSE); 460 474 } 461 475 462 while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) {476 while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 463 477 switch (chunk) { 464 478 case LIB3DS_KFHDR: 465 479 { 466 file->keyf_revision=lib3ds_word_read( f);467 if (!lib3ds_string_read(file->name, 12+1, f)) {468 return(LIB3DS_FALSE); 469 } 470 file->frames=lib3ds_intd_read( f);480 file->keyf_revision=lib3ds_word_read(strm); 481 if (!lib3ds_string_read(file->name, 12+1, strm)) { 482 return(LIB3DS_FALSE); 483 } 484 file->frames=lib3ds_intd_read(strm); 471 485 } 472 486 break; 473 487 case LIB3DS_KFSEG: 474 488 { 475 file->segment_from=lib3ds_intd_read( f);476 file->segment_to=lib3ds_intd_read( f);489 file->segment_from=lib3ds_intd_read(strm); 490 file->segment_to=lib3ds_intd_read(strm); 477 491 } 478 492 break; 479 493 case LIB3DS_KFCURTIME: 480 494 { 481 file->current_frame=lib3ds_intd_read( f);495 file->current_frame=lib3ds_intd_read(strm); 482 496 } 483 497 break; … … 485 499 case LIB3DS_DEFAULT_VIEW: 486 500 { 487 lib3ds_chunk_read_reset(&c, f);488 if (!lib3ds_viewport_read(&file->viewport_keyf, f)) {501 lib3ds_chunk_read_reset(&c, strm); 502 if (!lib3ds_viewport_read(&file->viewport_keyf, strm)) { 489 503 return(LIB3DS_FALSE); 490 504 } … … 499 513 return(LIB3DS_FALSE); 500 514 } 501 lib3ds_chunk_read_reset(&c, f);502 if (!lib3ds_node_read(node, file, f)) {515 lib3ds_chunk_read_reset(&c, strm); 516 if (!lib3ds_node_read(node, file, strm)) { 503 517 return(LIB3DS_FALSE); 504 518 } … … 514 528 return(LIB3DS_FALSE); 515 529 } 516 lib3ds_chunk_read_reset(&c, f);517 if (!lib3ds_node_read(node, file, f)) {530 lib3ds_chunk_read_reset(&c, strm); 531 if (!lib3ds_node_read(node, file, strm)) { 518 532 return(LIB3DS_FALSE); 519 533 } … … 529 543 return(LIB3DS_FALSE); 530 544 } 531 lib3ds_chunk_read_reset(&c, f);532 if (!lib3ds_node_read(node, file, f)) {545 lib3ds_chunk_read_reset(&c, strm); 546 if (!lib3ds_node_read(node, file, strm)) { 533 547 return(LIB3DS_FALSE); 534 548 } … … 544 558 return(LIB3DS_FALSE); 545 559 } 546 lib3ds_chunk_read_reset(&c, f);547 if (!lib3ds_node_read(node, file, f)) {560 lib3ds_chunk_read_reset(&c, strm); 561 if (!lib3ds_node_read(node, file, strm)) { 548 562 return(LIB3DS_FALSE); 549 563 } … … 560 574 return(LIB3DS_FALSE); 561 575 } 562 lib3ds_chunk_read_reset(&c, f);563 if (!lib3ds_node_read(node, file, f)) {576 lib3ds_chunk_read_reset(&c, strm); 577 if (!lib3ds_node_read(node, file, strm)) { 564 578 return(LIB3DS_FALSE); 565 579 } … … 575 589 return(LIB3DS_FALSE); 576 590 } 577 lib3ds_chunk_read_reset(&c, f);578 if (!lib3ds_node_read(node, file, f)) {591 lib3ds_chunk_read_reset(&c, strm); 592 if (!lib3ds_node_read(node, file, strm)) { 579 593 return(LIB3DS_FALSE); 580 594 } … … 587 601 } 588 602 589 lib3ds_chunk_read_end(&c, f);603 lib3ds_chunk_read_end(&c, strm); 590 604 return(LIB3DS_TRUE); 591 605 } … … 596 610 */ 597 611 Lib3dsBool 598 lib3ds_file_read(Lib3dsFile *file, FILE *f)612 lib3ds_file_read(Lib3dsFile *file, iostream *strm) 599 613 { 600 614 Lib3dsChunk c; 601 615 Lib3dsWord chunk; 602 616 603 if (!lib3ds_chunk_read_start(&c, 0, f)) {617 if (!lib3ds_chunk_read_start(&c, 0, strm)) { 604 618 return(LIB3DS_FALSE); 605 619 } … … 607 621 case LIB3DS_MDATA: 608 622 { 609 lib3ds_chunk_read_reset(&c, f);610 if (!mdata_read(file, f)) {623 lib3ds_chunk_read_reset(&c, strm); 624 if (!mdata_read(file, strm)) { 611 625 return(LIB3DS_FALSE); 612 626 } … … 617 631 case LIB3DS_CMAGIC: 618 632 { 619 while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) {633 while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { 620 634 switch (chunk) { 621 635 case LIB3DS_M3D_VERSION: 622 636 { 623 file->mesh_version=lib3ds_dword_read( f);637 file->mesh_version=lib3ds_dword_read(strm); 624 638 } 625 639 break; 626 640 case LIB3DS_MDATA: 627 641 { 628 lib3ds_chunk_read_reset(&c, f);629 if (!mdata_read(file, f)) {642 lib3ds_chunk_read_reset(&c, strm); 643 if (!mdata_read(file, strm)) { 630 644 return(LIB3DS_FALSE); 631 645 } … … 634 648 case LIB3DS_KFDATA: 635 649 { 636 lib3ds_chunk_read_reset(&c, f);637 if (!kfdata_read(file, f)) {650 lib3ds_chunk_read_reset(&c, strm); 651 if (!kfdata_read(file, strm)) { 638 652 return(LIB3DS_FALSE); 639 653 } … … 651 665 } 652 666 653 lib3ds_chunk_read_end(&c, f);667 lib3ds_chunk_read_end(&c, strm); 654 668 return(LIB3DS_TRUE); 655 669 } … … 657 671 658 672 static Lib3dsBool 659 colorf_write(Lib3dsRgba rgb, FILE *f)673 colorf_write(Lib3dsRgba rgb, iostream *strm) 660 674 { 661 675 Lib3dsChunk c; … … 663 677 c.chunk=LIB3DS_COLOR_F; 664 678 c.size=18; 665 lib3ds_chunk_write(&c, f);666 lib3ds_rgb_write(rgb, f);679 lib3ds_chunk_write(&c,strm); 680 lib3ds_rgb_write(rgb,strm); 667 681 668 682 c.chunk=LIB3DS_LIN_COLOR_F; 669 683 c.size=18; 670 lib3ds_chunk_write(&c, f);671 lib3ds_rgb_write(rgb, f);684 lib3ds_chunk_write(&c,strm); 685 lib3ds_rgb_write(rgb,strm); 672 686 return(LIB3DS_TRUE); 673 687 } … … 675 689 676 690 static Lib3dsBool 677 mdata_write(Lib3dsFile *file, FILE *f)691 mdata_write(Lib3dsFile *file, iostream *strm) 678 692 { 679 693 Lib3dsChunk c; 680 694 681 695 c.chunk=LIB3DS_MDATA; 682 if (!lib3ds_chunk_write_start(&c, f)) {696 if (!lib3ds_chunk_write_start(&c,strm)) { 683 697 return(LIB3DS_FALSE); 684 698 } … … 688 702 c.chunk=LIB3DS_MESH_VERSION; 689 703 c.size=10; 690 lib3ds_chunk_write(&c, f);691 lib3ds_intd_write(file->mesh_version, f);704 lib3ds_chunk_write(&c,strm); 705 lib3ds_intd_write(file->mesh_version,strm); 692 706 } 693 707 { /*---- LIB3DS_MASTER_SCALE ----*/ … … 695 709 c.chunk=LIB3DS_MASTER_SCALE; 696 710 c.size=10; 697 lib3ds_chunk_write(&c, f);698 lib3ds_float_write(file->master_scale, f);711 lib3ds_chunk_write(&c,strm); 712 lib3ds_float_write(file->master_scale,strm); 699 713 } 700 714 { /*---- LIB3DS_O_CONSTS ----*/ … … 709 723 c.chunk=LIB3DS_O_CONSTS; 710 724 c.size=18; 711 lib3ds_chunk_write(&c, f);712 lib3ds_vector_write(file->construction_plane, f);725 lib3ds_chunk_write(&c,strm); 726 lib3ds_vector_write(file->construction_plane,strm); 713 727 } 714 728 } … … 725 739 c.chunk=LIB3DS_AMBIENT_LIGHT; 726 740 c.size=42; 727 lib3ds_chunk_write(&c, f);728 colorf_write(file->ambient, f);729 } 730 } 731 lib3ds_background_write(&file->background, f);732 lib3ds_atmosphere_write(&file->atmosphere, f);733 lib3ds_shadow_write(&file->shadow, f);734 lib3ds_viewport_write(&file->viewport, f);741 lib3ds_chunk_write(&c,strm); 742 colorf_write(file->ambient,strm); 743 } 744 } 745 lib3ds_background_write(&file->background, strm); 746 lib3ds_atmosphere_write(&file->atmosphere, strm); 747 lib3ds_shadow_write(&file->shadow, strm); 748 lib3ds_viewport_write(&file->viewport, strm); 735 749 { 736 750 Lib3dsMaterial *p; 737 751 for (p=file->materials; p!=0; p=p->next) { 738 if (!lib3ds_material_write(p, f)) {752 if (!lib3ds_material_write(p,strm)) { 739 753 return(LIB3DS_FALSE); 740 754 } … … 747 761 for (p=file->cameras; p!=0; p=p->next) { 748 762 c.chunk=LIB3DS_NAMED_OBJECT; 749 if (!lib3ds_chunk_write_start(&c, f)) {763 if (!lib3ds_chunk_write_start(&c,strm)) { 750 764 return(LIB3DS_FALSE); 751 765 } 752 lib3ds_string_write(p->name, f);753 lib3ds_camera_write(p, f);754 if (!lib3ds_chunk_write_end(&c, f)) {766 lib3ds_string_write(p->name,strm); 767 lib3ds_camera_write(p,strm); 768 if (!lib3ds_chunk_write_end(&c,strm)) { 755 769 return(LIB3DS_FALSE); 756 770 } … … 763 777 for (p=file->lights; p!=0; p=p->next) { 764 778 c.chunk=LIB3DS_NAMED_OBJECT; 765 if (!lib3ds_chunk_write_start(&c, f)) {779 if (!lib3ds_chunk_write_start(&c,strm)) { 766 780 return(LIB3DS_FALSE); 767 781 } 768 lib3ds_string_write(p->name, f);769 lib3ds_light_write(p, f);770 if (!lib3ds_chunk_write_end(&c, f)) {782 lib3ds_string_write(p->name,strm); 783 lib3ds_light_write(p,strm); 784 if (!lib3ds_chunk_write_end(&c,strm)) { 771 785 return(LIB3DS_FALSE); 772 786 } … … 779 793 for (p=file->meshes; p!=0; p=p->next) { 780 794 c.chunk=LIB3DS_NAMED_OBJECT; 781 if (!lib3ds_chunk_write_start(&c, f)) {795 if (!lib3ds_chunk_write_start(&c,strm)) { 782 796 return(LIB3DS_FALSE); 783 797 } 784 lib3ds_string_write(p->name, f);785 lib3ds_mesh_write(p, f);786 if (!lib3ds_chunk_write_end(&c, f)) {798 lib3ds_string_write(p->name,strm); 799 lib3ds_mesh_write(p,strm); 800 if (!lib3ds_chunk_write_end(&c,strm)) { 787 801 return(LIB3DS_FALSE); 788 802 } … … 790 804 } 791 805 792 if (!lib3ds_chunk_write_end(&c, f)) {806 if (!lib3ds_chunk_write_end(&c,strm)) { 793 807 return(LIB3DS_FALSE); 794 808 } … … 799 813 800 814 static Lib3dsBool 801 nodes_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f)815 nodes_write(Lib3dsNode *node, Lib3dsFile *file, iostream *strm) 802 816 { 803 817 { 804 818 Lib3dsNode *p; 805 819 for (p=node->childs; p!=0; p=p->next) { 806 if (!lib3ds_node_write(p, file, f)) {820 if (!lib3ds_node_write(p, file, strm)) { 807 821 return(LIB3DS_FALSE); 808 822 } 809 nodes_write(p, file, f);823 nodes_write(p, file, strm); 810 824 } 811 825 } … … 815 829 816 830 static Lib3dsBool 817 kfdata_write(Lib3dsFile *file, FILE *f)831 kfdata_write(Lib3dsFile *file, iostream *strm) 818 832 { 819 833 Lib3dsChunk c; 820 834 821 835 c.chunk=LIB3DS_KFDATA; 822 if (!lib3ds_chunk_write_start(&c, f)) {836 if (!lib3ds_chunk_write_start(&c,strm)) { 823 837 return(LIB3DS_FALSE); 824 838 } … … 828 842 c.chunk=LIB3DS_KFHDR; 829 843 c.size=6 + 2 + strlen(file->name)+1 +4; 830 lib3ds_chunk_write(&c, f);831 lib3ds_intw_write(file->keyf_revision, f);832 lib3ds_string_write(file->name, f);833 lib3ds_intd_write(file->frames, f);844 lib3ds_chunk_write(&c,strm); 845 lib3ds_intw_write(file->keyf_revision,strm); 846 lib3ds_string_write(file->name, strm); 847 lib3ds_intd_write(file->frames, strm); 834 848 } 835 849 { /*---- LIB3DS_KFSEG ----*/ … … 837 851 c.chunk=LIB3DS_KFSEG; 838 852 c.size=14; 839 lib3ds_chunk_write(&c, f);840 lib3ds_intd_write(file->segment_from, f);841 lib3ds_intd_write(file->segment_to, f);853 lib3ds_chunk_write(&c,strm); 854 lib3ds_intd_write(file->segment_from,strm); 855 lib3ds_intd_write(file->segment_to,strm); 842 856 } 843 857 { /*---- LIB3DS_KFCURTIME ----*/ … … 845 859 c.chunk=LIB3DS_KFCURTIME; 846 860 c.size=10; 847 lib3ds_chunk_write(&c, f);848 lib3ds_intd_write(file->current_frame, f);849 } 850 lib3ds_viewport_write(&file->viewport_keyf, f);861 lib3ds_chunk_write(&c,strm); 862 lib3ds_intd_write(file->current_frame,strm); 863 } 864 lib3ds_viewport_write(&file->viewport_keyf, strm); 851 865 852 866 { 853 867 Lib3dsNode *p; 854 868 for (p=file->nodes; p!=0; p=p->next) { 855 if (!lib3ds_node_write(p, file, f)) {869 if (!lib3ds_node_write(p, file, strm)) { 856 870 return(LIB3DS_FALSE); 857 871 } 858 if (!nodes_write(p, file, f)) {872 if (!nodes_write(p, file, strm)) { 859 873 return(LIB3DS_FALSE); 860 874 } … … 862 876 } 863 877 864 if (!lib3ds_chunk_write_end(&c, f)) {878 if (!lib3ds_chunk_write_end(&c,strm)) { 865 879 return(LIB3DS_FALSE); 866 880 } … … 873 887 */ 874 888 Lib3dsBool 875 lib3ds_file_write(Lib3dsFile *file, FILE *f)889 lib3ds_file_write(Lib3dsFile *file, iostream *strm) 876 890 { 877 891 Lib3dsChunk c; 878 892 879 893 c.chunk=LIB3DS_M3DMAGIC; 880 if (!lib3ds_chunk_write_start(&c, f)) {894 if (!lib3ds_chunk_write_start(&c,strm)) { 881 895 LIB3DS_ERROR_LOG; 882 896 return(LIB3DS_FALSE); … … 888 902 c.chunk=LIB3DS_M3D_VERSION; 889 903 c.size=10; 890 lib3ds_chunk_write(&c, f);891 lib3ds_dword_write(file->mesh_version, f);892 } 893 894 if (!mdata_write(file, f)) {904 lib3ds_chunk_write(&c,strm); 905 lib3ds_dword_write(file->mesh_version, strm); 906 } 907 908 if (!mdata_write(file, strm)) { 895 909 return(LIB3DS_FALSE); 896 910 } 897 if (!kfdata_write(file, f)) {911 if (!kfdata_write(file, strm)) { 898 912 return(LIB3DS_FALSE); 899 913 } 900 914 901 if (!lib3ds_chunk_write_end(&c, f)) {915 if (!lib3ds_chunk_write_end(&c,strm)) { 902 916 return(LIB3DS_FALSE); 903 917 }
