diff --git a/src/osgPlugins/3ds/ReaderWriter3DS.cpp b/src/osgPlugins/3ds/ReaderWriter3DS.cpp index fd3f25a2a..178924558 100644 --- a/src/osgPlugins/3ds/ReaderWriter3DS.cpp +++ b/src/osgPlugins/3ds/ReaderWriter3DS.cpp @@ -34,6 +34,7 @@ #include #include #include +#include using namespace std; using namespace osg; @@ -95,8 +96,10 @@ class ReaderWriter3DS : public osgDB::ReaderWriter virtual const char* className() const { return "3DS Auto Studio Reader"; } virtual ReadResult readNode(const std::string& file, const osgDB::ReaderWriter::Options* options) const; + virtual ReadResult readNode(std::istream& fin, const Options* options) const; protected: + ReadResult constructFrom3dsFile(Lib3dsFile *f,const std::string& filename, const Options* options) const; class ReaderObject @@ -440,9 +443,29 @@ osg::Node* ReaderWriter3DS::ReaderObject::processNode(StateSetMap drawStateMap,L } } +osgDB::ReaderWriter::ReadResult ReaderWriter3DS::readNode(std::istream& fin, const osgDB::ReaderWriter::Options* options) const +{ + osgDB::ReaderWriter::ReadResult result = ReadResult::FILE_NOT_HANDLED; + + std::string optFileName = ""; + if (options) + { + optFileName = options->getPluginStringData("STREAM_FILENAME"); + } + + Lib3dsFile *f = lib3ds_stream_load((iostream *) &fin); + if (f) + { + result = constructFrom3dsFile(f,optFileName,options); + lib3ds_file_free(f); + } + + return(result); +} osgDB::ReaderWriter::ReadResult ReaderWriter3DS::readNode(const std::string& file, const osgDB::ReaderWriter::Options* options) const { + osgDB::ReaderWriter::ReadResult result = ReadResult::FILE_NOT_HANDLED; std::string ext = osgDB::getLowerCaseFileExtension(file); if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED; @@ -450,7 +473,22 @@ osgDB::ReaderWriter::ReadResult ReaderWriter3DS::readNode(const std::string& fil std::string fileName = osgDB::findDataFile( file, options ); if (fileName.empty()) return ReadResult::FILE_NOT_FOUND; - Lib3dsFile *f = lib3ds_file_load(fileName.c_str()); + Lib3dsFile *f = lib3ds_file_load(fileName.c_str(),options); + + if (f) + { + osg::ref_ptr local_opt = options ? static_cast(options->clone(osg::CopyOp::SHALLOW_COPY)) : new Options; + local_opt->getDatabasePathList().push_front(osgDB::getFilePath(fileName)); + + result = constructFrom3dsFile(f,file,local_opt.get()); + lib3ds_file_free(f); + } + + return result; +} + +osgDB::ReaderWriter::ReadResult ReaderWriter3DS::constructFrom3dsFile(Lib3dsFile *f,const std::string& fileName, const osgDB::ReaderWriter::Options* options) const +{ if (f==NULL) return ReadResult::FILE_NOT_HANDLED; // MIKEC @@ -461,7 +499,7 @@ osgDB::ReaderWriter::ReadResult ReaderWriter3DS::readNode(const std::string& fil ReaderObject reader; - reader._directory = osgDB::getFilePath(fileName); + reader._directory = options->getDatabasePathList().empty() ? osgDB::getFilePath(fileName) : options->getDatabasePathList().front(); osg::Group* group = new osg::Group; group->setName(fileName); @@ -515,8 +553,6 @@ osgDB::ReaderWriter::ReadResult ReaderWriter3DS::readNode(const std::string& fil group->accept(pv); } - lib3ds_file_free(f); - return group; } @@ -690,17 +726,26 @@ osg::Texture2D* ReaderWriter3DS::ReaderObject::createTexture(Lib3dsTextureMap * { if (texture && *(texture->name)) { + osg::notify(osg::NOTICE)<<"texture->name="<name<<", _directory="<<_directory<name,_directory,osgDB::CASE_INSENSITIVE); if (fileName.empty()) { // file not found in .3ds file's directory, so we'll look in the datafile path list. fileName = osgDB::findDataFile(texture->name,options, osgDB::CASE_INSENSITIVE); } - + if (fileName.empty()) { - osg::notify(osg::WARN) << "texture '"<name<<"' not found"<< std::endl; - return NULL; + if (osgDB::containsServerAddress(_directory)) + { + // if 3DS file is loaded from http, just attempt to load texture from same location. + fileName = _directory + "/" + texture->name; + } else { + osg::notify(osg::WARN) << "texture '"<name<<"' not found"<< std::endl; + return NULL; + } } if (label) osg::notify(osg::DEBUG_INFO) << label; @@ -821,7 +866,7 @@ osg::StateSet* ReaderWriter3DS::ReaderObject::createStateSet(Lib3dsMaterial *mat // stateset->setTextureAttribute(0,texenv); } - if (transparency>0.0f || textureTransparancy || mat->opacity_map.flags!=0) + if (transparency>0.0f || textureTransparancy) { stateset->setMode(GL_BLEND,osg::StateAttribute::ON); stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); diff --git a/src/osgPlugins/3ds/atmosphere.cpp b/src/osgPlugins/3ds/atmosphere.cpp index c24301a00..54b3ef122 100644 --- a/src/osgPlugins/3ds/atmosphere.cpp +++ b/src/osgPlugins/3ds/atmosphere.cpp @@ -33,27 +33,27 @@ static Lib3dsBool -fog_read(Lib3dsFog *fog, FILE *f) +fog_read(Lib3dsFog *fog, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_FOG, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_FOG, strm)) { return(LIB3DS_FALSE); } - fog->near_plane=lib3ds_float_read(f); - fog->near_density=lib3ds_float_read(f); - fog->far_plane=lib3ds_float_read(f); - fog->far_density=lib3ds_float_read(f); - lib3ds_chunk_read_tell(&c, f); + fog->near_plane=lib3ds_float_read(strm); + fog->near_density=lib3ds_float_read(strm); + fog->far_plane=lib3ds_float_read(strm); + fog->far_density=lib3ds_float_read(strm); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_LIN_COLOR_F: { int i; for (i=0; i<3; ++i) { - fog->col[i]=lib3ds_float_read(f); + fog->col[i]=lib3ds_float_read(strm); } } break; @@ -69,60 +69,60 @@ fog_read(Lib3dsFog *fog, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -layer_fog_read(Lib3dsLayerFog *fog, FILE *f) +layer_fog_read(Lib3dsLayerFog *fog, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_LAYER_FOG, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_LAYER_FOG, strm)) { return(LIB3DS_FALSE); } - fog->near_y=lib3ds_float_read(f); - fog->far_y=lib3ds_float_read(f); - fog->density=lib3ds_float_read(f); - fog->flags=lib3ds_dword_read(f); - lib3ds_chunk_read_tell(&c, f); + fog->near_y=lib3ds_float_read(strm); + fog->far_y=lib3ds_float_read(strm); + fog->density=lib3ds_float_read(strm); + fog->flags=lib3ds_dword_read(strm); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_LIN_COLOR_F: - lib3ds_rgb_read(fog->col,f); + lib3ds_rgb_read(fog->col,strm); break; case LIB3DS_COLOR_F: - lib3ds_rgb_read(fog->col,f); + lib3ds_rgb_read(fog->col,strm); break; default: lib3ds_chunk_unknown(chunk); } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -distance_cue_read(Lib3dsDistanceCue *cue, FILE *f) +distance_cue_read(Lib3dsDistanceCue *cue, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_DISTANCE_CUE, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_DISTANCE_CUE, strm)) { return(LIB3DS_FALSE); } - cue->near_plane=lib3ds_float_read(f); - cue->near_dimming=lib3ds_float_read(f); - cue->far_plane=lib3ds_float_read(f); - cue->far_dimming=lib3ds_float_read(f); - lib3ds_chunk_read_tell(&c, f); + cue->near_plane=lib3ds_float_read(strm); + cue->near_dimming=lib3ds_float_read(strm); + cue->far_plane=lib3ds_float_read(strm); + cue->far_dimming=lib3ds_float_read(strm); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_DCUE_BGND: { @@ -134,7 +134,7 @@ distance_cue_read(Lib3dsDistanceCue *cue, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -143,35 +143,35 @@ distance_cue_read(Lib3dsDistanceCue *cue, FILE *f) * \ingroup atmosphere */ Lib3dsBool -lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, FILE *f) +lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, iostream *strm) { Lib3dsChunk c; - if (!lib3ds_chunk_read(&c, f)) { + if (!lib3ds_chunk_read(&c, strm)) { return(LIB3DS_FALSE); } switch (c.chunk) { case LIB3DS_FOG: { - lib3ds_chunk_read_reset(&c, f); - if (!fog_read(&atmosphere->fog, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!fog_read(&atmosphere->fog, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_LAYER_FOG: { - lib3ds_chunk_read_reset(&c, f); - if (!layer_fog_read(&atmosphere->layer_fog, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!layer_fog_read(&atmosphere->layer_fog, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_DISTANCE_CUE: { - lib3ds_chunk_read_reset(&c, f); - if (!distance_cue_read(&atmosphere->dist_cue, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!distance_cue_read(&atmosphere->dist_cue, strm)) { return(LIB3DS_FALSE); } } @@ -201,32 +201,32 @@ lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, FILE *f) * \ingroup atmosphere */ Lib3dsBool -lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, FILE *f) +lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, iostream *strm) { if (atmosphere->fog.use) { /*---- LIB3DS_FOG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_FOG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_float_write(atmosphere->fog.near_plane,f); - lib3ds_float_write(atmosphere->fog.near_density,f); - lib3ds_float_write(atmosphere->fog.far_plane,f); - lib3ds_float_write(atmosphere->fog.far_density,f); + lib3ds_float_write(atmosphere->fog.near_plane,strm); + lib3ds_float_write(atmosphere->fog.near_density,strm); + lib3ds_float_write(atmosphere->fog.far_plane,strm); + lib3ds_float_write(atmosphere->fog.far_density,strm); { Lib3dsChunk c; c.chunk=LIB3DS_COLOR_F; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_rgb_write(atmosphere->fog.col,f); + lib3ds_chunk_write(&c,strm); + lib3ds_rgb_write(atmosphere->fog.col,strm); } if (atmosphere->fog.fog_background) { Lib3dsChunk c; c.chunk=LIB3DS_FOG_BGND; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -235,37 +235,37 @@ lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_LAYER_FOG; c.size=40; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(atmosphere->layer_fog.near_y,f); - lib3ds_float_write(atmosphere->layer_fog.far_y,f); - lib3ds_float_write(atmosphere->layer_fog.near_y,f); - lib3ds_dword_write(atmosphere->layer_fog.flags,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(atmosphere->layer_fog.near_y,strm); + lib3ds_float_write(atmosphere->layer_fog.far_y,strm); + lib3ds_float_write(atmosphere->layer_fog.near_y,strm); + lib3ds_dword_write(atmosphere->layer_fog.flags,strm); { Lib3dsChunk c; c.chunk=LIB3DS_COLOR_F; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_rgb_write(atmosphere->fog.col,f); + lib3ds_chunk_write(&c,strm); + lib3ds_rgb_write(atmosphere->fog.col,strm); } } if (atmosphere->dist_cue.use) { /*---- LIB3DS_DISTANCE_CUE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DISTANCE_CUE; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_float_write(atmosphere->dist_cue.near_plane,f); - lib3ds_float_write(atmosphere->dist_cue.near_dimming,f); - lib3ds_float_write(atmosphere->dist_cue.far_plane,f); - lib3ds_float_write(atmosphere->dist_cue.far_dimming,f); + lib3ds_float_write(atmosphere->dist_cue.near_plane,strm); + lib3ds_float_write(atmosphere->dist_cue.near_dimming,strm); + lib3ds_float_write(atmosphere->dist_cue.far_plane,strm); + lib3ds_float_write(atmosphere->dist_cue.far_dimming,strm); if (atmosphere->dist_cue.cue_background) { Lib3dsChunk c; c.chunk=LIB3DS_DCUE_BGND; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -274,21 +274,21 @@ lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_USE_FOG; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (atmosphere->layer_fog.use) { /*---- LIB3DS_USE_LAYER_FOG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_USE_LAYER_FOG; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (atmosphere->dist_cue.use) { /*---- LIB3DS_USE_DISTANCE_CUE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_USE_V_GRADIENT; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/atmosphere.h b/src/osgPlugins/3ds/atmosphere.h index 58c620eb6..df5a4bbaf 100644 --- a/src/osgPlugins/3ds/atmosphere.h +++ b/src/osgPlugins/3ds/atmosphere.h @@ -27,6 +27,9 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif @@ -91,8 +94,8 @@ struct _Lib3dsAtmosphere { Lib3dsDistanceCue dist_cue; }; -extern LIB3DSAPI Lib3dsBool lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/background.cpp b/src/osgPlugins/3ds/background.cpp index 410563d80..f4eabfe53 100644 --- a/src/osgPlugins/3ds/background.cpp +++ b/src/osgPlugins/3ds/background.cpp @@ -35,35 +35,35 @@ static Lib3dsBool -solid_bgnd_read(Lib3dsBackground *background, FILE *f) +solid_bgnd_read(Lib3dsBackground *background, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_SOLID_BGND, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_SOLID_BGND, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_LIN_COLOR_F: - lib3ds_rgb_read(background->solid.col, f); + lib3ds_rgb_read(background->solid.col, strm); break; case LIB3DS_COLOR_F: - lib3ds_rgb_read(background->solid.col, f); + lib3ds_rgb_read(background->solid.col, strm); break; default: lib3ds_chunk_unknown(chunk); } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -v_gradient_read(Lib3dsBackground *background, FILE *f) +v_gradient_read(Lib3dsBackground *background, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; @@ -72,21 +72,21 @@ v_gradient_read(Lib3dsBackground *background, FILE *f) int have_lin=0; - if (!lib3ds_chunk_read_start(&c, LIB3DS_V_GRADIENT, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_V_GRADIENT, strm)) { return(LIB3DS_FALSE); } - background->gradient.percent=lib3ds_float_read(f); - lib3ds_chunk_read_tell(&c, f); + background->gradient.percent=lib3ds_float_read(strm); + lib3ds_chunk_read_tell(&c, strm); index[0]=index[1]=0; - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_COLOR_F: - lib3ds_rgb_read(col[0][index[0]],f); + lib3ds_rgb_read(col[0][index[0]],strm); index[0]++; break; case LIB3DS_LIN_COLOR_F: - lib3ds_rgb_read(col[1][index[1]],f); + lib3ds_rgb_read(col[1][index[1]],strm); index[1]++; have_lin=1; break; @@ -102,7 +102,7 @@ v_gradient_read(Lib3dsBackground *background, FILE *f) background->gradient.bottom[i]=col[have_lin][2][i]; } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -111,34 +111,34 @@ v_gradient_read(Lib3dsBackground *background, FILE *f) * \ingroup background */ Lib3dsBool -lib3ds_background_read(Lib3dsBackground *background, FILE *f) +lib3ds_background_read(Lib3dsBackground *background, iostream *strm) { Lib3dsChunk c; - if (!lib3ds_chunk_read(&c, f)) { + if (!lib3ds_chunk_read(&c, strm)) { return(LIB3DS_FALSE); } switch (c.chunk) { case LIB3DS_BIT_MAP: { - if (!lib3ds_string_read(background->bitmap.name, 64, f)) { + if (!lib3ds_string_read(background->bitmap.name, 64, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_SOLID_BGND: { - lib3ds_chunk_read_reset(&c, f); - if (!solid_bgnd_read(background, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!solid_bgnd_read(background, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_V_GRADIENT: { - lib3ds_chunk_read_reset(&c, f); - if (!v_gradient_read(background, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!v_gradient_read(background, strm)) { return(LIB3DS_FALSE); } } @@ -165,19 +165,19 @@ lib3ds_background_read(Lib3dsBackground *background, FILE *f) static Lib3dsBool -colorf_write(Lib3dsRgba rgb, FILE *f) +colorf_write(Lib3dsRgba rgb, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_COLOR_F; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_rgb_write(rgb,f); + lib3ds_chunk_write(&c,strm); + lib3ds_rgb_write(rgb,strm); c.chunk=LIB3DS_LIN_COLOR_F; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_rgb_write(rgb,f); + lib3ds_chunk_write(&c,strm); + lib3ds_rgb_write(rgb,strm); return(LIB3DS_TRUE); } @@ -199,22 +199,22 @@ colorf_defined(Lib3dsRgba rgb) * \ingroup background */ Lib3dsBool -lib3ds_background_write(Lib3dsBackground *background, FILE *f) +lib3ds_background_write(Lib3dsBackground *background, iostream *strm) { if (strlen(background->bitmap.name)) { /*---- LIB3DS_BIT_MAP ----*/ Lib3dsChunk c; c.chunk=LIB3DS_BIT_MAP; c.size=6+1+strlen(background->bitmap.name); - lib3ds_chunk_write(&c,f); - lib3ds_string_write(background->bitmap.name, f); + lib3ds_chunk_write(&c,strm); + lib3ds_string_write(background->bitmap.name, strm); } if (colorf_defined(background->solid.col)) { /*---- LIB3DS_SOLID_BGND ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SOLID_BGND; c.size=42; - lib3ds_chunk_write(&c,f); - colorf_write(background->solid.col,f); + lib3ds_chunk_write(&c,strm); + colorf_write(background->solid.col,strm); } if (colorf_defined(background->gradient.top) || @@ -223,32 +223,32 @@ lib3ds_background_write(Lib3dsBackground *background, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_V_GRADIENT; c.size=118; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(background->gradient.percent,f); - colorf_write(background->gradient.top,f); - colorf_write(background->gradient.middle,f); - colorf_write(background->gradient.bottom,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(background->gradient.percent,strm); + colorf_write(background->gradient.top,strm); + colorf_write(background->gradient.middle,strm); + colorf_write(background->gradient.bottom,strm); } if (background->bitmap.use) { /*---- LIB3DS_USE_BIT_MAP ----*/ Lib3dsChunk c; c.chunk=LIB3DS_USE_BIT_MAP; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (background->solid.use) { /*---- LIB3DS_USE_SOLID_BGND ----*/ Lib3dsChunk c; c.chunk=LIB3DS_USE_SOLID_BGND; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (background->gradient.use) { /*---- LIB3DS_USE_V_GRADIENT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_USE_V_GRADIENT; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/background.h b/src/osgPlugins/3ds/background.h index 82a054483..1297140c4 100644 --- a/src/osgPlugins/3ds/background.h +++ b/src/osgPlugins/3ds/background.h @@ -27,6 +27,9 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif @@ -71,8 +74,8 @@ struct _Lib3dsBackground { Lib3dsGradient gradient; }; -extern LIB3DSAPI Lib3dsBool lib3ds_background_read(Lib3dsBackground *background, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_background_write(Lib3dsBackground *background, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_background_read(Lib3dsBackground *background, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_background_write(Lib3dsBackground *background, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/camera.cpp b/src/osgPlugins/3ds/camera.cpp index af789d070..26dc9cb08 100644 --- a/src/osgPlugins/3ds/camera.cpp +++ b/src/osgPlugins/3ds/camera.cpp @@ -96,27 +96,27 @@ lib3ds_camera_dump(Lib3dsCamera *camera) * \ingroup camera */ Lib3dsBool -lib3ds_camera_read(Lib3dsCamera *camera, FILE *f) +lib3ds_camera_read(Lib3dsCamera *camera, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_N_CAMERA, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_N_CAMERA, strm)) { return(LIB3DS_FALSE); } { int i; for (i=0; i<3; ++i) { - camera->position[i]=lib3ds_float_read(f); + camera->position[i]=lib3ds_float_read(strm); } for (i=0; i<3; ++i) { - camera->target[i]=lib3ds_float_read(f); + camera->target[i]=lib3ds_float_read(strm); } } - camera->roll=lib3ds_float_read(f); + camera->roll=lib3ds_float_read(strm); { float s; - s=lib3ds_float_read(f); + s=lib3ds_float_read(strm); if (fabs(s)fov=45.0; } @@ -124,9 +124,9 @@ lib3ds_camera_read(Lib3dsCamera *camera, FILE *f) camera->fov=2400.0f/s; } } - lib3ds_chunk_read_tell(&c, f); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_CAM_SEE_CONE: { @@ -135,8 +135,8 @@ lib3ds_camera_read(Lib3dsCamera *camera, FILE *f) break; case LIB3DS_CAM_RANGES: { - camera->near_range=lib3ds_float_read(f); - camera->far_range=lib3ds_float_read(f); + camera->near_range=lib3ds_float_read(strm); + camera->far_range=lib3ds_float_read(strm); } break; default: @@ -144,7 +144,7 @@ lib3ds_camera_read(Lib3dsCamera *camera, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -153,41 +153,41 @@ lib3ds_camera_read(Lib3dsCamera *camera, FILE *f) * \ingroup camera */ Lib3dsBool -lib3ds_camera_write(Lib3dsCamera *camera, FILE *f) +lib3ds_camera_write(Lib3dsCamera *camera, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_N_CAMERA; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_vector_write(camera->position, f); - lib3ds_vector_write(camera->target, f); - lib3ds_float_write(camera->roll, f); + lib3ds_vector_write(camera->position, strm); + lib3ds_vector_write(camera->target, strm); + lib3ds_float_write(camera->roll, strm); if (fabs(camera->fov)fov, f); + lib3ds_float_write(2400.0f/camera->fov, strm); } if (camera->see_cone) { Lib3dsChunk c; c.chunk=LIB3DS_CAM_SEE_CONE; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } { Lib3dsChunk c; c.chunk=LIB3DS_CAM_RANGES; c.size=14; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(camera->near_range, f); - lib3ds_float_write(camera->far_range, f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(camera->near_range, strm); + lib3ds_float_write(camera->far_range, strm); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/camera.h b/src/osgPlugins/3ds/camera.h index 06467ca81..3a16084fa 100644 --- a/src/osgPlugins/3ds/camera.h +++ b/src/osgPlugins/3ds/camera.h @@ -27,6 +27,9 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif @@ -50,8 +53,8 @@ struct _Lib3dsCamera { extern LIB3DSAPI Lib3dsCamera* lib3ds_camera_new(const char *name); extern LIB3DSAPI void lib3ds_camera_free(Lib3dsCamera *mesh); extern LIB3DSAPI void lib3ds_camera_dump(Lib3dsCamera *camera); -extern LIB3DSAPI Lib3dsBool lib3ds_camera_read(Lib3dsCamera *camera, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_camera_write(Lib3dsCamera *camera, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_camera_read(Lib3dsCamera *camera, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_camera_write(Lib3dsCamera *camera, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/chunk.cpp b/src/osgPlugins/3ds/chunk.cpp index 457eb4fc9..5184403ad 100644 --- a/src/osgPlugins/3ds/chunk.cpp +++ b/src/osgPlugins/3ds/chunk.cpp @@ -93,20 +93,20 @@ lib3ds_chunk_enable_dump(Lib3dsBool enable, Lib3dsBool unknown) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_chunk_read(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_read(Lib3dsChunk *c, iostream *strm) { ASSERT(c); - ASSERT(f); - c->cur=ftell(f); - c->chunk=lib3ds_word_read(f); - c->size=lib3ds_dword_read(f); + ASSERT(strm); + c->cur=strm->tellg(); + c->chunk=lib3ds_word_read(strm); + c->size=lib3ds_dword_read(strm); c->end=c->cur+c->size; c->cur+=6; - if (ferror(f) || (c->size<6)) { + + if (strm->fail()||(c->size<6)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); - } @@ -114,11 +114,11 @@ lib3ds_chunk_read(Lib3dsChunk *c, FILE *f) * \ingroup chunk */ Lib3dsBool -lib3ds_chunk_read_start(Lib3dsChunk *c, Lib3dsWord chunk, FILE *f) +lib3ds_chunk_read_start(Lib3dsChunk *c, Lib3dsWord chunk, iostream *strm) { ASSERT(c); - ASSERT(f); - if (!lib3ds_chunk_read(c, f)) { + ASSERT(strm); + if (!lib3ds_chunk_read(c, strm)) { return(LIB3DS_FALSE); } lib3ds_chunk_debug_enter(c); @@ -130,9 +130,9 @@ lib3ds_chunk_read_start(Lib3dsChunk *c, Lib3dsWord chunk, FILE *f) * \ingroup chunk */ void -lib3ds_chunk_read_tell(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_read_tell(Lib3dsChunk *c, iostream *strm) { - c->cur=ftell(f); + c->cur=strm->tellg(); } @@ -140,7 +140,7 @@ lib3ds_chunk_read_tell(Lib3dsChunk *c, FILE *f) * \ingroup chunk */ Lib3dsWord -lib3ds_chunk_read_next(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_read_next(Lib3dsChunk *c, iostream *strm) { Lib3dsChunk d; @@ -149,9 +149,9 @@ lib3ds_chunk_read_next(Lib3dsChunk *c, FILE *f) return(0); } - fseek(f, (long)c->cur, SEEK_SET); - d.chunk=lib3ds_word_read(f); - d.size=lib3ds_dword_read(f); + strm->seekg((long)c->cur,ios_base::beg); + d.chunk=lib3ds_word_read(strm); + d.size=lib3ds_dword_read(strm); lib3ds_chunk_debug_dump(&d); c->cur+=d.size; return(d.chunk); @@ -162,9 +162,9 @@ lib3ds_chunk_read_next(Lib3dsChunk *c, FILE *f) * \ingroup chunk */ void -lib3ds_chunk_read_reset(Lib3dsChunk *, FILE *f) -{ - fseek(f, -6, SEEK_CUR); +lib3ds_chunk_read_reset(Lib3dsChunk *, iostream *strm) +{ + strm->seekg(-6,ios_base::cur); } @@ -172,10 +172,10 @@ lib3ds_chunk_read_reset(Lib3dsChunk *, FILE *f) * \ingroup chunk */ void -lib3ds_chunk_read_end(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_read_end(Lib3dsChunk *c, iostream *strm) { lib3ds_chunk_debug_leave(c); - fseek(f, c->end, SEEK_SET); + strm->seekg(c->end,ios_base::beg); } @@ -190,14 +190,14 @@ lib3ds_chunk_read_end(Lib3dsChunk *c, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_chunk_write(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_write(Lib3dsChunk *c, iostream *strm) { ASSERT(c); - if (!lib3ds_word_write(c->chunk, f)) { + if (!lib3ds_word_write(c->chunk, strm)) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } - if (!lib3ds_dword_write(c->size, f)) { + if (!lib3ds_dword_write(c->size, strm)) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } @@ -209,15 +209,15 @@ lib3ds_chunk_write(Lib3dsChunk *c, FILE *f) * \ingroup chunk */ Lib3dsBool -lib3ds_chunk_write_start(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_write_start(Lib3dsChunk *c, iostream *strm) { ASSERT(c); c->size=0; - c->cur=ftell(f); - if (!lib3ds_word_write(c->chunk, f)) { + c->cur=strm->tellp(); + if (!lib3ds_word_write(c->chunk, strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_dword_write(c->size, f)) { + if (!lib3ds_dword_write(c->size, strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -228,19 +228,19 @@ lib3ds_chunk_write_start(Lib3dsChunk *c, FILE *f) * \ingroup chunk */ Lib3dsBool -lib3ds_chunk_write_end(Lib3dsChunk *c, FILE *f) +lib3ds_chunk_write_end(Lib3dsChunk *c, iostream *strm) { ASSERT(c); - c->size=ftell(f) - c->cur; - fseek(f, c->cur+2, SEEK_SET); - if (!lib3ds_dword_write(c->size, f)) { + c->size=(Lib3dsDword)(strm->tellp()) - c->cur; + strm->seekp(c->cur+2,ios_base::beg); + if (!lib3ds_dword_write(c->size, strm)) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } c->cur+=c->size; - fseek(f, c->cur, SEEK_SET); - if (ferror(f)) { + strm->seekp(c->cur, ios_base::beg); + if (strm->fail()) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } diff --git a/src/osgPlugins/3ds/chunk.h b/src/osgPlugins/3ds/chunk.h index 5d061d760..2b317b930 100644 --- a/src/osgPlugins/3ds/chunk.h +++ b/src/osgPlugins/3ds/chunk.h @@ -27,10 +27,14 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif + typedef enum _Lib3dsChunks { LIB3DS_NULL_CHUNK =0x0000, LIB3DS_M3DMAGIC =0x4D4D, /*3DS file*/ @@ -267,15 +271,15 @@ typedef struct _Lib3dsChunk { } Lib3dsChunk; extern LIB3DSAPI void lib3ds_chunk_enable_dump(Lib3dsBool enable, Lib3dsBool unknown); -extern LIB3DSAPI Lib3dsBool lib3ds_chunk_read(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_chunk_read_start(Lib3dsChunk *c, Lib3dsWord chunk, FILE *f); -extern LIB3DSAPI void lib3ds_chunk_read_tell(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI Lib3dsWord lib3ds_chunk_read_next(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI void lib3ds_chunk_read_reset(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI void lib3ds_chunk_read_end(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_chunk_write(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_chunk_write_start(Lib3dsChunk *c, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_chunk_write_end(Lib3dsChunk *c, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_chunk_read(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_chunk_read_start(Lib3dsChunk *c, Lib3dsWord chunk, iostream *strm); +extern LIB3DSAPI void lib3ds_chunk_read_tell(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI Lib3dsWord lib3ds_chunk_read_next(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI void lib3ds_chunk_read_reset(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI void lib3ds_chunk_read_end(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_chunk_write(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_chunk_write_start(Lib3dsChunk *c, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_chunk_write_end(Lib3dsChunk *c, iostream *strm); extern LIB3DSAPI const char* lib3ds_chunk_name(Lib3dsWord chunk); extern LIB3DSAPI void lib3ds_chunk_unknown(Lib3dsWord chunk); extern LIB3DSAPI void lib3ds_chunk_dump_info(const char *format, ...); diff --git a/src/osgPlugins/3ds/file.cpp b/src/osgPlugins/3ds/file.cpp index bd64f5af3..34d82d435 100644 --- a/src/osgPlugins/3ds/file.cpp +++ b/src/osgPlugins/3ds/file.cpp @@ -37,8 +37,11 @@ #include #endif -#include - +#include +#include +//#include +#include +#include /*! * \defgroup file Files @@ -65,30 +68,43 @@ * \ingroup file */ Lib3dsFile* -lib3ds_file_load(const char *filename) +lib3ds_file_load(const char *filename, const osgDB::ReaderWriter::Options* options) { - FILE *f; - Lib3dsFile *file; - - f=osgDB::fopen(filename, "rb"); - if (!f) { - return(0); + Lib3dsFile *file = NULL; + std::stringstream bufferedStream; + ifstream inputStream(filename,ios::in|ios::binary); + if (!inputStream.fail()) + { + bufferedStream.operator<<(inputStream.rdbuf()); + bufferedStream.seekp(ios_base::beg); + file = lib3ds_stream_load(&bufferedStream); + inputStream.close(); } - file=lib3ds_file_new(); - if (!file) { - fclose(f); - return(0); - } - - if (!lib3ds_file_read(file, f)) { - free(file); - fclose(f); - return(0); - } - fclose(f); return(file); } +Lib3dsFile* +lib3ds_stream_load(iostream * strm) +{ + Lib3dsFile *file = NULL; + if (strm) + { + file=lib3ds_file_new(); + if (file) + { + if (!lib3ds_file_read(file,strm)) + { + free(file); + file = NULL; + } + } + else + file = NULL; + } + return(file); +} + + /*! * Saves a .3DS file from memory to disk. @@ -106,18 +122,16 @@ lib3ds_file_load(const char *filename) Lib3dsBool lib3ds_file_save(Lib3dsFile *file, const char *filename) { - FILE *f; + fstream strm; - f=osgDB::fopen(filename, "wb"); - if (!f) { - return(LIB3DS_FALSE); - } + strm.open(filename,ios_base::out | ios_base::binary); + if (strm.fail()) return (LIB3DS_FALSE); - if (!lib3ds_file_write(file, f)) { - fclose(f); + if (!lib3ds_file_write(file, &strm)) { + strm.close(); return(LIB3DS_FALSE); } - fclose(f); + strm.close(); return(LIB3DS_TRUE); } @@ -213,22 +227,22 @@ lib3ds_file_eval(Lib3dsFile *file, Lib3dsFloat t) static Lib3dsBool -named_object_read(Lib3dsFile *file, FILE *f) +named_object_read(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; char name[64]; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_NAMED_OBJECT, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_NAMED_OBJECT, strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } lib3ds_chunk_dump_info(" NAME=%s", name); - lib3ds_chunk_read_tell(&c, f); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_N_TRI_OBJECT: { @@ -238,8 +252,8 @@ named_object_read(Lib3dsFile *file, FILE *f) if (!mesh) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_mesh_read(mesh, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_mesh_read(mesh, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_mesh(file, mesh); @@ -253,8 +267,8 @@ named_object_read(Lib3dsFile *file, FILE *f) if (!camera) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_camera_read(camera, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_camera_read(camera, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_camera(file, camera); @@ -268,8 +282,8 @@ named_object_read(Lib3dsFile *file, FILE *f) if (!light) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_light_read(light, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_light_read(light, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_light(file, light); @@ -280,29 +294,29 @@ named_object_read(Lib3dsFile *file, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -ambient_read(Lib3dsFile *file, FILE *f) +ambient_read(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; Lib3dsBool have_lin=LIB3DS_FALSE; - if (!lib3ds_chunk_read_start(&c, LIB3DS_AMBIENT_LIGHT, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_AMBIENT_LIGHT, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_LIN_COLOR_F: { int i; for (i=0; i<3; ++i) { - file->ambient[i]=lib3ds_float_read(f); + file->ambient[i]=lib3ds_float_read(strm); } } have_lin=LIB3DS_TRUE; @@ -314,7 +328,7 @@ ambient_read(Lib3dsFile *file, FILE *f) if (!have_lin) { int i; for (i=0; i<3; ++i) { - file->ambient[i]=lib3ds_float_read(f); + file->ambient[i]=lib3ds_float_read(strm); } } } @@ -324,31 +338,31 @@ ambient_read(Lib3dsFile *file, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -mdata_read(Lib3dsFile *file, FILE *f) +mdata_read(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_MDATA, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_MDATA, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_MESH_VERSION: { - file->mesh_version=lib3ds_intd_read(f); + file->mesh_version=lib3ds_intd_read(strm); } break; case LIB3DS_MASTER_SCALE: { - file->master_scale=lib3ds_float_read(f); + file->master_scale=lib3ds_float_read(strm); } break; case LIB3DS_SHADOW_MAP_SIZE: @@ -359,8 +373,8 @@ mdata_read(Lib3dsFile *file, FILE *f) case LIB3DS_SHADOW_FILTER: case LIB3DS_RAY_BIAS: { - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_shadow_read(&file->shadow, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_shadow_read(&file->shadow, strm)) { return(LIB3DS_FALSE); } } @@ -368,8 +382,8 @@ mdata_read(Lib3dsFile *file, FILE *f) case LIB3DS_VIEWPORT_LAYOUT: case LIB3DS_DEFAULT_VIEW: { - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_viewport_read(&file->viewport, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_viewport_read(&file->viewport, strm)) { return(LIB3DS_FALSE); } } @@ -378,14 +392,14 @@ mdata_read(Lib3dsFile *file, FILE *f) { int i; for (i=0; i<3; ++i) { - file->construction_plane[i]=lib3ds_float_read(f); + file->construction_plane[i]=lib3ds_float_read(strm); } } break; case LIB3DS_AMBIENT_LIGHT: { - lib3ds_chunk_read_reset(&c, f); - if (!ambient_read(file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!ambient_read(file, strm)) { return(LIB3DS_FALSE); } } @@ -397,8 +411,8 @@ mdata_read(Lib3dsFile *file, FILE *f) case LIB3DS_USE_SOLID_BGND: case LIB3DS_USE_V_GRADIENT: { - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_background_read(&file->background, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_background_read(&file->background, strm)) { return(LIB3DS_FALSE); } } @@ -410,8 +424,8 @@ mdata_read(Lib3dsFile *file, FILE *f) case LIB3DS_USE_LAYER_FOG: case LIB3DS_USE_DISTANCE_CUE: { - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_atmosphere_read(&file->atmosphere, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_atmosphere_read(&file->atmosphere, strm)) { return(LIB3DS_FALSE); } } @@ -424,8 +438,8 @@ mdata_read(Lib3dsFile *file, FILE *f) if (!material) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_material_read(material, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_material_read(material, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_material(file, material); @@ -433,8 +447,8 @@ mdata_read(Lib3dsFile *file, FILE *f) break; case LIB3DS_NAMED_OBJECT: { - lib3ds_chunk_read_reset(&c, f); - if (!named_object_read(file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!named_object_read(file, strm)) { return(LIB3DS_FALSE); } } @@ -444,48 +458,48 @@ mdata_read(Lib3dsFile *file, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -kfdata_read(Lib3dsFile *file, FILE *f) +kfdata_read(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_KFDATA, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_KFDATA, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_KFHDR: { - file->keyf_revision=lib3ds_word_read(f); - if (!lib3ds_string_read(file->name, 12+1, f)) { + file->keyf_revision=lib3ds_word_read(strm); + if (!lib3ds_string_read(file->name, 12+1, strm)) { return(LIB3DS_FALSE); } - file->frames=lib3ds_intd_read(f); + file->frames=lib3ds_intd_read(strm); } break; case LIB3DS_KFSEG: { - file->segment_from=lib3ds_intd_read(f); - file->segment_to=lib3ds_intd_read(f); + file->segment_from=lib3ds_intd_read(strm); + file->segment_to=lib3ds_intd_read(strm); } break; case LIB3DS_KFCURTIME: { - file->current_frame=lib3ds_intd_read(f); + file->current_frame=lib3ds_intd_read(strm); } break; case LIB3DS_VIEWPORT_LAYOUT: case LIB3DS_DEFAULT_VIEW: { - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_viewport_read(&file->viewport_keyf, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_viewport_read(&file->viewport_keyf, strm)) { return(LIB3DS_FALSE); } } @@ -498,8 +512,8 @@ kfdata_read(Lib3dsFile *file, FILE *f) if (!node) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_node_read(node, file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_node_read(node, file, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_node(file, node); @@ -513,8 +527,8 @@ kfdata_read(Lib3dsFile *file, FILE *f) if (!node) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_node_read(node, file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_node_read(node, file, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_node(file, node); @@ -528,8 +542,8 @@ kfdata_read(Lib3dsFile *file, FILE *f) if (!node) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_node_read(node, file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_node_read(node, file, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_node(file, node); @@ -543,8 +557,8 @@ kfdata_read(Lib3dsFile *file, FILE *f) if (!node) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_node_read(node, file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_node_read(node, file, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_node(file, node); @@ -559,8 +573,8 @@ kfdata_read(Lib3dsFile *file, FILE *f) if (!node) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_node_read(node, file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_node_read(node, file, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_node(file, node); @@ -574,8 +588,8 @@ kfdata_read(Lib3dsFile *file, FILE *f) if (!node) { return(LIB3DS_FALSE); } - lib3ds_chunk_read_reset(&c, f); - if (!lib3ds_node_read(node, file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!lib3ds_node_read(node, file, strm)) { return(LIB3DS_FALSE); } lib3ds_file_insert_node(file, node); @@ -586,7 +600,7 @@ kfdata_read(Lib3dsFile *file, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -595,19 +609,19 @@ kfdata_read(Lib3dsFile *file, FILE *f) * \ingroup file */ Lib3dsBool -lib3ds_file_read(Lib3dsFile *file, FILE *f) +lib3ds_file_read(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, 0, f)) { + if (!lib3ds_chunk_read_start(&c, 0, strm)) { return(LIB3DS_FALSE); } switch (c.chunk) { case LIB3DS_MDATA: { - lib3ds_chunk_read_reset(&c, f); - if (!mdata_read(file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!mdata_read(file, strm)) { return(LIB3DS_FALSE); } } @@ -616,25 +630,25 @@ lib3ds_file_read(Lib3dsFile *file, FILE *f) case LIB3DS_MLIBMAGIC: case LIB3DS_CMAGIC: { - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_M3D_VERSION: { - file->mesh_version=lib3ds_dword_read(f); + file->mesh_version=lib3ds_dword_read(strm); } break; case LIB3DS_MDATA: { - lib3ds_chunk_read_reset(&c, f); - if (!mdata_read(file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!mdata_read(file, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_KFDATA: { - lib3ds_chunk_read_reset(&c, f); - if (!kfdata_read(file, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!kfdata_read(file, strm)) { return(LIB3DS_FALSE); } } @@ -650,36 +664,36 @@ lib3ds_file_read(Lib3dsFile *file, FILE *f) return(LIB3DS_FALSE); } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -colorf_write(Lib3dsRgba rgb, FILE *f) +colorf_write(Lib3dsRgba rgb, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_COLOR_F; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_rgb_write(rgb,f); + lib3ds_chunk_write(&c,strm); + lib3ds_rgb_write(rgb,strm); c.chunk=LIB3DS_LIN_COLOR_F; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_rgb_write(rgb,f); + lib3ds_chunk_write(&c,strm); + lib3ds_rgb_write(rgb,strm); return(LIB3DS_TRUE); } static Lib3dsBool -mdata_write(Lib3dsFile *file, FILE *f) +mdata_write(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_MDATA; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } @@ -687,15 +701,15 @@ mdata_write(Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_MESH_VERSION; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_intd_write(file->mesh_version,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intd_write(file->mesh_version,strm); } { /*---- LIB3DS_MASTER_SCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MASTER_SCALE; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(file->master_scale,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(file->master_scale,strm); } { /*---- LIB3DS_O_CONSTS ----*/ int i; @@ -708,8 +722,8 @@ mdata_write(Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_O_CONSTS; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(file->construction_plane,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(file->construction_plane,strm); } } @@ -724,18 +738,18 @@ mdata_write(Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_AMBIENT_LIGHT; c.size=42; - lib3ds_chunk_write(&c,f); - colorf_write(file->ambient,f); + lib3ds_chunk_write(&c,strm); + colorf_write(file->ambient,strm); } } - lib3ds_background_write(&file->background, f); - lib3ds_atmosphere_write(&file->atmosphere, f); - lib3ds_shadow_write(&file->shadow, f); - lib3ds_viewport_write(&file->viewport, f); + lib3ds_background_write(&file->background, strm); + lib3ds_atmosphere_write(&file->atmosphere, strm); + lib3ds_shadow_write(&file->shadow, strm); + lib3ds_viewport_write(&file->viewport, strm); { Lib3dsMaterial *p; for (p=file->materials; p!=0; p=p->next) { - if (!lib3ds_material_write(p,f)) { + if (!lib3ds_material_write(p,strm)) { return(LIB3DS_FALSE); } } @@ -746,12 +760,12 @@ mdata_write(Lib3dsFile *file, FILE *f) for (p=file->cameras; p!=0; p=p->next) { c.chunk=LIB3DS_NAMED_OBJECT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_string_write(p->name,f); - lib3ds_camera_write(p,f); - if (!lib3ds_chunk_write_end(&c,f)) { + lib3ds_string_write(p->name,strm); + lib3ds_camera_write(p,strm); + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -762,12 +776,12 @@ mdata_write(Lib3dsFile *file, FILE *f) for (p=file->lights; p!=0; p=p->next) { c.chunk=LIB3DS_NAMED_OBJECT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_string_write(p->name,f); - lib3ds_light_write(p,f); - if (!lib3ds_chunk_write_end(&c,f)) { + lib3ds_string_write(p->name,strm); + lib3ds_light_write(p,strm); + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -778,18 +792,18 @@ mdata_write(Lib3dsFile *file, FILE *f) for (p=file->meshes; p!=0; p=p->next) { c.chunk=LIB3DS_NAMED_OBJECT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_string_write(p->name,f); - lib3ds_mesh_write(p,f); - if (!lib3ds_chunk_write_end(&c,f)) { + lib3ds_string_write(p->name,strm); + lib3ds_mesh_write(p,strm); + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -798,15 +812,15 @@ mdata_write(Lib3dsFile *file, FILE *f) static Lib3dsBool -nodes_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) +nodes_write(Lib3dsNode *node, Lib3dsFile *file, iostream *strm) { { Lib3dsNode *p; for (p=node->childs; p!=0; p=p->next) { - if (!lib3ds_node_write(p, file, f)) { + if (!lib3ds_node_write(p, file, strm)) { return(LIB3DS_FALSE); } - nodes_write(p, file, f); + nodes_write(p, file, strm); } } return(LIB3DS_TRUE); @@ -814,12 +828,12 @@ nodes_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) static Lib3dsBool -kfdata_write(Lib3dsFile *file, FILE *f) +kfdata_write(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_KFDATA; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } @@ -827,41 +841,41 @@ kfdata_write(Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_KFHDR; c.size=6 + 2 + strlen(file->name)+1 +4; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write(file->keyf_revision,f); - lib3ds_string_write(file->name, f); - lib3ds_intd_write(file->frames, f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write(file->keyf_revision,strm); + lib3ds_string_write(file->name, strm); + lib3ds_intd_write(file->frames, strm); } { /*---- LIB3DS_KFSEG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_KFSEG; c.size=14; - lib3ds_chunk_write(&c,f); - lib3ds_intd_write(file->segment_from,f); - lib3ds_intd_write(file->segment_to,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intd_write(file->segment_from,strm); + lib3ds_intd_write(file->segment_to,strm); } { /*---- LIB3DS_KFCURTIME ----*/ Lib3dsChunk c; c.chunk=LIB3DS_KFCURTIME; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_intd_write(file->current_frame,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intd_write(file->current_frame,strm); } - lib3ds_viewport_write(&file->viewport_keyf, f); + lib3ds_viewport_write(&file->viewport_keyf, strm); { Lib3dsNode *p; for (p=file->nodes; p!=0; p=p->next) { - if (!lib3ds_node_write(p, file, f)) { + if (!lib3ds_node_write(p, file, strm)) { return(LIB3DS_FALSE); } - if (!nodes_write(p, file, f)) { + if (!nodes_write(p, file, strm)) { return(LIB3DS_FALSE); } } } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -872,12 +886,12 @@ kfdata_write(Lib3dsFile *file, FILE *f) * \ingroup file */ Lib3dsBool -lib3ds_file_write(Lib3dsFile *file, FILE *f) +lib3ds_file_write(Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_M3DMAGIC; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } @@ -887,18 +901,18 @@ lib3ds_file_write(Lib3dsFile *file, FILE *f) c.chunk=LIB3DS_M3D_VERSION; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_dword_write(file->mesh_version, f); + lib3ds_chunk_write(&c,strm); + lib3ds_dword_write(file->mesh_version, strm); } - if (!mdata_write(file, f)) { + if (!mdata_write(file, strm)) { return(LIB3DS_FALSE); } - if (!kfdata_write(file, f)) { + if (!kfdata_write(file, strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/file.h b/src/osgPlugins/3ds/file.h index d6535a347..67f8bc1fb 100644 --- a/src/osgPlugins/3ds/file.h +++ b/src/osgPlugins/3ds/file.h @@ -35,11 +35,16 @@ #ifndef INCLUDED_LIB3DS_VIEWPORT_H #include "viewport.h" #endif +#include +#include +using namespace std; #ifdef __cplusplus extern "C" { #endif + + /*! * 3ds file structure * \ingroup file @@ -67,13 +72,14 @@ struct _Lib3dsFile { Lib3dsNode *nodes; }; -extern LIB3DSAPI Lib3dsFile* lib3ds_file_load(const char *filename); +extern LIB3DSAPI Lib3dsFile* lib3ds_file_load(const char *filename, const osgDB::ReaderWriter::Options* options); +extern LIB3DSAPI Lib3dsFile* lib3ds_stream_load(iostream * strm); extern LIB3DSAPI Lib3dsBool lib3ds_file_save(Lib3dsFile *file, const char *filename); extern LIB3DSAPI Lib3dsFile* lib3ds_file_new(); extern LIB3DSAPI void lib3ds_file_free(Lib3dsFile *file); extern LIB3DSAPI void lib3ds_file_eval(Lib3dsFile *file, Lib3dsFloat t); -extern LIB3DSAPI Lib3dsBool lib3ds_file_read(Lib3dsFile *file, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_file_write(Lib3dsFile *file, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_file_read(Lib3dsFile *file, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_file_write(Lib3dsFile *file, iostream *strm); extern LIB3DSAPI void lib3ds_file_insert_material(Lib3dsFile *file, Lib3dsMaterial *material); extern LIB3DSAPI void lib3ds_file_remove_material(Lib3dsFile *file, Lib3dsMaterial *material); extern LIB3DSAPI Lib3dsMaterial* lib3ds_file_material_by_name(Lib3dsFile *file, const char *name); diff --git a/src/osgPlugins/3ds/light.cpp b/src/osgPlugins/3ds/light.cpp index d82bcf556..8e4a47eb0 100644 --- a/src/osgPlugins/3ds/light.cpp +++ b/src/osgPlugins/3ds/light.cpp @@ -121,28 +121,28 @@ lib3ds_light_dump(Lib3dsLight *light) * \ingroup light */ static Lib3dsBool -spotlight_read(Lib3dsLight *light, FILE *f) +spotlight_read(Lib3dsLight *light, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; int i; - if (!lib3ds_chunk_read_start(&c, LIB3DS_DL_SPOTLIGHT, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_DL_SPOTLIGHT, strm)) { return(LIB3DS_FALSE); } light->spot_light=LIB3DS_TRUE; for (i=0; i<3; ++i) { - light->spot[i]=lib3ds_float_read(f); + light->spot[i]=lib3ds_float_read(strm); } - light->hot_spot = lib3ds_float_read(f); - light->fall_off = lib3ds_float_read(f); - lib3ds_chunk_read_tell(&c, f); + light->hot_spot = lib3ds_float_read(strm); + light->fall_off = lib3ds_float_read(strm); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_DL_SPOT_ROLL: { - light->roll=lib3ds_float_read(f); + light->roll=lib3ds_float_read(strm); } break; case LIB3DS_DL_SHADOWED: @@ -152,9 +152,9 @@ spotlight_read(Lib3dsLight *light, FILE *f) break; case LIB3DS_DL_LOCAL_SHADOW2: { - light->shadow_bias=lib3ds_float_read(f); - light->shadow_filter=lib3ds_float_read(f); - light->shadow_size=lib3ds_intw_read(f); + light->shadow_bias=lib3ds_float_read(strm); + light->shadow_filter=lib3ds_float_read(strm); + light->shadow_size=lib3ds_intw_read(strm); } break; case LIB3DS_DL_SEE_CONE: @@ -169,13 +169,13 @@ spotlight_read(Lib3dsLight *light, FILE *f) break; case LIB3DS_DL_SPOT_ASPECT: { - light->spot_aspect=lib3ds_float_read(f); + light->spot_aspect=lib3ds_float_read(strm); } break; case LIB3DS_DL_SPOT_PROJECTOR: { light->use_projector=LIB3DS_TRUE; - if (!lib3ds_string_read(light->projector, 64, f)) { + if (!lib3ds_string_read(light->projector, 64, strm)) { return(LIB3DS_FALSE); } } @@ -186,7 +186,7 @@ spotlight_read(Lib3dsLight *light, FILE *f) break; case LIB3DS_DL_RAY_BIAS: { - light->ray_bias=lib3ds_float_read(f); + light->ray_bias=lib3ds_float_read(strm); } break; case LIB3DS_DL_RAYSHAD: @@ -199,7 +199,7 @@ spotlight_read(Lib3dsLight *light, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -208,29 +208,29 @@ spotlight_read(Lib3dsLight *light, FILE *f) * \ingroup light */ Lib3dsBool -lib3ds_light_read(Lib3dsLight *light, FILE *f) +lib3ds_light_read(Lib3dsLight *light, iostream * strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_N_DIRECT_LIGHT, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_N_DIRECT_LIGHT, strm)) { return(LIB3DS_FALSE); } { int i; for (i=0; i<3; ++i) { - light->position[i]=lib3ds_float_read(f); + light->position[i]=lib3ds_float_read(strm); } } - lib3ds_chunk_read_tell(&c, f); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_COLOR_F: { int i; for (i=0; i<3; ++i) { - light->color[i]=lib3ds_float_read(f); + light->color[i]=lib3ds_float_read(strm); } } break; @@ -241,17 +241,17 @@ lib3ds_light_read(Lib3dsLight *light, FILE *f) break; case LIB3DS_DL_OUTER_RANGE: { - light->outer_range=lib3ds_float_read(f); + light->outer_range=lib3ds_float_read(strm); } break; case LIB3DS_DL_INNER_RANGE: { - light->inner_range=lib3ds_float_read(f); + light->inner_range=lib3ds_float_read(strm); } break; case LIB3DS_DL_MULTIPLIER: { - light->multiplier=lib3ds_float_read(f); + light->multiplier=lib3ds_float_read(strm); } break; case LIB3DS_DL_EXCLUDE: @@ -261,13 +261,13 @@ lib3ds_light_read(Lib3dsLight *light, FILE *f) } case LIB3DS_DL_ATTENUATE: { - light->attenuation=lib3ds_float_read(f); + light->attenuation=lib3ds_float_read(strm); } break; case LIB3DS_DL_SPOTLIGHT: { - lib3ds_chunk_read_reset(&c, f); - if (!spotlight_read(light, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!spotlight_read(light, strm)) { return(LIB3DS_FALSE); } } @@ -277,7 +277,7 @@ lib3ds_light_read(Lib3dsLight *light, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -286,79 +286,79 @@ lib3ds_light_read(Lib3dsLight *light, FILE *f) * \ingroup light */ Lib3dsBool -lib3ds_light_write(Lib3dsLight *light, FILE *f) +lib3ds_light_write(Lib3dsLight *light, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_N_DIRECT_LIGHT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_vector_write(light->position, f); + lib3ds_vector_write(light->position, strm); { /*---- LIB3DS_COLOR_F ----*/ Lib3dsChunk c; c.chunk=LIB3DS_COLOR_F; c.size=18; - lib3ds_chunk_write(&c, f); - lib3ds_rgb_write(light->color,f); + lib3ds_chunk_write(&c, strm); + lib3ds_rgb_write(light->color,strm); } if (light->off) { /*---- LIB3DS_DL_OFF ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_OFF; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } { /*---- LIB3DS_DL_OUTER_RANGE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_OUTER_RANGE; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->outer_range,f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->outer_range,strm); } { /*---- LIB3DS_DL_INNER_RANGE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_INNER_RANGE; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->inner_range,f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->inner_range,strm); } { /*---- LIB3DS_DL_MULTIPLIER ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_MULTIPLIER; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->multiplier, f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->multiplier, strm); } if (light->attenuation) { /*---- LIB3DS_DL_ATTENUATE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_ATTENUATE; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } if (light->spot_light) { Lib3dsChunk c; c.chunk=LIB3DS_DL_SPOTLIGHT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_vector_write(light->spot, f); - lib3ds_float_write(light->hot_spot, f); - lib3ds_float_write(light->fall_off, f); + lib3ds_vector_write(light->spot, strm); + lib3ds_float_write(light->hot_spot, strm); + lib3ds_float_write(light->fall_off, strm); { /*---- LIB3DS_DL_SPOT_ROLL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SPOT_ROLL; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->roll,f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->roll,strm); } if (light->shadowed) { /*---- LIB3DS_DL_SHADOWED ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SHADOWED; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } if ((fabs(light->shadow_bias)>LIB3DS_EPSILON) || (fabs(light->shadow_filter)>LIB3DS_EPSILON) || @@ -366,61 +366,61 @@ lib3ds_light_write(Lib3dsLight *light, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_DL_LOCAL_SHADOW2; c.size=16; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->shadow_bias,f); - lib3ds_float_write(light->shadow_filter,f); - lib3ds_intw_write(light->shadow_size,f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->shadow_bias,strm); + lib3ds_float_write(light->shadow_filter,strm); + lib3ds_intw_write(light->shadow_size,strm); } if (light->see_cone) { /*---- LIB3DS_DL_SEE_CONE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SEE_CONE; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } if (light->rectangular_spot) { /*---- LIB3DS_DL_SPOT_RECTANGULAR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SPOT_RECTANGULAR; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } if (fabs(light->spot_aspect)>LIB3DS_EPSILON) { /*---- LIB3DS_DL_SPOT_ASPECT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SPOT_ASPECT; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->spot_aspect,f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->spot_aspect,strm); } if (light->use_projector) { /*---- LIB3DS_DL_SPOT_PROJECTOR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SPOT_PROJECTOR; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_string_write(light->projector,f); + lib3ds_chunk_write(&c, strm); + lib3ds_string_write(light->projector,strm); } if (light->spot_overshoot) { /*---- LIB3DS_DL_SPOT_OVERSHOOT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_SPOT_OVERSHOOT; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } if (fabs(light->ray_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_DL_RAY_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_RAY_BIAS; c.size=10; - lib3ds_chunk_write(&c, f); - lib3ds_float_write(light->ray_bias,f); + lib3ds_chunk_write(&c, strm); + lib3ds_float_write(light->ray_bias,strm); } if (light->ray_shadows) { /*---- LIB3DS_DL_RAYSHAD ----*/ Lib3dsChunk c; c.chunk=LIB3DS_DL_RAYSHAD; c.size=6; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/light.h b/src/osgPlugins/3ds/light.h index bec3fe496..2a1ceb8f8 100644 --- a/src/osgPlugins/3ds/light.h +++ b/src/osgPlugins/3ds/light.h @@ -27,10 +27,14 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif + /*! * Light * \ingroup light @@ -68,8 +72,8 @@ struct _Lib3dsLight { extern LIB3DSAPI Lib3dsLight* lib3ds_light_new(const char *name); extern LIB3DSAPI void lib3ds_light_free(Lib3dsLight *mesh); extern LIB3DSAPI void lib3ds_light_dump(Lib3dsLight *light); -extern LIB3DSAPI Lib3dsBool lib3ds_light_read(Lib3dsLight *light, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_light_write(Lib3dsLight *light, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_light_read(Lib3dsLight *light, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_light_write(Lib3dsLight *light, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/material.cpp b/src/osgPlugins/3ds/material.cpp index 35371d045..4e2043c26 100644 --- a/src/osgPlugins/3ds/material.cpp +++ b/src/osgPlugins/3ds/material.cpp @@ -67,23 +67,23 @@ lib3ds_material_free(Lib3dsMaterial *material) static Lib3dsBool -color_read(Lib3dsRgba rgb, FILE *f) +color_read(Lib3dsRgba rgb, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; Lib3dsBool have_lin=LIB3DS_FALSE; - if (!lib3ds_chunk_read_start(&c, 0, f)) { + if (!lib3ds_chunk_read_start(&c, 0, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_LIN_COLOR_24: { int i; for (i=0; i<3; ++i) { - rgb[i]=1.0f*lib3ds_byte_read(f)/255.0f; + rgb[i]=1.0f*lib3ds_byte_read(strm)/255.0f; } rgb[3]=1.0f; } @@ -95,40 +95,40 @@ color_read(Lib3dsRgba rgb, FILE *f) if (!have_lin) { int i; for (i=0; i<3; ++i) { - rgb[i]=1.0f*lib3ds_byte_read(f)/255.0f; + rgb[i]=1.0f*lib3ds_byte_read(strm)/255.0f; } rgb[3]=1.0f; } break; case LIB3DS_COLOR_F: // sth: this will fix 3ds-files exported from cinema 4d - lib3ds_rgb_read(rgb, f); + lib3ds_rgb_read(rgb, strm); break; default: lib3ds_chunk_unknown(chunk); } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -int_percentage_read(Lib3dsFloat *p, FILE *f) +int_percentage_read(Lib3dsFloat *p, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, 0, f)) { + if (!lib3ds_chunk_read_start(&c, 0, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_INT_PERCENTAGE: { - Lib3dsIntw i=lib3ds_intw_read(f); + Lib3dsIntw i=lib3ds_intw_read(strm); *p=(Lib3dsFloat)(1.0*i/100.0); } break; @@ -137,31 +137,31 @@ int_percentage_read(Lib3dsFloat *p, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -texture_map_read(Lib3dsTextureMap *map, FILE *f) +texture_map_read(Lib3dsTextureMap *map, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, 0, f)) { + if (!lib3ds_chunk_read_start(&c, 0, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_INT_PERCENTAGE: { - map->percent=1.0f*lib3ds_intw_read(f)/100.0f; + map->percent=1.0f*lib3ds_intw_read(strm)/100.0f; } break; case LIB3DS_MAT_MAPNAME: { - if (!lib3ds_string_read(map->name, 64, f)) { + if (!lib3ds_string_read(map->name, 64, strm)) { return(LIB3DS_FALSE); } lib3ds_chunk_dump_info(" NAME=%s", map->name); @@ -169,72 +169,72 @@ texture_map_read(Lib3dsTextureMap *map, FILE *f) break; case LIB3DS_MAT_MAP_TILING: { - map->flags=lib3ds_word_read(f); + map->flags=lib3ds_word_read(strm); } break; case LIB3DS_MAT_MAP_TEXBLUR: { - map->blur=lib3ds_float_read(f); + map->blur=lib3ds_float_read(strm); } break; case LIB3DS_MAT_MAP_USCALE: { - map->scale[0]=lib3ds_float_read(f); + map->scale[0]=lib3ds_float_read(strm); } break; case LIB3DS_MAT_MAP_VSCALE: { - map->scale[1]=lib3ds_float_read(f); + map->scale[1]=lib3ds_float_read(strm); } break; case LIB3DS_MAT_MAP_UOFFSET: { - map->offset[0]=lib3ds_float_read(f); + map->offset[0]=lib3ds_float_read(strm); } break; case LIB3DS_MAT_MAP_VOFFSET: { - map->offset[1]=lib3ds_float_read(f); + map->offset[1]=lib3ds_float_read(strm); } break; case LIB3DS_MAT_MAP_ANG: { - map->rotation=lib3ds_float_read(f); + map->rotation=lib3ds_float_read(strm); } break; case LIB3DS_MAT_MAP_COL1: { - map->tint_1[0]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_1[1]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_1[2]=1.0f*lib3ds_byte_read(f)/255.0f; + map->tint_1[0]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_1[1]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_1[2]=1.0f*lib3ds_byte_read(strm)/255.0f; } break; case LIB3DS_MAT_MAP_COL2: { - map->tint_2[0]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_2[1]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_2[2]=1.0f*lib3ds_byte_read(f)/255.0f; + map->tint_2[0]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_2[1]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_2[2]=1.0f*lib3ds_byte_read(strm)/255.0f; } break; case LIB3DS_MAT_MAP_RCOL: { - map->tint_r[0]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_r[1]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_r[2]=1.0f*lib3ds_byte_read(f)/255.0f; + map->tint_r[0]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_r[1]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_r[2]=1.0f*lib3ds_byte_read(strm)/255.0f; } break; case LIB3DS_MAT_MAP_GCOL: { - map->tint_g[0]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_g[1]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_g[2]=1.0f*lib3ds_byte_read(f)/255.0f; + map->tint_g[0]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_g[1]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_g[2]=1.0f*lib3ds_byte_read(strm)/255.0f; } break; case LIB3DS_MAT_MAP_BCOL: { - map->tint_b[0]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_b[1]=1.0f*lib3ds_byte_read(f)/255.0f; - map->tint_b[2]=1.0f*lib3ds_byte_read(f)/255.0f; + map->tint_b[0]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_b[1]=1.0f*lib3ds_byte_read(strm)/255.0f; + map->tint_b[2]=1.0f*lib3ds_byte_read(strm)/255.0f; } break; default: @@ -242,7 +242,7 @@ texture_map_read(Lib3dsTextureMap *map, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -337,21 +337,21 @@ lib3ds_material_dump(Lib3dsMaterial *material) * \ingroup material */ Lib3dsBool -lib3ds_material_read(Lib3dsMaterial *material, FILE *f) +lib3ds_material_read(Lib3dsMaterial *material, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; ASSERT(material); - if (!lib3ds_chunk_read_start(&c, LIB3DS_MAT_ENTRY, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_MAT_ENTRY, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_MAT_NAME: { - if (!lib3ds_string_read(material->name, 64, f)) { + if (!lib3ds_string_read(material->name, 64, strm)) { return(LIB3DS_FALSE); } lib3ds_chunk_dump_info(" NAME=%s", material->name); @@ -359,56 +359,56 @@ lib3ds_material_read(Lib3dsMaterial *material, FILE *f) break; case LIB3DS_MAT_AMBIENT: { - lib3ds_chunk_read_reset(&c, f); - if (!color_read(material->ambient, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!color_read(material->ambient, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_DIFFUSE: { - lib3ds_chunk_read_reset(&c, f); - if (!color_read(material->diffuse, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!color_read(material->diffuse, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SPECULAR: { - lib3ds_chunk_read_reset(&c, f); - if (!color_read(material->specular, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!color_read(material->specular, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHININESS: { - lib3ds_chunk_read_reset(&c, f); - if (!int_percentage_read(&material->shininess, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!int_percentage_read(&material->shininess, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHIN2PCT: { - lib3ds_chunk_read_reset(&c, f); - if (!int_percentage_read(&material->shin_strength, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!int_percentage_read(&material->shin_strength, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TRANSPARENCY: { - lib3ds_chunk_read_reset(&c, f); - if (!int_percentage_read(&material->transparency, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!int_percentage_read(&material->transparency, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_XPFALL: { - lib3ds_chunk_read_reset(&c, f); - if (!int_percentage_read(&material->falloff, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!int_percentage_read(&material->falloff, strm)) { return(LIB3DS_FALSE); } } @@ -420,8 +420,8 @@ lib3ds_material_read(Lib3dsMaterial *material, FILE *f) break; case LIB3DS_MAT_REFBLUR: { - lib3ds_chunk_read_reset(&c, f); - if (!int_percentage_read(&material->blur, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!int_percentage_read(&material->blur, strm)) { return(LIB3DS_FALSE); } } @@ -433,7 +433,7 @@ lib3ds_material_read(Lib3dsMaterial *material, FILE *f) break; case LIB3DS_MAT_SHADING: { - material->shading=lib3ds_intw_read(f); + material->shading=lib3ds_intw_read(strm); } break; case LIB3DS_MAT_SELF_ILLUM: @@ -478,144 +478,144 @@ lib3ds_material_read(Lib3dsMaterial *material, FILE *f) break; case LIB3DS_MAT_WIRE_SIZE: { - material->wire_size=lib3ds_float_read(f); + material->wire_size=lib3ds_float_read(strm); } break; case LIB3DS_MAT_TEXMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->texture1_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->texture1_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TEXMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->texture1_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->texture1_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TEX2MAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->texture2_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->texture2_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TEX2MASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->texture2_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->texture2_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_OPACMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->opacity_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->opacity_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_OPACMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->opacity_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->opacity_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_BUMPMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->bump_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->bump_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_BUMPMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->bump_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->bump_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SPECMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->specular_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->specular_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SPECMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->specular_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->specular_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHINMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->shininess_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->shininess_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHINMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->shininess_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->shininess_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SELFIMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->self_illum_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->self_illum_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SELFIMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->self_illum_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->self_illum_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_REFLMAP: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->reflection_map, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->reflection_map, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_REFLMASK: { - lib3ds_chunk_read_reset(&c, f); - if (!texture_map_read(&material->reflection_mask, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!texture_map_read(&material->reflection_mask, strm)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_ACUBIC: { - lib3ds_intb_read(f); - material->autorefl_map.level=lib3ds_intb_read(f); - material->autorefl_map.flags=lib3ds_intw_read(f); - material->autorefl_map.size=lib3ds_intd_read(f); - material->autorefl_map.frame_step=lib3ds_intd_read(f); + lib3ds_intb_read(strm); + material->autorefl_map.level=lib3ds_intb_read(strm); + material->autorefl_map.flags=lib3ds_intw_read(strm); + material->autorefl_map.size=lib3ds_intd_read(strm); + material->autorefl_map.frame_step=lib3ds_intd_read(strm); } break; default: @@ -623,50 +623,50 @@ lib3ds_material_read(Lib3dsMaterial *material, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -color_write(Lib3dsRgba rgb, FILE *f) +color_write(Lib3dsRgba rgb, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_COLOR_24; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[0]+0.5),f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[1]+0.5),f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[2]+0.5),f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[0]+0.5),strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[1]+0.5),strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[2]+0.5),strm); c.chunk=LIB3DS_LIN_COLOR_24; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[0]+0.5),f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[1]+0.5),f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[2]+0.5),f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[0]+0.5),strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[1]+0.5),strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*rgb[2]+0.5),strm); return(LIB3DS_TRUE); } static Lib3dsBool -int_percentage_write(Lib3dsFloat p, FILE *f) +int_percentage_write(Lib3dsFloat p, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_INT_PERCENTAGE; c.size=8; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write((Lib3dsByte)floor(100.0*p+0.5),f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write((Lib3dsByte)floor(100.0*p+0.5),strm); return(LIB3DS_TRUE); } static Lib3dsBool -texture_map_write(Lib3dsWord chunk, Lib3dsTextureMap *map, FILE *f) +texture_map_write(Lib3dsWord chunk, Lib3dsTextureMap *map, iostream *strm) { Lib3dsChunk c; @@ -674,127 +674,127 @@ texture_map_write(Lib3dsWord chunk, Lib3dsTextureMap *map, FILE *f) return(LIB3DS_TRUE); } c.chunk=chunk; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - int_percentage_write(map->percent,f); + int_percentage_write(map->percent,strm); { /*---- LIB3DS_MAT_MAPNAME ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAPNAME; c.size=6+strlen(map->name)+1; - lib3ds_chunk_write(&c,f); - lib3ds_string_write(map->name,f); + lib3ds_chunk_write(&c,strm); + lib3ds_string_write(map->name,strm); } { /*---- LIB3DS_MAT_MAP_TILING ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_TILING; c.size=8; - lib3ds_chunk_write(&c,f); - lib3ds_word_write((Lib3dsWord)map->flags,f); + lib3ds_chunk_write(&c,strm); + lib3ds_word_write((Lib3dsWord)map->flags,strm); } { /*---- LIB3DS_MAT_MAP_TEXBLUR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_TEXBLUR; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(map->blur,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(map->blur,strm); } { /*---- LIB3DS_MAT_MAP_USCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_USCALE; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(map->scale[0],f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(map->scale[0],strm); } { /*---- LIB3DS_MAT_MAP_VSCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_VSCALE; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(map->scale[1],f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(map->scale[1],strm); } { /*---- LIB3DS_MAT_MAP_UOFFSET ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_UOFFSET; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(map->offset[0],f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(map->offset[0],strm); } { /*---- LIB3DS_MAT_MAP_VOFFSET ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_VOFFSET; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(map->offset[1],f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(map->offset[1],strm); } { /*---- LIB3DS_MAT_MAP_ANG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_ANG; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(map->rotation,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(map->rotation,strm); } { /*---- LIB3DS_MAT_MAP_COL1 ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_COL1; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[0]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[1]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[2]+0.5), f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[0]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[1]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[2]+0.5), strm); } { /*---- LIB3DS_MAT_MAP_COL2 ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_COL2; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[0]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[1]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[2]+0.5), f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[0]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[1]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[2]+0.5), strm); } { /*---- LIB3DS_MAT_MAP_RCOL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_RCOL; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[0]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[1]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[2]+0.5), f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[0]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[1]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[2]+0.5), strm); } { /*---- LIB3DS_MAT_MAP_GCOL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_GCOL; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[0]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[1]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[2]+0.5), f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[0]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[1]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[2]+0.5), strm); } { /*---- LIB3DS_MAT_MAP_BCOL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_BCOL; c.size=9; - lib3ds_chunk_write(&c,f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[0]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[1]+0.5), f); - lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[2]+0.5), f); + lib3ds_chunk_write(&c,strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[0]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[1]+0.5), strm); + lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[2]+0.5), strm); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -805,12 +805,12 @@ texture_map_write(Lib3dsWord chunk, Lib3dsTextureMap *map, FILE *f) * \ingroup material */ Lib3dsBool -lib3ds_material_write(Lib3dsMaterial *material, FILE *f) +lib3ds_material_write(Lib3dsMaterial *material, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_MAT_ENTRY; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } @@ -818,210 +818,210 @@ lib3ds_material_write(Lib3dsMaterial *material, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_MAT_NAME; c.size=6+strlen(material->name)+1; - lib3ds_chunk_write(&c,f); - lib3ds_string_write(material->name,f); + lib3ds_chunk_write(&c,strm); + lib3ds_string_write(material->name,strm); } { /*---- LIB3DS_MAT_AMBIENT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_AMBIENT; c.size=24; - lib3ds_chunk_write(&c,f); - color_write(material->ambient,f); + lib3ds_chunk_write(&c,strm); + color_write(material->ambient,strm); } { /*---- LIB3DS_MAT_DIFFUSE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_DIFFUSE; c.size=24; - lib3ds_chunk_write(&c,f); - color_write(material->diffuse,f); + lib3ds_chunk_write(&c,strm); + color_write(material->diffuse,strm); } { /*---- LIB3DS_MAT_SPECULAR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SPECULAR; c.size=24; - lib3ds_chunk_write(&c,f); - color_write(material->specular,f); + lib3ds_chunk_write(&c,strm); + color_write(material->specular,strm); } { /*---- LIB3DS_MAT_SHININESS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SHININESS; c.size=14; - lib3ds_chunk_write(&c,f); - int_percentage_write(material->shininess,f); + lib3ds_chunk_write(&c,strm); + int_percentage_write(material->shininess,strm); } { /*---- LIB3DS_MAT_SHIN2PCT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SHIN2PCT; c.size=14; - lib3ds_chunk_write(&c,f); - int_percentage_write(material->shin_strength,f); + lib3ds_chunk_write(&c,strm); + int_percentage_write(material->shin_strength,strm); } { /*---- LIB3DS_MAT_TRANSPARENCY ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_TRANSPARENCY; c.size=14; - lib3ds_chunk_write(&c,f); - int_percentage_write(material->transparency,f); + lib3ds_chunk_write(&c,strm); + int_percentage_write(material->transparency,strm); } { /*---- LIB3DS_MAT_XPFALL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_XPFALL; c.size=14; - lib3ds_chunk_write(&c,f); - int_percentage_write(material->falloff,f); + lib3ds_chunk_write(&c,strm); + int_percentage_write(material->falloff,strm); } if (material->use_falloff) { /*---- LIB3DS_MAT_USE_XPFALL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_USE_XPFALL; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } { /*---- LIB3DS_MAT_SHADING ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SHADING; c.size=8; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write(material->shading,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write(material->shading,strm); } { /*---- LIB3DS_MAT_REFBLUR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_REFBLUR; c.size=14; - lib3ds_chunk_write(&c,f); - int_percentage_write(material->blur,f); + lib3ds_chunk_write(&c,strm); + int_percentage_write(material->blur,strm); } if (material->use_blur) { /*---- LIB3DS_MAT_USE_REFBLUR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_USE_REFBLUR; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->self_illum) { /*---- LIB3DS_MAT_SELF_ILLUM ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SELF_ILLUM; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->two_sided) { /*---- LIB3DS_MAT_TWO_SIDE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_TWO_SIDE; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->map_decal) { /*---- LIB3DS_MAT_DECAL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_DECAL; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->additive) { /*---- LIB3DS_MAT_ADDITIVE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_ADDITIVE; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->use_wire) { /*---- LIB3DS_MAT_WIRE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_WIRE; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->use_wire_abs) { /*---- LIB3DS_MAT_WIREABS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_WIREABS; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } { /*---- LIB3DS_MAT_WIRE_SIZE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_WIRE_SIZE; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(material->wire_size,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(material->wire_size,strm); } if (material->face_map) { /*---- LIB3DS_MAT_FACEMAP ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_FACEMAP; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } if (material->soften) { /*---- LIB3DS_MAT_PHONGSOFT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_PHONGSOFT; c.size=6; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); } - if (!texture_map_write(LIB3DS_MAT_TEXMAP, &material->texture1_map, f)) { + if (!texture_map_write(LIB3DS_MAT_TEXMAP, &material->texture1_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_TEXMASK, &material->texture1_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_TEXMASK, &material->texture1_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_TEX2MAP, &material->texture2_map, f)) { + if (!texture_map_write(LIB3DS_MAT_TEX2MAP, &material->texture2_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_TEX2MASK, &material->texture2_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_TEX2MASK, &material->texture2_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_OPACMAP, &material->opacity_map, f)) { + if (!texture_map_write(LIB3DS_MAT_OPACMAP, &material->opacity_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_OPACMASK, &material->opacity_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_OPACMASK, &material->opacity_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_BUMPMAP, &material->bump_map, f)) { + if (!texture_map_write(LIB3DS_MAT_BUMPMAP, &material->bump_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_BUMPMASK, &material->bump_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_BUMPMASK, &material->bump_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_SPECMAP, &material->specular_map, f)) { + if (!texture_map_write(LIB3DS_MAT_SPECMAP, &material->specular_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_SPECMASK, &material->specular_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_SPECMASK, &material->specular_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_SHINMAP, &material->shininess_map, f)) { + if (!texture_map_write(LIB3DS_MAT_SHINMAP, &material->shininess_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_SHINMASK, &material->shininess_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_SHINMASK, &material->shininess_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_SELFIMAP, &material->self_illum_map, f)) { + if (!texture_map_write(LIB3DS_MAT_SELFIMAP, &material->self_illum_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_SELFIMASK, &material->self_illum_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_SELFIMASK, &material->self_illum_mask, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_REFLMAP, &material->reflection_map, f)) { + if (!texture_map_write(LIB3DS_MAT_REFLMAP, &material->reflection_map, strm)) { return(LIB3DS_FALSE); } - if (!texture_map_write(LIB3DS_MAT_REFLMASK, &material->reflection_mask, f)) { + if (!texture_map_write(LIB3DS_MAT_REFLMASK, &material->reflection_mask, strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/material.h b/src/osgPlugins/3ds/material.h index 25b12da81..d7848d1dd 100644 --- a/src/osgPlugins/3ds/material.h +++ b/src/osgPlugins/3ds/material.h @@ -27,6 +27,9 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif @@ -156,8 +159,8 @@ struct _Lib3dsMaterial { extern LIB3DSAPI Lib3dsMaterial* lib3ds_material_new(); extern LIB3DSAPI void lib3ds_material_free(Lib3dsMaterial *material); extern LIB3DSAPI void lib3ds_material_dump(Lib3dsMaterial *material); -extern LIB3DSAPI Lib3dsBool lib3ds_material_read(Lib3dsMaterial *material, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_material_write(Lib3dsMaterial *material, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_material_read(Lib3dsMaterial *material, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_material_write(Lib3dsMaterial *material, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/mesh.cpp b/src/osgPlugins/3ds/mesh.cpp index cd13aed00..6f1847484 100644 --- a/src/osgPlugins/3ds/mesh.cpp +++ b/src/osgPlugins/3ds/mesh.cpp @@ -42,19 +42,19 @@ static Lib3dsBool -face_array_read(Lib3dsMesh *mesh, FILE *f) +face_array_read(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; int i; int faces; - if (!lib3ds_chunk_read_start(&c, LIB3DS_FACE_ARRAY, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_FACE_ARRAY, strm)) { return(LIB3DS_FALSE); } lib3ds_mesh_free_face_list(mesh); - faces=lib3ds_word_read(f); + faces=lib3ds_word_read(strm); if (faces) { if (!lib3ds_mesh_new_face_list(mesh, faces)) { LIB3DS_ERROR_LOG; @@ -62,21 +62,21 @@ face_array_read(Lib3dsMesh *mesh, FILE *f) } for (i=0; ifaceL[i].material, ""); - mesh->faceL[i].points[0]=lib3ds_word_read(f); - mesh->faceL[i].points[1]=lib3ds_word_read(f); - mesh->faceL[i].points[2]=lib3ds_word_read(f); - mesh->faceL[i].flags=lib3ds_word_read(f); + mesh->faceL[i].points[0]=lib3ds_word_read(strm); + mesh->faceL[i].points[1]=lib3ds_word_read(strm); + mesh->faceL[i].points[2]=lib3ds_word_read(strm); + mesh->faceL[i].flags=lib3ds_word_read(strm); } - lib3ds_chunk_read_tell(&c, f); + lib3ds_chunk_read_tell(&c, strm); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_SMOOTH_GROUP: { unsigned i; for (i=0; ifaces; ++i) { - mesh->faceL[i].smoothing=lib3ds_dword_read(f); + mesh->faceL[i].smoothing=lib3ds_dword_read(strm); } } break; @@ -87,12 +87,12 @@ face_array_read(Lib3dsMesh *mesh, FILE *f) unsigned i; unsigned index; - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } - faces=lib3ds_word_read(f); + faces=lib3ds_word_read(strm); for (i=0; ifaces); strcpy(mesh->faceL[index].material, name); } @@ -102,27 +102,27 @@ face_array_read(Lib3dsMesh *mesh, FILE *f) { char name[64]; - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } strcpy(mesh->box_map.front, name); - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } strcpy(mesh->box_map.back, name); - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } strcpy(mesh->box_map.left, name); - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } strcpy(mesh->box_map.right, name); - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } strcpy(mesh->box_map.top, name); - if (!lib3ds_string_read(name, 64, f)) { + if (!lib3ds_string_read(name, 64, strm)) { return(LIB3DS_FALSE); } strcpy(mesh->box_map.bottom, name); @@ -134,7 +134,7 @@ face_array_read(Lib3dsMesh *mesh, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -523,16 +523,16 @@ lib3ds_mesh_dump(Lib3dsMesh *mesh) * \ingroup mesh */ Lib3dsBool -lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) +lib3ds_mesh_read(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, LIB3DS_N_TRI_OBJECT, f)) { + if (!lib3ds_chunk_read_start(&c, LIB3DS_N_TRI_OBJECT, strm)) { return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_MESH_MATRIX: { @@ -541,14 +541,14 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) lib3ds_matrix_identity(mesh->matrix); for (i=0; i<4; i++) { for (j=0; j<3; j++) { - mesh->matrix[i][j]=lib3ds_float_read(f); + mesh->matrix[i][j]=lib3ds_float_read(strm); } } } break; case LIB3DS_MESH_COLOR: { - mesh->color=lib3ds_byte_read(f); + mesh->color=lib3ds_byte_read(strm); } break; case LIB3DS_POINT_ARRAY: @@ -557,7 +557,7 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) unsigned points; lib3ds_mesh_free_point_list(mesh); - points=lib3ds_word_read(f); + points=lib3ds_word_read(strm); if (points) { if (!lib3ds_mesh_new_point_list(mesh, points)) { LIB3DS_ERROR_LOG; @@ -565,7 +565,7 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) } for (i=0; ipoints; ++i) { for (j=0; j<3; ++j) { - mesh->pointL[i].pos[j]=lib3ds_float_read(f); + mesh->pointL[i].pos[j]=lib3ds_float_read(strm); } } ASSERT((!mesh->flags) || (mesh->points==mesh->flags)); @@ -579,14 +579,14 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) unsigned flags; lib3ds_mesh_free_flag_list(mesh); - flags=lib3ds_word_read(f); + flags=lib3ds_word_read(strm); if (flags) { if (!lib3ds_mesh_new_flag_list(mesh, flags)) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } for (i=0; iflags; ++i) { - mesh->flagL[i]=lib3ds_word_read(f); + mesh->flagL[i]=lib3ds_word_read(strm); } ASSERT((!mesh->points) || (mesh->flags==mesh->points)); ASSERT((!mesh->texels) || (mesh->flags==mesh->texels)); @@ -595,8 +595,8 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) break; case LIB3DS_FACE_ARRAY: { - lib3ds_chunk_read_reset(&c, f); - if (!face_array_read(mesh, f)) { + lib3ds_chunk_read_reset(&c, strm); + if (!face_array_read(mesh, strm)) { return(LIB3DS_FALSE); } } @@ -606,23 +606,23 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) int i,j; for (i=0; i<2; ++i) { - mesh->map_data.tile[i]=lib3ds_float_read(f); + mesh->map_data.tile[i]=lib3ds_float_read(strm); } for (i=0; i<3; ++i) { - mesh->map_data.pos[i]=lib3ds_float_read(f); + mesh->map_data.pos[i]=lib3ds_float_read(strm); } - mesh->map_data.scale=lib3ds_float_read(f); + mesh->map_data.scale=lib3ds_float_read(strm); lib3ds_matrix_identity(mesh->map_data.matrix); for (i=0; i<4; i++) { for (j=0; j<3; j++) { - mesh->map_data.matrix[i][j]=lib3ds_float_read(f); + mesh->map_data.matrix[i][j]=lib3ds_float_read(strm); } } for (i=0; i<2; ++i) { - mesh->map_data.planar_size[i]=lib3ds_float_read(f); + mesh->map_data.planar_size[i]=lib3ds_float_read(strm); } - mesh->map_data.cylinder_height=lib3ds_float_read(f); + mesh->map_data.cylinder_height=lib3ds_float_read(strm); } break; case LIB3DS_TEX_VERTS: @@ -631,15 +631,15 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) unsigned texels; lib3ds_mesh_free_texel_list(mesh); - texels=lib3ds_word_read(f); + texels=lib3ds_word_read(strm); if (texels) { if (!lib3ds_mesh_new_texel_list(mesh, texels)) { LIB3DS_ERROR_LOG; return(LIB3DS_FALSE); } for (i=0; itexels; ++i) { - mesh->texelL[i][0]=lib3ds_float_read(f); - mesh->texelL[i][1]=lib3ds_float_read(f); + mesh->texelL[i][0]=lib3ds_float_read(strm); + mesh->texelL[i][1]=lib3ds_float_read(strm); } ASSERT((!mesh->points) || (mesh->texels==mesh->points)); ASSERT((!mesh->flags) || (mesh->texels==mesh->flags)); @@ -666,13 +666,13 @@ lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } static Lib3dsBool -point_array_write(Lib3dsMesh *mesh, FILE *f) +point_array_write(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; unsigned i; @@ -683,18 +683,18 @@ point_array_write(Lib3dsMesh *mesh, FILE *f) ASSERT(mesh->points<0x10000); c.chunk=LIB3DS_POINT_ARRAY; c.size=8+12*mesh->points; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); - lib3ds_word_write((Lib3dsWord)mesh->points, f); + lib3ds_word_write((Lib3dsWord)mesh->points, strm); for (i=0; ipoints; ++i) { - lib3ds_vector_write(mesh->pointL[i].pos, f); + lib3ds_vector_write(mesh->pointL[i].pos, strm); } return(LIB3DS_TRUE); } static Lib3dsBool -flag_array_write(Lib3dsMesh *mesh, FILE *f) +flag_array_write(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; unsigned i; @@ -705,18 +705,18 @@ flag_array_write(Lib3dsMesh *mesh, FILE *f) ASSERT(mesh->flags<0x10000); c.chunk=LIB3DS_POINT_FLAG_ARRAY; c.size=8+2*mesh->flags; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); - lib3ds_word_write((Lib3dsWord)mesh->flags, f); + lib3ds_word_write((Lib3dsWord)mesh->flags, strm); for (i=0; iflags; ++i) { - lib3ds_word_write(mesh->flagL[i], f); + lib3ds_word_write(mesh->flagL[i], strm); } return(LIB3DS_TRUE); } static Lib3dsBool -face_array_write(Lib3dsMesh *mesh, FILE *f) +face_array_write(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; @@ -725,18 +725,18 @@ face_array_write(Lib3dsMesh *mesh, FILE *f) } ASSERT(mesh->faces<0x10000); c.chunk=LIB3DS_FACE_ARRAY; - if (!lib3ds_chunk_write_start(&c, f)) { + if (!lib3ds_chunk_write_start(&c, strm)) { return(LIB3DS_FALSE); } { unsigned i; - lib3ds_word_write((Lib3dsWord)mesh->faces, f); + lib3ds_word_write((Lib3dsWord)mesh->faces, strm); for (i=0; ifaces; ++i) { - lib3ds_word_write(mesh->faceL[i].points[0], f); - lib3ds_word_write(mesh->faceL[i].points[1], f); - lib3ds_word_write(mesh->faceL[i].points[2], f); - lib3ds_word_write(mesh->faceL[i].flags, f); + lib3ds_word_write(mesh->faceL[i].points[0], strm); + lib3ds_word_write(mesh->faceL[i].points[1], strm); + lib3ds_word_write(mesh->faceL[i].points[2], strm); + lib3ds_word_write(mesh->faceL[i].flags, strm); } } @@ -760,14 +760,14 @@ face_array_write(Lib3dsMesh *mesh, FILE *f) c.chunk=LIB3DS_MSH_MAT_GROUP; c.size=6+ strlen(mesh->faceL[i].material)+1 +2+2*num; - lib3ds_chunk_write(&c, f); - lib3ds_string_write(mesh->faceL[i].material, f); - lib3ds_word_write(num, f); - lib3ds_word_write((Lib3dsWord)i, f); + lib3ds_chunk_write(&c, strm); + lib3ds_string_write(mesh->faceL[i].material, strm); + lib3ds_word_write(num, strm); + lib3ds_word_write((Lib3dsWord)i, strm); for (j=i+1; jfaces; ++j) { if (strcmp(mesh->faceL[i].material, mesh->faceL[j].material)==0) { - lib3ds_word_write((Lib3dsWord)j, f); + lib3ds_word_write((Lib3dsWord)j, strm); matf[j]=1; } } @@ -782,10 +782,10 @@ face_array_write(Lib3dsMesh *mesh, FILE *f) c.chunk=LIB3DS_SMOOTH_GROUP; c.size=6+4*mesh->faces; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); for (i=0; ifaces; ++i) { - lib3ds_dword_write(mesh->faceL[i].smoothing, f); + lib3ds_dword_write(mesh->faceL[i].smoothing, strm); } } @@ -800,24 +800,24 @@ face_array_write(Lib3dsMesh *mesh, FILE *f) strlen(mesh->box_map.bottom)) { c.chunk=LIB3DS_MSH_BOXMAP; - if (!lib3ds_chunk_write_start(&c, f)) { + if (!lib3ds_chunk_write_start(&c, strm)) { return(LIB3DS_FALSE); } - lib3ds_string_write(mesh->box_map.front, f); - lib3ds_string_write(mesh->box_map.back, f); - lib3ds_string_write(mesh->box_map.left, f); - lib3ds_string_write(mesh->box_map.right, f); - lib3ds_string_write(mesh->box_map.top, f); - lib3ds_string_write(mesh->box_map.bottom, f); + lib3ds_string_write(mesh->box_map.front, strm); + lib3ds_string_write(mesh->box_map.back, strm); + lib3ds_string_write(mesh->box_map.left, strm); + lib3ds_string_write(mesh->box_map.right, strm); + lib3ds_string_write(mesh->box_map.top, strm); + lib3ds_string_write(mesh->box_map.bottom, strm); - if (!lib3ds_chunk_write_end(&c, f)) { + if (!lib3ds_chunk_write_end(&c, strm)) { return(LIB3DS_FALSE); } } } - if (!lib3ds_chunk_write_end(&c, f)) { + if (!lib3ds_chunk_write_end(&c, strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -825,7 +825,7 @@ face_array_write(Lib3dsMesh *mesh, FILE *f) static Lib3dsBool -texel_array_write(Lib3dsMesh *mesh, FILE *f) +texel_array_write(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; unsigned i; @@ -836,12 +836,12 @@ texel_array_write(Lib3dsMesh *mesh, FILE *f) ASSERT(mesh->texels<0x10000); c.chunk=LIB3DS_TEX_VERTS; c.size=8+8*mesh->texels; - lib3ds_chunk_write(&c, f); + lib3ds_chunk_write(&c, strm); - lib3ds_word_write((Lib3dsWord)mesh->texels, f); + lib3ds_word_write((Lib3dsWord)mesh->texels, strm); for (i=0; itexels; ++i) { - lib3ds_float_write(mesh->texelL[i][0], f); - lib3ds_float_write(mesh->texelL[i][1], f); + lib3ds_float_write(mesh->texelL[i][0], strm); + lib3ds_float_write(mesh->texelL[i][1], strm); } return(LIB3DS_TRUE); } @@ -851,18 +851,18 @@ texel_array_write(Lib3dsMesh *mesh, FILE *f) * \ingroup mesh */ Lib3dsBool -lib3ds_mesh_write(Lib3dsMesh *mesh, FILE *f) +lib3ds_mesh_write(Lib3dsMesh *mesh, iostream *strm) { Lib3dsChunk c; c.chunk=LIB3DS_N_TRI_OBJECT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!point_array_write(mesh, f)) { + if (!point_array_write(mesh, strm)) { return(LIB3DS_FALSE); } - if (!texel_array_write(mesh, f)) { + if (!texel_array_write(mesh, strm)) { return(LIB3DS_FALSE); } @@ -872,32 +872,32 @@ lib3ds_mesh_write(Lib3dsMesh *mesh, FILE *f) c.chunk=LIB3DS_MESH_TEXTURE_INFO; c.size=92; - if (!lib3ds_chunk_write(&c,f)) { + if (!lib3ds_chunk_write(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_word_write(mesh->map_data.maptype, f); + lib3ds_word_write(mesh->map_data.maptype, strm); for (i=0; i<2; ++i) { - lib3ds_float_write(mesh->map_data.tile[i], f); + lib3ds_float_write(mesh->map_data.tile[i], strm); } for (i=0; i<3; ++i) { - lib3ds_float_write(mesh->map_data.pos[i], f); + lib3ds_float_write(mesh->map_data.pos[i], strm); } - lib3ds_float_write(mesh->map_data.scale, f); + lib3ds_float_write(mesh->map_data.scale, strm); for (i=0; i<4; i++) { for (j=0; j<3; j++) { - lib3ds_float_write(mesh->map_data.matrix[i][j], f); + lib3ds_float_write(mesh->map_data.matrix[i][j], strm); } } for (i=0; i<2; ++i) { - lib3ds_float_write(mesh->map_data.planar_size[i], f); + lib3ds_float_write(mesh->map_data.planar_size[i], strm); } - lib3ds_float_write(mesh->map_data.cylinder_height, f); + lib3ds_float_write(mesh->map_data.cylinder_height, strm); } - if (!flag_array_write(mesh, f)) { + if (!flag_array_write(mesh, strm)) { return(LIB3DS_FALSE); } { /*---- LIB3DS_MESH_MATRIX ----*/ @@ -906,12 +906,12 @@ lib3ds_mesh_write(Lib3dsMesh *mesh, FILE *f) c.chunk=LIB3DS_MESH_MATRIX; c.size=54; - if (!lib3ds_chunk_write(&c,f)) { + if (!lib3ds_chunk_write(&c,strm)) { return(LIB3DS_FALSE); } for (i=0; i<4; i++) { for (j=0; j<3; j++) { - lib3ds_float_write(mesh->matrix[i][j], f); + lib3ds_float_write(mesh->matrix[i][j], strm); } } } @@ -921,16 +921,16 @@ lib3ds_mesh_write(Lib3dsMesh *mesh, FILE *f) c.chunk=LIB3DS_MESH_COLOR; c.size=7; - if (!lib3ds_chunk_write(&c,f)) { + if (!lib3ds_chunk_write(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_byte_write(mesh->color, f); + lib3ds_byte_write(mesh->color, strm); } - if (!face_array_write(mesh, f)) { + if (!face_array_write(mesh, strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/mesh.h b/src/osgPlugins/3ds/mesh.h index cd481e52f..d3ad73a17 100644 --- a/src/osgPlugins/3ds/mesh.h +++ b/src/osgPlugins/3ds/mesh.h @@ -27,10 +27,15 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif + + /*! * Triangular mesh point * \ingroup mesh @@ -125,8 +130,8 @@ extern LIB3DSAPI void lib3ds_mesh_free_face_list(Lib3dsMesh *mesh); extern LIB3DSAPI void lib3ds_mesh_bounding_box(Lib3dsMesh *mesh, Lib3dsVector min, Lib3dsVector max); extern LIB3DSAPI void lib3ds_mesh_calculate_normals(Lib3dsMesh *mesh, Lib3dsVector *normalL); extern LIB3DSAPI void lib3ds_mesh_dump(Lib3dsMesh *mesh); -extern LIB3DSAPI Lib3dsBool lib3ds_mesh_read(Lib3dsMesh *mesh, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_mesh_write(Lib3dsMesh *mesh, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_mesh_read(Lib3dsMesh *mesh, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_mesh_write(Lib3dsMesh *mesh, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/node.cpp b/src/osgPlugins/3ds/node.cpp index b957a48f8..288a8731f 100644 --- a/src/osgPlugins/3ds/node.cpp +++ b/src/osgPlugins/3ds/node.cpp @@ -407,13 +407,13 @@ lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level) * \ingroup node */ Lib3dsBool -lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) +lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; ASSERT(node); - if (!lib3ds_chunk_read_start(&c, 0, f)) { + if (!lib3ds_chunk_read_start(&c, 0, strm)) { return(LIB3DS_FALSE); } switch (c.chunk) { @@ -429,22 +429,22 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) return(LIB3DS_FALSE); } - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_NODE_ID: { - node->node_id=lib3ds_word_read(f); + node->node_id=lib3ds_word_read(strm); lib3ds_chunk_dump_info(" ID = %d", (short)node->node_id); } break; case LIB3DS_NODE_HDR: { - if (!lib3ds_string_read(node->name, 64, f)) { + if (!lib3ds_string_read(node->name, 64, strm)) { return(LIB3DS_FALSE); } - node->flags1=lib3ds_word_read(f); - node->flags2=lib3ds_word_read(f); - node->parent_id=lib3ds_word_read(f); + node->flags1=lib3ds_word_read(strm); + node->flags2=lib3ds_word_read(strm); + node->parent_id=lib3ds_word_read(strm); lib3ds_chunk_dump_info(" NAME =%s", node->name); lib3ds_chunk_dump_info(" PARENT=%d", (short)node->parent_id); } @@ -454,7 +454,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) if (node->type==LIB3DS_OBJECT_NODE) { int i; for (i=0; i<3; ++i) { - node->data.object.pivot[i]=lib3ds_float_read(f); + node->data.object.pivot[i]=lib3ds_float_read(strm); } } else { @@ -465,7 +465,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_INSTANCE_NAME: { if (node->type==LIB3DS_OBJECT_NODE) { - if (!lib3ds_string_read(node->data.object.instance, 64, f)) { + if (!lib3ds_string_read(node->data.object.instance, 64, strm)) { return(LIB3DS_FALSE); } } @@ -479,10 +479,10 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) if (node->type==LIB3DS_OBJECT_NODE) { int i; for (i=0; i<3; ++i) { - node->data.object.bbox_min[i]=lib3ds_float_read(f); + node->data.object.bbox_min[i]=lib3ds_float_read(strm); } for (i=0; i<3; ++i) { - node->data.object.bbox_max[i]=lib3ds_float_read(f); + node->data.object.bbox_max[i]=lib3ds_float_read(strm); } } else { @@ -496,10 +496,10 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) switch (node->type) { case LIB3DS_AMBIENT_NODE: - result=lib3ds_lin3_track_read(&node->data.ambient.col_track, f); + result=lib3ds_lin3_track_read(&node->data.ambient.col_track, strm); break; case LIB3DS_LIGHT_NODE: - result=lib3ds_lin3_track_read(&node->data.light.col_track, f); + result=lib3ds_lin3_track_read(&node->data.light.col_track, strm); break; default: lib3ds_chunk_unknown(chunk); @@ -515,19 +515,19 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) switch (node->type) { case LIB3DS_OBJECT_NODE: - result=lib3ds_lin3_track_read(&node->data.object.pos_track, f); + result=lib3ds_lin3_track_read(&node->data.object.pos_track, strm); break; case LIB3DS_CAMERA_NODE: - result=lib3ds_lin3_track_read(&node->data.camera.pos_track, f); + result=lib3ds_lin3_track_read(&node->data.camera.pos_track, strm); break; case LIB3DS_TARGET_NODE: - result=lib3ds_lin3_track_read(&node->data.target.pos_track, f); + result=lib3ds_lin3_track_read(&node->data.target.pos_track, strm); break; case LIB3DS_LIGHT_NODE: - result=lib3ds_lin3_track_read(&node->data.light.pos_track, f); + result=lib3ds_lin3_track_read(&node->data.light.pos_track, strm); break; case LIB3DS_SPOT_NODE: - result=lib3ds_lin3_track_read(&node->data.spot.pos_track, f); + result=lib3ds_lin3_track_read(&node->data.spot.pos_track, strm); break; default: lib3ds_chunk_unknown(chunk); @@ -540,7 +540,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_ROT_TRACK_TAG: { if (node->type==LIB3DS_OBJECT_NODE) { - if (!lib3ds_quat_track_read(&node->data.object.rot_track, f)) { + if (!lib3ds_quat_track_read(&node->data.object.rot_track, strm)) { return(LIB3DS_FALSE); } } @@ -552,7 +552,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_SCL_TRACK_TAG: { if (node->type==LIB3DS_OBJECT_NODE) { - if (!lib3ds_lin3_track_read(&node->data.object.scl_track, f)) { + if (!lib3ds_lin3_track_read(&node->data.object.scl_track, strm)) { return(LIB3DS_FALSE); } } @@ -564,7 +564,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_FOV_TRACK_TAG: { if (node->type==LIB3DS_CAMERA_NODE) { - if (!lib3ds_lin1_track_read(&node->data.camera.fov_track, f)) { + if (!lib3ds_lin1_track_read(&node->data.camera.fov_track, strm)) { return(LIB3DS_FALSE); } } @@ -576,7 +576,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_HOT_TRACK_TAG: { if (node->type==LIB3DS_LIGHT_NODE) { - if (!lib3ds_lin1_track_read(&node->data.light.hotspot_track, f)) { + if (!lib3ds_lin1_track_read(&node->data.light.hotspot_track, strm)) { return(LIB3DS_FALSE); } } @@ -588,7 +588,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_FALL_TRACK_TAG: { if (node->type==LIB3DS_LIGHT_NODE) { - if (!lib3ds_lin1_track_read(&node->data.light.falloff_track, f)) { + if (!lib3ds_lin1_track_read(&node->data.light.falloff_track, strm)) { return(LIB3DS_FALSE); } } @@ -603,10 +603,10 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) switch (node->type) { case LIB3DS_CAMERA_NODE: - result=lib3ds_lin1_track_read(&node->data.camera.roll_track, f); + result=lib3ds_lin1_track_read(&node->data.camera.roll_track, strm); break; case LIB3DS_LIGHT_NODE: - result=lib3ds_lin1_track_read(&node->data.light.roll_track, f); + result=lib3ds_lin1_track_read(&node->data.light.roll_track, strm); break; default: lib3ds_chunk_unknown(chunk); @@ -619,7 +619,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_HIDE_TRACK_TAG: { if (node->type==LIB3DS_OBJECT_NODE) { - if (!lib3ds_bool_track_read(&node->data.object.hide_track, f)) { + if (!lib3ds_bool_track_read(&node->data.object.hide_track, strm)) { return(LIB3DS_FALSE); } } @@ -631,7 +631,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_MORPH_SMOOTH: { if (node->type==LIB3DS_OBJECT_NODE) { - node->data.object.morph_smooth=lib3ds_float_read(f); + node->data.object.morph_smooth=lib3ds_float_read(strm); } else { lib3ds_chunk_unknown(chunk); @@ -641,7 +641,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) case LIB3DS_MORPH_TRACK_TAG: { if (node->type==LIB3DS_OBJECT_NODE) { - if (!lib3ds_morph_track_read(&node->data.object.morph_track, f)) { + if (!lib3ds_morph_track_read(&node->data.object.morph_track, strm)) { return(LIB3DS_FALSE); } } @@ -655,7 +655,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) } } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -664,7 +664,7 @@ lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *, FILE *f) * \ingroup node */ Lib3dsBool -lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) +lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, iostream *strm) { Lib3dsChunk c; @@ -695,7 +695,7 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) default: return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } @@ -703,19 +703,19 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_NODE_ID; c.size=8; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write(node->node_id,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write(node->node_id,strm); } { /*---- LIB3DS_NODE_HDR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_NODE_HDR; c.size=6+ 1+strlen(node->name) +2+2+2; - lib3ds_chunk_write(&c,f); - lib3ds_string_write(node->name,f); - lib3ds_word_write(node->flags1,f); - lib3ds_word_write(node->flags2,f); - lib3ds_word_write(node->parent_id,f); + lib3ds_chunk_write(&c,strm); + lib3ds_string_write(node->name,strm); + lib3ds_word_write(node->flags1,strm); + lib3ds_word_write(node->flags2,strm); + lib3ds_word_write(node->parent_id,strm); } switch (c.chunk) { @@ -723,13 +723,13 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) { /*---- LIB3DS_COL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_COL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.ambient.col_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.ambient.col_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -739,8 +739,8 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_PIVOT; c.size=18; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(node->data.object.pivot,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(node->data.object.pivot,strm); } { /*---- LIB3DS_INSTANCE_NAME ----*/ Lib3dsChunk c; @@ -750,8 +750,8 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) c.chunk=LIB3DS_INSTANCE_NAME; c.size=6+1+strlen(name); - lib3ds_chunk_write(&c,f); - lib3ds_string_write(name,f); + lib3ds_chunk_write(&c,strm); + lib3ds_string_write(name,strm); } } { @@ -767,60 +767,60 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_BOUNDBOX; c.size=30; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(node->data.object.bbox_min, f); - lib3ds_vector_write(node->data.object.bbox_max, f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(node->data.object.bbox_min, strm); + lib3ds_vector_write(node->data.object.bbox_max, strm); } } { /*---- LIB3DS_POS_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_POS_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.object.pos_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.object.pos_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_ROT_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_ROT_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_quat_track_write(&node->data.object.rot_track,f)) { + if (!lib3ds_quat_track_write(&node->data.object.rot_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_SCL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SCL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.object.scl_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.object.scl_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } if (node->data.object.hide_track.keyL) { /*---- LIB3DS_HIDE_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_HIDE_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_bool_track_write(&node->data.object.hide_track,f)) { + if (!lib3ds_bool_track_write(&node->data.object.hide_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -828,47 +828,47 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_MORPH_SMOOTH; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(node->data.object.morph_smooth,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(node->data.object.morph_smooth,strm); } break; case LIB3DS_CAMERA_NODE_TAG: { /*---- LIB3DS_POS_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_POS_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.camera.pos_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.camera.pos_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_FOV_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_FOV_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin1_track_write(&node->data.camera.fov_track,f)) { + if (!lib3ds_lin1_track_write(&node->data.camera.fov_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_ROLL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_ROLL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin1_track_write(&node->data.camera.roll_track,f)) { + if (!lib3ds_lin1_track_write(&node->data.camera.roll_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -877,13 +877,13 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) { /*---- LIB3DS_POS_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_POS_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.target.pos_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.target.pos_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -892,26 +892,26 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) { /*---- LIB3DS_POS_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_POS_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.light.pos_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.light.pos_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_COL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_COL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.light.col_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.light.col_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -920,65 +920,65 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) { /*---- LIB3DS_POS_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_POS_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.light.pos_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.light.pos_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_COL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_COL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.light.col_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.light.col_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_HOT_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_HOT_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin1_track_write(&node->data.light.hotspot_track,f)) { + if (!lib3ds_lin1_track_write(&node->data.light.hotspot_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_FALL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_FALL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin1_track_write(&node->data.light.falloff_track,f)) { + if (!lib3ds_lin1_track_write(&node->data.light.falloff_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } { /*---- LIB3DS_ROLL_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_ROLL_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin1_track_write(&node->data.light.roll_track,f)) { + if (!lib3ds_lin1_track_write(&node->data.light.roll_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -987,13 +987,13 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) { /*---- LIB3DS_POS_TRACK_TAG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_POS_TRACK_TAG; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_lin3_track_write(&node->data.spot.pos_track,f)) { + if (!lib3ds_lin3_track_write(&node->data.spot.pos_track,strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -1002,7 +1002,7 @@ lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f) return(LIB3DS_FALSE); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/node.h b/src/osgPlugins/3ds/node.h index 88666ee14..dd751c387 100644 --- a/src/osgPlugins/3ds/node.h +++ b/src/osgPlugins/3ds/node.h @@ -27,10 +27,14 @@ #include "tracks.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif + /*! * Scene graph ambient color node data * \ingroup node @@ -159,8 +163,8 @@ extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* n Lib3dsNodeTypes type); extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, Lib3dsWord node_id); extern LIB3DSAPI void lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level); -extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/readwrite.cpp b/src/osgPlugins/3ds/readwrite.cpp index 139d3af66..f23b939b8 100644 --- a/src/osgPlugins/3ds/readwrite.cpp +++ b/src/osgPlugins/3ds/readwrite.cpp @@ -23,13 +23,13 @@ #include "readwrite.h" #include + /*! * \defgroup readwrite Portable Binary Input/Ouput * * \author J.E. Hoffmann */ - static bool s_requiresByteSwap = false; extern LIB3DSAPI void setByteOrder() @@ -49,13 +49,12 @@ extern LIB3DSAPI void setByteOrder() * \return The byte read. */ Lib3dsByte -lib3ds_byte_read(FILE *f) +lib3ds_byte_read(iostream *strm) { Lib3dsByte b; - ASSERT(f); - int result = fread(&b,1,1,f); - if (result==0) return 0; + ASSERT(strm); + strm->read((char*)&b,1); return(b); } @@ -68,15 +67,13 @@ lib3ds_byte_read(FILE *f) * \return The word read. */ Lib3dsWord -lib3ds_word_read(FILE *f) +lib3ds_word_read(iostream *strm) { Lib3dsByte b[2]; Lib3dsWord w; - ASSERT(f); - int result = fread(b,2,1,f); - if (result==0) return 0; - + ASSERT(strm); + strm->read((char*)&b,2); w=((Lib3dsWord)b[1] << 8) | ((Lib3dsWord)b[0]); return(w); @@ -93,15 +90,13 @@ lib3ds_word_read(FILE *f) * \return The dword read. */ Lib3dsDword -lib3ds_dword_read(FILE *f) +lib3ds_dword_read(iostream *strm) { Lib3dsByte b[4]; Lib3dsDword d; - ASSERT(f); - int result = fread(b,4,1,f); - if (result==0) return 0; - + ASSERT(strm); + strm->read((char*)&b,4); d=((Lib3dsDword)b[3] << 24) | ((Lib3dsDword)b[2] << 16) | ((Lib3dsDword)b[1] << 8) | @@ -120,14 +115,12 @@ lib3ds_dword_read(FILE *f) * \return The signed byte read. */ Lib3dsIntb -lib3ds_intb_read(FILE *f) +lib3ds_intb_read(iostream *strm) { Lib3dsIntb b; - ASSERT(f); - int result = fread(&b,1,1,f); - if (result==0) return 0; - + ASSERT(strm); + strm->read((char*)&b,1); return(b); } @@ -142,13 +135,12 @@ lib3ds_intb_read(FILE *f) * \return The signed word read. */ Lib3dsIntw -lib3ds_intw_read(FILE *f) +lib3ds_intw_read(iostream *strm) { Lib3dsByte b[2]; - ASSERT(f); - int result = fread(b,2,1,f); - if (result==0) return 0; + ASSERT(strm); + strm->read((char*)&b,2); if (s_requiresByteSwap) { @@ -169,13 +161,12 @@ lib3ds_intw_read(FILE *f) * \return The signed dword read. */ Lib3dsIntd -lib3ds_intd_read(FILE *f) +lib3ds_intd_read(iostream *strm) { - Lib3dsByte b[4]; + Lib3dsByte b[4]; - ASSERT(f); - int result = fread(b,4,1,f); - if (result==0) return 0; + ASSERT(strm); + strm->read((char*)&b,4); if (s_requiresByteSwap) { @@ -183,6 +174,7 @@ lib3ds_intd_read(FILE *f) } return (*((Lib3dsIntd*)b)); + } @@ -196,13 +188,13 @@ lib3ds_intd_read(FILE *f) * \return The float read. */ Lib3dsFloat -lib3ds_float_read(FILE *f) +lib3ds_float_read(iostream *strm) { Lib3dsByte b[4]; - ASSERT(f); - int result = fread(b,4,1,f); - if (result==0) return 0; + ASSERT(strm); + b[0]=b[1]=b[2]=b[3]=0; + strm->read((char*)&b,4); if (s_requiresByteSwap) { @@ -225,18 +217,18 @@ lib3ds_float_read(FILE *f) * \return The float read. */ Lib3dsBool -lib3ds_vector_read(Lib3dsVector v, FILE *f) +lib3ds_vector_read(Lib3dsVector v, iostream *strm) { - v[0]=lib3ds_float_read(f); - v[1]=lib3ds_float_read(f); - v[2]=lib3ds_float_read(f); + v[0]=lib3ds_float_read(strm); + v[1]=lib3ds_float_read(strm); + v[2]=lib3ds_float_read(strm); - if (ferror(f)) { + if (strm->fail()) { return(LIB3DS_FALSE); } - + /*printf("lib3ds_vector_read %f %f %f\n",v[0],v[1],v[2]);*/ - + return(LIB3DS_TRUE); } @@ -245,13 +237,13 @@ lib3ds_vector_read(Lib3dsVector v, FILE *f) * \ingroup readwrite */ Lib3dsBool -lib3ds_rgb_read(Lib3dsRgb rgb, FILE *f) +lib3ds_rgb_read(Lib3dsRgb rgb, iostream *strm) { - rgb[0]=lib3ds_float_read(f); - rgb[1]=lib3ds_float_read(f); - rgb[2]=lib3ds_float_read(f); + rgb[0]=lib3ds_float_read(strm); + rgb[1]=lib3ds_float_read(strm); + rgb[2]=lib3ds_float_read(strm); - if (ferror(f)) { + if (strm->fail()) { return(LIB3DS_FALSE); } /*printf("lib3ds_rgb_read %f %f %f\n",rgb[0],rgb[1],rgb[2]);*/ @@ -272,22 +264,24 @@ lib3ds_rgb_read(Lib3dsRgb rgb, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_string_read(char *s, int buflen, FILE *f) +lib3ds_string_read(char *s, int buflen, iostream *strm) { int k=0; - ASSERT(f); - while ((*s++=char(fgetc(f)))!=0) { - if (++k>=buflen) { - return(LIB3DS_FALSE); - } - } - if (ferror(f)) { + ASSERT(s); + s--; + do + { + s++; + k++; + strm->read(s,1); + } while ((*s!=0) && (kfail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); } - /*! * \ingroup readwrite * @@ -299,10 +293,11 @@ lib3ds_string_read(char *s, int buflen, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_byte_write(Lib3dsByte b, FILE *f) +lib3ds_byte_write(Lib3dsByte b, iostream *strm) { - ASSERT(f); - if (fwrite(&b,1,1,f)!=1) { + ASSERT(strm); + strm->write((char*)&b,1); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -320,14 +315,15 @@ lib3ds_byte_write(Lib3dsByte b, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_word_write(Lib3dsWord w, FILE *f) +lib3ds_word_write(Lib3dsWord w, iostream *strm) { Lib3dsByte b[2]; - ASSERT(f); + ASSERT(strm); b[1]=(Lib3dsByte)(((Lib3dsWord)w & 0xFF00) >> 8); b[0]=(Lib3dsByte)((Lib3dsWord)w & 0x00FF); - if (fwrite(b,2,1,f)!=1) { + strm->write((char*)b,2); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -345,16 +341,18 @@ lib3ds_word_write(Lib3dsWord w, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_dword_write(Lib3dsDword d, FILE *f) +lib3ds_dword_write(Lib3dsDword d, iostream *strm) { Lib3dsByte b[4]; - ASSERT(f); + ASSERT(strm); b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24); b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16); b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8); b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF)); - if (fwrite(b,4,1,f)!=1) { + + strm->write((char*)b,4); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -372,10 +370,11 @@ lib3ds_dword_write(Lib3dsDword d, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_intb_write(Lib3dsIntb b, FILE *f) +lib3ds_intb_write(Lib3dsIntb b, iostream *strm) { - ASSERT(f); - if (fwrite(&b,1,1,f)!=1) { + ASSERT(strm); + strm->write((char*)b,1); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -393,14 +392,16 @@ lib3ds_intb_write(Lib3dsIntb b, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_intw_write(Lib3dsIntw w, FILE *f) +lib3ds_intw_write(Lib3dsIntw w, iostream *strm) { Lib3dsByte b[2]; - ASSERT(f); + ASSERT(strm); b[1]=(Lib3dsByte)(((Lib3dsWord)w & 0xFF00) >> 8); b[0]=(Lib3dsByte)((Lib3dsWord)w & 0x00FF); - if (fwrite(b,2,1,f)!=1) { + + strm->write((char*)b,2); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -418,16 +419,18 @@ lib3ds_intw_write(Lib3dsIntw w, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_intd_write(Lib3dsIntd d, FILE *f) +lib3ds_intd_write(Lib3dsIntd d, iostream *strm) { Lib3dsByte b[4]; - ASSERT(f); + ASSERT(strm); b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24); b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16); b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8); b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF)); - if (fwrite(b,4,1,f)!=1) { + + strm->write((char*)b,4); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -444,11 +447,10 @@ lib3ds_intd_write(Lib3dsIntd d, FILE *f) * * \return True on success, False otherwise. */ - - Lib3dsBool -lib3ds_float_write(Lib3dsFloat l, FILE *f) +lib3ds_float_write(Lib3dsFloat l, iostream *strm) { + ASSERT(strm); Lib3dsByte b[4]; Lib3dsByte* ptr = (Lib3dsByte*) (&l); @@ -467,8 +469,9 @@ lib3ds_float_write(Lib3dsFloat l, FILE *f) b[2] = *ptr++; b[3] = *ptr++; } - - if (fwrite(b,4,1,f)!=1) { + + strm->write((char*)b,4); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -485,15 +488,15 @@ lib3ds_float_write(Lib3dsFloat l, FILE *f) * \param f Input file stream. */ Lib3dsBool -lib3ds_vector_write(Lib3dsVector v, FILE *f) +lib3ds_vector_write(Lib3dsVector v, iostream *strm) { - if (!lib3ds_float_write(v[0], f)) { + if (!lib3ds_float_write(v[0], strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_float_write(v[1], f)) { + if (!lib3ds_float_write(v[1], strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_float_write(v[2], f)) { + if (!lib3ds_float_write(v[2], strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -504,15 +507,15 @@ lib3ds_vector_write(Lib3dsVector v, FILE *f) * \ingroup readwrite */ Lib3dsBool -lib3ds_rgb_write(Lib3dsRgb rgb, FILE *f) +lib3ds_rgb_write(Lib3dsRgb rgb, iostream *strm) { - if (!lib3ds_float_write(rgb[0], f)) { + if (!lib3ds_float_write(rgb[0], strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_float_write(rgb[1], f)) { + if (!lib3ds_float_write(rgb[1], strm)) { return(LIB3DS_FALSE); } - if (!lib3ds_float_write(rgb[2], f)) { + if (!lib3ds_float_write(rgb[2], strm)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -530,12 +533,12 @@ lib3ds_rgb_write(Lib3dsRgb rgb, FILE *f) * \return True on success, False otherwise. */ Lib3dsBool -lib3ds_string_write(const char *s, FILE *f) +lib3ds_string_write(const char *s, iostream *strm) { ASSERT(s); - ASSERT(f); - do fputc(*s,f); while (*s++); - if (ferror(f)) { + ASSERT(strm); + do strm->write(s,1); while (*s++); + if (strm->fail()) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/readwrite.h b/src/osgPlugins/3ds/readwrite.h index 4d1e6a597..650ec2ad7 100644 --- a/src/osgPlugins/3ds/readwrite.h +++ b/src/osgPlugins/3ds/readwrite.h @@ -27,32 +27,34 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif extern LIB3DSAPI void setByteOrder(); - -extern LIB3DSAPI Lib3dsByte lib3ds_byte_read(FILE *f); -extern LIB3DSAPI Lib3dsWord lib3ds_word_read(FILE *f); -extern LIB3DSAPI Lib3dsDword lib3ds_dword_read(FILE *f); -extern LIB3DSAPI Lib3dsIntb lib3ds_intb_read(FILE *f); -extern LIB3DSAPI Lib3dsIntw lib3ds_intw_read(FILE *f); -extern LIB3DSAPI Lib3dsIntd lib3ds_intd_read(FILE *f); -extern LIB3DSAPI Lib3dsFloat lib3ds_float_read(FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_vector_read(Lib3dsVector v, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_rgb_read(Lib3dsRgb rgb, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_string_read(char *s, int buflen, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_byte_write(Lib3dsByte b, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_word_write(Lib3dsWord w, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_dword_write(Lib3dsDword d, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_intb_write(Lib3dsIntb b, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_intw_write(Lib3dsIntw w, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_intd_write(Lib3dsIntd d, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_float_write(Lib3dsFloat l, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_vector_write(Lib3dsVector v, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_rgb_write(Lib3dsRgb rgb, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_string_write(const char *s, FILE *f); +extern LIB3DSAPI Lib3dsByte lib3ds_byte_read(iostream *strm); +extern LIB3DSAPI Lib3dsWord lib3ds_word_read(iostream *strm); +extern LIB3DSAPI Lib3dsDword lib3ds_dword_read(iostream *strm); +extern LIB3DSAPI Lib3dsIntb lib3ds_intb_read(iostream *strm); +extern LIB3DSAPI Lib3dsIntw lib3ds_intw_read(iostream *strm); +extern LIB3DSAPI Lib3dsIntd lib3ds_intd_read(iostream *strm); +extern LIB3DSAPI Lib3dsFloat lib3ds_float_read(iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_vector_read(Lib3dsVector v, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_rgb_read(Lib3dsRgb rgb, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_string_read(char *s, int buflen, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_byte_write(Lib3dsByte b, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_word_write(Lib3dsWord w, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_dword_write(Lib3dsDword d, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_intb_write(Lib3dsIntb b, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_intw_write(Lib3dsIntw w, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_intd_write(Lib3dsIntd d, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_float_write(Lib3dsFloat l, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_vector_write(Lib3dsVector v, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_rgb_write(Lib3dsRgb rgb, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_string_write(const char *s, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/shadow.cpp b/src/osgPlugins/3ds/shadow.cpp index d8951a39d..98f5803f9 100644 --- a/src/osgPlugins/3ds/shadow.cpp +++ b/src/osgPlugins/3ds/shadow.cpp @@ -37,48 +37,48 @@ * \ingroup shadow */ Lib3dsBool -lib3ds_shadow_read(Lib3dsShadow *shadow, FILE *f) +lib3ds_shadow_read(Lib3dsShadow *shadow, iostream *strm) { Lib3dsChunk c; - if (!lib3ds_chunk_read(&c, f)) { + if (!lib3ds_chunk_read(&c, strm)) { return(LIB3DS_FALSE); } switch (c.chunk) { case LIB3DS_SHADOW_MAP_SIZE: { - shadow->map_size=lib3ds_intw_read(f); + shadow->map_size=lib3ds_intw_read(strm); } break; case LIB3DS_LO_SHADOW_BIAS: { - shadow->lo_bias=lib3ds_float_read(f); + shadow->lo_bias=lib3ds_float_read(strm); } break; case LIB3DS_HI_SHADOW_BIAS: { - shadow->hi_bias=lib3ds_float_read(f); + shadow->hi_bias=lib3ds_float_read(strm); } break; case LIB3DS_SHADOW_SAMPLES: { - shadow->samples=lib3ds_intw_read(f); + shadow->samples=lib3ds_intw_read(strm); } break; case LIB3DS_SHADOW_RANGE: { - shadow->range=lib3ds_intd_read(f); + shadow->range=lib3ds_intd_read(strm); } break; case LIB3DS_SHADOW_FILTER: { - shadow->filter=lib3ds_float_read(f); + shadow->filter=lib3ds_float_read(strm); } break; case LIB3DS_RAY_BIAS: { - shadow->ray_bias=lib3ds_float_read(f); + shadow->ray_bias=lib3ds_float_read(strm); } break; } @@ -91,61 +91,61 @@ lib3ds_shadow_read(Lib3dsShadow *shadow, FILE *f) * \ingroup shadow */ Lib3dsBool -lib3ds_shadow_write(Lib3dsShadow *shadow, FILE *f) +lib3ds_shadow_write(Lib3dsShadow *shadow, iostream *strm) { if (fabs(shadow->lo_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_LO_SHADOW_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_LO_SHADOW_BIAS; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(shadow->lo_bias,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(shadow->lo_bias,strm); } if (fabs(shadow->hi_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_HI_SHADOW_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_HI_SHADOW_BIAS; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(shadow->hi_bias,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(shadow->hi_bias,strm); } if (shadow->map_size) { /*---- LIB3DS_SHADOW_MAP_SIZE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_MAP_SIZE; c.size=8; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write(shadow->map_size,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write(shadow->map_size,strm); } if (shadow->samples) { /*---- LIB3DS_SHADOW_SAMPLES ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_SAMPLES; c.size=8; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write(shadow->samples,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write(shadow->samples,strm); } if (shadow->range) { /*---- LIB3DS_SHADOW_RANGE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_RANGE; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_intd_write(shadow->range,f); + lib3ds_chunk_write(&c,strm); + lib3ds_intd_write(shadow->range,strm); } if (fabs(shadow->filter)>LIB3DS_EPSILON) { /*---- LIB3DS_SHADOW_FILTER ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_FILTER; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(shadow->filter,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(shadow->filter,strm); } if (fabs(shadow->ray_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_RAY_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_RAY_BIAS; c.size=10; - lib3ds_chunk_write(&c,f); - lib3ds_float_write(shadow->ray_bias,f); + lib3ds_chunk_write(&c,strm); + lib3ds_float_write(shadow->ray_bias,strm); } return(LIB3DS_TRUE); } diff --git a/src/osgPlugins/3ds/shadow.h b/src/osgPlugins/3ds/shadow.h index 606c46bb3..ab2f4f284 100644 --- a/src/osgPlugins/3ds/shadow.h +++ b/src/osgPlugins/3ds/shadow.h @@ -27,6 +27,9 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif @@ -45,8 +48,8 @@ struct _Lib3dsShadow { Lib3dsFloat ray_bias; }; -extern LIB3DSAPI Lib3dsBool lib3ds_shadow_read(Lib3dsShadow *shadow, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_shadow_write(Lib3dsShadow *shadow, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_shadow_read(Lib3dsShadow *shadow, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_shadow_write(Lib3dsShadow *shadow, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/tcb.cpp b/src/osgPlugins/3ds/tcb.cpp index 33d6bc609..2af3d9cec 100644 --- a/src/osgPlugins/3ds/tcb.cpp +++ b/src/osgPlugins/3ds/tcb.cpp @@ -77,28 +77,29 @@ lib3ds_tcb(Lib3dsTcb *p, Lib3dsTcb *pc, Lib3dsTcb *c, Lib3dsTcb *nc, Lib3dsTcb * * \ingroup tcb */ Lib3dsBool -lib3ds_tcb_read(Lib3dsTcb *tcb, FILE *f) +lib3ds_tcb_read(Lib3dsTcb *tcb, iostream *strm) { Lib3dsWord flags; - tcb->frame=lib3ds_intd_read(f); - tcb->flags=flags=lib3ds_word_read(f); + tcb->frame=lib3ds_intd_read(strm); + tcb->flags=flags=lib3ds_word_read(strm); if (flags&LIB3DS_USE_TENSION) { - tcb->tens=lib3ds_float_read(f); + tcb->tens=lib3ds_float_read(strm); } if (flags&LIB3DS_USE_CONTINUITY) { - tcb->cont=lib3ds_float_read(f); + tcb->cont=lib3ds_float_read(strm); } if (flags&LIB3DS_USE_BIAS) { - tcb->bias=lib3ds_float_read(f); + tcb->bias=lib3ds_float_read(strm); } if (flags&LIB3DS_USE_EASE_TO) { - tcb->ease_to=lib3ds_float_read(f); + tcb->ease_to=lib3ds_float_read(strm); } if (flags&LIB3DS_USE_EASE_FROM) { - tcb->ease_from=lib3ds_float_read(f); + tcb->ease_from=lib3ds_float_read(strm); } - if (ferror(f)) { + + if (strm->fail()){ return(LIB3DS_FALSE); } return(LIB3DS_TRUE); @@ -109,26 +110,26 @@ lib3ds_tcb_read(Lib3dsTcb *tcb, FILE *f) * \ingroup tcb */ Lib3dsBool -lib3ds_tcb_write(Lib3dsTcb *tcb, FILE *f) +lib3ds_tcb_write(Lib3dsTcb *tcb, iostream *strm) { - lib3ds_intd_write(tcb->frame,f); - lib3ds_word_write(tcb->flags,f); + lib3ds_intd_write(tcb->frame,strm); + lib3ds_word_write(tcb->flags,strm); if (tcb->flags&LIB3DS_USE_TENSION) { - lib3ds_float_write(tcb->tens,f); + lib3ds_float_write(tcb->tens,strm); } if (tcb->flags&LIB3DS_USE_CONTINUITY) { - lib3ds_float_write(tcb->cont,f); + lib3ds_float_write(tcb->cont,strm); } if (tcb->flags&LIB3DS_USE_BIAS) { - lib3ds_float_write(tcb->bias,f); + lib3ds_float_write(tcb->bias,strm); } if (tcb->flags&LIB3DS_USE_EASE_TO) { - lib3ds_float_write(tcb->ease_to,f); + lib3ds_float_write(tcb->ease_to,strm); } if (tcb->flags&LIB3DS_USE_EASE_FROM) { - lib3ds_float_write(tcb->ease_from,f); + lib3ds_float_write(tcb->ease_from,strm); } - if (ferror(f)) { + if (strm->fail()){ return(LIB3DS_FALSE); } return(LIB3DS_TRUE); diff --git a/src/osgPlugins/3ds/tcb.h b/src/osgPlugins/3ds/tcb.h index fe630e985..7b5a9aa23 100644 --- a/src/osgPlugins/3ds/tcb.h +++ b/src/osgPlugins/3ds/tcb.h @@ -27,10 +27,15 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif + + typedef enum _Lib3dsTcbFlags{ LIB3DS_USE_TENSION =0x0001, LIB3DS_USE_CONTINUITY =0x0002, @@ -52,8 +57,8 @@ typedef struct _Lib3dsTcb { extern LIB3DSAPI void lib3ds_tcb(Lib3dsTcb *p, Lib3dsTcb *pc, Lib3dsTcb *c, Lib3dsTcb *nc, Lib3dsTcb *n, Lib3dsFloat *ksm, Lib3dsFloat *ksp, Lib3dsFloat *kdm, Lib3dsFloat *kdp); -extern LIB3DSAPI Lib3dsBool lib3ds_tcb_read(Lib3dsTcb *tcb, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_tcb_write(Lib3dsTcb *tcb, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_tcb_read(Lib3dsTcb *tcb, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_tcb_write(Lib3dsTcb *tcb, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/tracks.cpp b/src/osgPlugins/3ds/tracks.cpp index 43b167d15..59f395391 100644 --- a/src/osgPlugins/3ds/tracks.cpp +++ b/src/osgPlugins/3ds/tracks.cpp @@ -196,20 +196,20 @@ lib3ds_bool_track_eval(Lib3dsBoolTrack *track, Lib3dsBool *p, Lib3dsFloat t) * \ingroup tracks */ Lib3dsBool -lib3ds_bool_track_read(Lib3dsBoolTrack *track, FILE *f) +lib3ds_bool_track_read(Lib3dsBoolTrack *track, iostream *strm) { int keys; int i; Lib3dsBoolKey *k; - track->flags=lib3ds_word_read(f); - lib3ds_dword_read(f); - lib3ds_dword_read(f); - keys=lib3ds_intd_read(f); + track->flags=lib3ds_word_read(strm); + lib3ds_dword_read(strm); + lib3ds_dword_read(strm); + keys=lib3ds_intd_read(strm); for (i=0; itcb, f)) { + if (!lib3ds_tcb_read(&k->tcb, strm)) { return(LIB3DS_FALSE); } lib3ds_bool_track_insert(track, k); @@ -223,20 +223,20 @@ lib3ds_bool_track_read(Lib3dsBoolTrack *track, FILE *f) * \ingroup tracks */ Lib3dsBool -lib3ds_bool_track_write(Lib3dsBoolTrack *track, FILE *f) +lib3ds_bool_track_write(Lib3dsBoolTrack *track, iostream *strm) { Lib3dsBoolKey *k; Lib3dsDword num=0; for (k=track->keyL; k; k=k->next) { ++num; } - lib3ds_word_write((Lib3dsWord)track->flags,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(num,f); + lib3ds_word_write((Lib3dsWord)track->flags,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(num,strm); for (k=track->keyL; k; k=k->next) { - if (!lib3ds_tcb_write(&k->tcb,f)) { + if (!lib3ds_tcb_write(&k->tcb,strm)) { return(LIB3DS_FALSE); } } @@ -500,23 +500,23 @@ lib3ds_lin1_track_eval(Lib3dsLin1Track *track, Lib3dsFloat *p, Lib3dsFloat t) * \ingroup tracks */ Lib3dsBool -lib3ds_lin1_track_read(Lib3dsLin1Track *track, FILE *f) +lib3ds_lin1_track_read(Lib3dsLin1Track *track, iostream *strm) { int keys; int i; Lib3dsLin1Key *k; - track->flags=lib3ds_word_read(f); - lib3ds_dword_read(f); - lib3ds_dword_read(f); - keys=lib3ds_intd_read(f); + track->flags=lib3ds_word_read(strm); + lib3ds_dword_read(strm); + lib3ds_dword_read(strm); + keys=lib3ds_intd_read(strm); for (i=0; itcb, f)) { + if (!lib3ds_tcb_read(&k->tcb, strm)) { return(LIB3DS_FALSE); } - k->value=lib3ds_float_read(f); + k->value=lib3ds_float_read(strm); lib3ds_lin1_track_insert(track, k); } lib3ds_lin1_track_setup(track); @@ -528,23 +528,23 @@ lib3ds_lin1_track_read(Lib3dsLin1Track *track, FILE *f) * \ingroup tracks */ Lib3dsBool -lib3ds_lin1_track_write(Lib3dsLin1Track *track, FILE *f) +lib3ds_lin1_track_write(Lib3dsLin1Track *track, iostream *strm) { Lib3dsLin1Key *k; Lib3dsDword num=0; for (k=track->keyL; k; k=k->next) { ++num; } - lib3ds_word_write((Lib3dsWord)track->flags,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(num,f); + lib3ds_word_write((Lib3dsWord)track->flags,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(num,strm); for (k=track->keyL; k; k=k->next) { - if (!lib3ds_tcb_write(&k->tcb,f)) { + if (!lib3ds_tcb_write(&k->tcb,strm)) { return(LIB3DS_FALSE); } - lib3ds_float_write(k->value,f); + lib3ds_float_write(k->value,strm); } return(LIB3DS_TRUE); } @@ -809,24 +809,24 @@ lib3ds_lin3_track_eval(Lib3dsLin3Track *track, Lib3dsVector p, Lib3dsFloat t) * \ingroup tracks */ Lib3dsBool -lib3ds_lin3_track_read(Lib3dsLin3Track *track, FILE *f) +lib3ds_lin3_track_read(Lib3dsLin3Track *track, iostream *strm) { int keys; int i,j; Lib3dsLin3Key *k; - track->flags=lib3ds_word_read(f); - lib3ds_dword_read(f); - lib3ds_dword_read(f); - keys=lib3ds_intd_read(f); + track->flags=lib3ds_word_read(strm); + lib3ds_dword_read(strm); + lib3ds_dword_read(strm); + keys=lib3ds_intd_read(strm); for (i=0; itcb, f)) { + if (!lib3ds_tcb_read(&k->tcb, strm)) { return(LIB3DS_FALSE); } for (j=0; j<3; ++j) { - k->value[j]=lib3ds_float_read(f); + k->value[j]=lib3ds_float_read(strm); } lib3ds_lin3_track_insert(track, k); } @@ -839,23 +839,23 @@ lib3ds_lin3_track_read(Lib3dsLin3Track *track, FILE *f) * \ingroup tracks */ Lib3dsBool -lib3ds_lin3_track_write(Lib3dsLin3Track *track, FILE *f) +lib3ds_lin3_track_write(Lib3dsLin3Track *track, iostream *strm) { Lib3dsLin3Key *k; Lib3dsDword num=0; for (k=track->keyL; k; k=k->next) { ++num; } - lib3ds_word_write((Lib3dsWord)track->flags,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(num,f); + lib3ds_word_write((Lib3dsWord)track->flags,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(num,strm); for (k=track->keyL; k; k=k->next) { - if (!lib3ds_tcb_write(&k->tcb,f)) { + if (!lib3ds_tcb_write(&k->tcb,strm)) { return(LIB3DS_FALSE); } - lib3ds_vector_write(k->value,f); + lib3ds_vector_write(k->value,strm); } return(LIB3DS_TRUE); } @@ -1156,25 +1156,25 @@ lib3ds_quat_track_eval(Lib3dsQuatTrack *track, Lib3dsQuat q, Lib3dsFloat t) * \ingroup tracks */ Lib3dsBool -lib3ds_quat_track_read(Lib3dsQuatTrack *track, FILE *f) +lib3ds_quat_track_read(Lib3dsQuatTrack *track, iostream *strm) { int keys; int i,j; Lib3dsQuatKey *k; - track->flags=lib3ds_word_read(f); - lib3ds_dword_read(f); - lib3ds_dword_read(f); - keys=lib3ds_intd_read(f); + track->flags=lib3ds_word_read(strm); + lib3ds_dword_read(strm); + lib3ds_dword_read(strm); + keys=lib3ds_intd_read(strm); for (i=0; itcb, f)) { + if (!lib3ds_tcb_read(&k->tcb, strm)) { return(LIB3DS_FALSE); } - k->angle=lib3ds_float_read(f); + k->angle=lib3ds_float_read(strm); for (j=0; j<3; ++j) { - k->axis[j]=lib3ds_float_read(f); + k->axis[j]=lib3ds_float_read(strm); } lib3ds_quat_track_insert(track, k); } @@ -1187,24 +1187,24 @@ lib3ds_quat_track_read(Lib3dsQuatTrack *track, FILE *f) * \ingroup tracks */ Lib3dsBool -lib3ds_quat_track_write(Lib3dsQuatTrack *track, FILE *f) +lib3ds_quat_track_write(Lib3dsQuatTrack *track, iostream *strm) { Lib3dsQuatKey *k; Lib3dsDword num=0; for (k=track->keyL; k; k=k->next) { ++num; } - lib3ds_word_write((Lib3dsWord)track->flags,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(0,f); - lib3ds_dword_write(num,f); + lib3ds_word_write((Lib3dsWord)track->flags,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(0,strm); + lib3ds_dword_write(num,strm); for (k=track->keyL; k; k=k->next) { - if (!lib3ds_tcb_write(&k->tcb,f)) { + if (!lib3ds_tcb_write(&k->tcb,strm)) { return(LIB3DS_FALSE); } - lib3ds_float_write(k->angle,f); - lib3ds_vector_write(k->axis,f); + lib3ds_float_write(k->angle,strm); + lib3ds_vector_write(k->axis,strm); } return(LIB3DS_TRUE); } @@ -1364,7 +1364,7 @@ lib3ds_morph_track_eval(Lib3dsMorphTrack *track, char *p, Lib3dsFloat t) * \ingroup tracks */ Lib3dsBool -lib3ds_morph_track_read(Lib3dsMorphTrack *, FILE *) +lib3ds_morph_track_read(Lib3dsMorphTrack *, iostream *strm) { /* FIXME: */ return(LIB3DS_TRUE); @@ -1375,7 +1375,7 @@ lib3ds_morph_track_read(Lib3dsMorphTrack *, FILE *) * \ingroup tracks */ Lib3dsBool -lib3ds_morph_track_write(Lib3dsMorphTrack *, FILE *) +lib3ds_morph_track_write(Lib3dsMorphTrack *, iostream *strm) { /* FIXME: */ ASSERT(0); diff --git a/src/osgPlugins/3ds/tracks.h b/src/osgPlugins/3ds/tracks.h index 0449c86ab..57783203d 100644 --- a/src/osgPlugins/3ds/tracks.h +++ b/src/osgPlugins/3ds/tracks.h @@ -154,8 +154,8 @@ extern LIB3DSAPI void lib3ds_bool_track_free_keys(Lib3dsBoolTrack *track); extern LIB3DSAPI void lib3ds_bool_track_insert(Lib3dsBoolTrack *track, Lib3dsBoolKey* key); extern LIB3DSAPI void lib3ds_bool_track_remove(Lib3dsBoolTrack *track, Lib3dsIntd frame); extern LIB3DSAPI void lib3ds_bool_track_eval(Lib3dsBoolTrack *track, Lib3dsBool *p, Lib3dsFloat t); -extern LIB3DSAPI Lib3dsBool lib3ds_bool_track_read(Lib3dsBoolTrack *track, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_bool_track_write(Lib3dsBoolTrack *track, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_bool_track_read(Lib3dsBoolTrack *track, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_bool_track_write(Lib3dsBoolTrack *track, iostream *strm); extern LIB3DSAPI Lib3dsLin1Key* lib3ds_lin1_key_new(); extern LIB3DSAPI void lib3ds_lin1_key_free(Lib3dsLin1Key* key); @@ -166,8 +166,8 @@ extern LIB3DSAPI void lib3ds_lin1_track_setup(Lib3dsLin1Track *track); extern LIB3DSAPI void lib3ds_lin1_track_insert(Lib3dsLin1Track *track, Lib3dsLin1Key *key); extern LIB3DSAPI void lib3ds_lin1_track_remove(Lib3dsLin1Track *track, Lib3dsIntd frame); extern LIB3DSAPI void lib3ds_lin1_track_eval(Lib3dsLin1Track *track, Lib3dsFloat *p, Lib3dsFloat t); -extern LIB3DSAPI Lib3dsBool lib3ds_lin1_track_read(Lib3dsLin1Track *track, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_lin1_track_write(Lib3dsLin1Track *track, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_lin1_track_read(Lib3dsLin1Track *track, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_lin1_track_write(Lib3dsLin1Track *track, iostream *strm); extern LIB3DSAPI Lib3dsLin3Key* lib3ds_lin3_key_new(); extern LIB3DSAPI void lib3ds_lin3_key_free(Lib3dsLin3Key* key); @@ -178,8 +178,8 @@ extern LIB3DSAPI void lib3ds_lin3_track_setup(Lib3dsLin3Track *track); extern LIB3DSAPI void lib3ds_lin3_track_insert(Lib3dsLin3Track *track, Lib3dsLin3Key *key); extern LIB3DSAPI void lib3ds_lin3_track_remove(Lib3dsLin3Track *track, Lib3dsIntd frame); extern LIB3DSAPI void lib3ds_lin3_track_eval(Lib3dsLin3Track *track, Lib3dsVector p, Lib3dsFloat t); -extern LIB3DSAPI Lib3dsBool lib3ds_lin3_track_read(Lib3dsLin3Track *track, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_lin3_track_write(Lib3dsLin3Track *track, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_lin3_track_read(Lib3dsLin3Track *track, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_lin3_track_write(Lib3dsLin3Track *track, iostream *strm); extern LIB3DSAPI Lib3dsQuatKey* lib3ds_quat_key_new(); extern LIB3DSAPI void lib3ds_quat_key_free(Lib3dsQuatKey* key); @@ -190,8 +190,8 @@ extern LIB3DSAPI void lib3ds_quat_track_setup(Lib3dsQuatTrack *track); extern LIB3DSAPI void lib3ds_quat_track_insert(Lib3dsQuatTrack *track, Lib3dsQuatKey *key); extern LIB3DSAPI void lib3ds_quat_track_remove(Lib3dsQuatTrack *track, Lib3dsIntd frame); extern LIB3DSAPI void lib3ds_quat_track_eval(Lib3dsQuatTrack *track, Lib3dsQuat p, Lib3dsFloat t); -extern LIB3DSAPI Lib3dsBool lib3ds_quat_track_read(Lib3dsQuatTrack *track, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_quat_track_write(Lib3dsQuatTrack *track, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_quat_track_read(Lib3dsQuatTrack *track, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_quat_track_write(Lib3dsQuatTrack *track, iostream *strm); extern LIB3DSAPI Lib3dsMorphKey* lib3ds_morph_key_new(); extern LIB3DSAPI void lib3ds_morph_key_free(Lib3dsMorphKey* key); @@ -199,8 +199,8 @@ extern LIB3DSAPI void lib3ds_morph_track_free_keys(Lib3dsMorphTrack *track); extern LIB3DSAPI void lib3ds_morph_track_insert(Lib3dsMorphTrack *track, Lib3dsMorphKey *key); extern LIB3DSAPI void lib3ds_morph_track_remove(Lib3dsMorphTrack *track, Lib3dsIntd frame); extern LIB3DSAPI void lib3ds_morph_track_eval(Lib3dsMorphTrack *track, char *p, Lib3dsFloat t); -extern LIB3DSAPI Lib3dsBool lib3ds_morph_track_read(Lib3dsMorphTrack *track, FILE *f); -extern LIB3DSAPI Lib3dsBool lib3ds_morph_track_write(Lib3dsMorphTrack *track, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_morph_track_read(Lib3dsMorphTrack *track, iostream *strm); +extern LIB3DSAPI Lib3dsBool lib3ds_morph_track_write(Lib3dsMorphTrack *track, iostream *strm); #ifdef __cplusplus } diff --git a/src/osgPlugins/3ds/viewport.cpp b/src/osgPlugins/3ds/viewport.cpp index 4dfd87d9d..2d49c3e9d 100644 --- a/src/osgPlugins/3ds/viewport.cpp +++ b/src/osgPlugins/3ds/viewport.cpp @@ -38,12 +38,12 @@ * \ingroup viewport */ Lib3dsBool -lib3ds_viewport_read(Lib3dsViewport *viewport, FILE *f) +lib3ds_viewport_read(Lib3dsViewport *viewport, iostream *strm) { Lib3dsChunk c; Lib3dsWord chunk; - if (!lib3ds_chunk_read_start(&c, 0, f)) { + if (!lib3ds_chunk_read_start(&c, 0, strm)) { return(LIB3DS_FALSE); } @@ -51,42 +51,39 @@ lib3ds_viewport_read(Lib3dsViewport *viewport, FILE *f) case LIB3DS_VIEWPORT_LAYOUT: { int cur=0; - viewport->layout.style=lib3ds_word_read(f); - viewport->layout.active=lib3ds_intw_read(f); - lib3ds_intw_read(f); - viewport->layout.swap=lib3ds_intw_read(f); - lib3ds_intw_read(f); - viewport->layout.swap_prior=lib3ds_intw_read(f); - viewport->layout.swap_view=lib3ds_intw_read(f); - lib3ds_chunk_read_tell(&c, f); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + viewport->layout.style=lib3ds_word_read(strm); + viewport->layout.active=lib3ds_intw_read(strm); + lib3ds_intw_read(strm); + viewport->layout.swap=lib3ds_intw_read(strm); + lib3ds_intw_read(strm); + viewport->layout.swap_prior=lib3ds_intw_read(strm); + viewport->layout.swap_view=lib3ds_intw_read(strm); + lib3ds_chunk_read_tell(&c, strm); + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_VIEWPORT_SIZE: { - viewport->layout.position[0]=lib3ds_word_read(f); - viewport->layout.position[1]=lib3ds_word_read(f); - viewport->layout.size[0]=lib3ds_word_read(f); - viewport->layout.size[1]=lib3ds_word_read(f); + viewport->layout.position[0]=lib3ds_word_read(strm); + viewport->layout.position[1]=lib3ds_word_read(strm); + viewport->layout.size[0]=lib3ds_word_read(strm); + viewport->layout.size[1]=lib3ds_word_read(strm); } break; case LIB3DS_VIEWPORT_DATA_3: { lib3ds_viewport_set_views(viewport,cur+1); - lib3ds_intw_read(f); - viewport->layout.viewL[cur].axis_lock=lib3ds_word_read(f); - viewport->layout.viewL[cur].position[0]=lib3ds_intw_read(f); - viewport->layout.viewL[cur].position[1]=lib3ds_intw_read(f); - viewport->layout.viewL[cur].size[0]=lib3ds_intw_read(f); - viewport->layout.viewL[cur].size[1]=lib3ds_intw_read(f); - viewport->layout.viewL[cur].type=lib3ds_word_read(f); - viewport->layout.viewL[cur].zoom=lib3ds_float_read(f); - lib3ds_vector_read(viewport->layout.viewL[cur].center,f); - viewport->layout.viewL[cur].horiz_angle=lib3ds_float_read(f); - viewport->layout.viewL[cur].vert_angle=lib3ds_float_read(f); - - int result = fread(viewport->layout.viewL[cur].camera,11,1,f); - if (result==0) return (LIB3DS_FALSE); - + lib3ds_intw_read(strm); + viewport->layout.viewL[cur].axis_lock=lib3ds_word_read(strm); + viewport->layout.viewL[cur].position[0]=lib3ds_intw_read(strm); + viewport->layout.viewL[cur].position[1]=lib3ds_intw_read(strm); + viewport->layout.viewL[cur].size[0]=lib3ds_intw_read(strm); + viewport->layout.viewL[cur].size[1]=lib3ds_intw_read(strm); + viewport->layout.viewL[cur].type=lib3ds_word_read(strm); + viewport->layout.viewL[cur].zoom=lib3ds_float_read(strm); + lib3ds_vector_read(viewport->layout.viewL[cur].center,strm); + viewport->layout.viewL[cur].horiz_angle=lib3ds_float_read(strm); + viewport->layout.viewL[cur].vert_angle=lib3ds_float_read(strm); + strm->read(viewport->layout.viewL[cur].camera,11); ++cur; } break; @@ -103,65 +100,64 @@ lib3ds_viewport_read(Lib3dsViewport *viewport, FILE *f) case LIB3DS_DEFAULT_VIEW: { memset(&viewport->default_view,0,sizeof(Lib3dsDefaultView)); - while ((chunk=lib3ds_chunk_read_next(&c, f))!=0) { + while ((chunk=lib3ds_chunk_read_next(&c, strm))!=0) { switch (chunk) { case LIB3DS_VIEW_TOP: { viewport->default_view.type=LIB3DS_VIEW_TYPE_TOP; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_BOTTOM: { viewport->default_view.type=LIB3DS_VIEW_TYPE_BOTTOM; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_LEFT: { viewport->default_view.type=LIB3DS_VIEW_TYPE_LEFT; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_RIGHT: { viewport->default_view.type=LIB3DS_VIEW_TYPE_RIGHT; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_FRONT: { viewport->default_view.type=LIB3DS_VIEW_TYPE_FRONT; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_BACK: { viewport->default_view.type=LIB3DS_VIEW_TYPE_BACK; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_USER: { viewport->default_view.type=LIB3DS_VIEW_TYPE_USER; - lib3ds_vector_read(viewport->default_view.position,f); - viewport->default_view.width=lib3ds_float_read(f); - viewport->default_view.horiz_angle=lib3ds_float_read(f); - viewport->default_view.vert_angle=lib3ds_float_read(f); - viewport->default_view.roll_angle=lib3ds_float_read(f); + lib3ds_vector_read(viewport->default_view.position,strm); + viewport->default_view.width=lib3ds_float_read(strm); + viewport->default_view.horiz_angle=lib3ds_float_read(strm); + viewport->default_view.vert_angle=lib3ds_float_read(strm); + viewport->default_view.roll_angle=lib3ds_float_read(strm); } break; case LIB3DS_VIEW_CAMERA: { viewport->default_view.type=LIB3DS_VIEW_TYPE_CAMERA; - int result = fread(viewport->default_view.camera,11,1,f); - if (result==0) return (LIB3DS_FALSE); + strm->read(viewport->default_view.camera,11); } break; default: @@ -172,7 +168,7 @@ lib3ds_viewport_read(Lib3dsViewport *viewport, FILE *f) break; } - lib3ds_chunk_read_end(&c, f); + lib3ds_chunk_read_end(&c, strm); return(LIB3DS_TRUE); } @@ -206,58 +202,57 @@ lib3ds_viewport_set_views(Lib3dsViewport *viewport, Lib3dsDword views) * \ingroup viewport */ Lib3dsBool -lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) +lib3ds_viewport_write(Lib3dsViewport *viewport, iostream *strm) { if (viewport->layout.views) { Lib3dsChunk c; unsigned i; c.chunk=LIB3DS_VIEWPORT_LAYOUT; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } - lib3ds_word_write(viewport->layout.style,f); - lib3ds_intw_write(viewport->layout.active,f); - lib3ds_intw_write(0,f); - lib3ds_intw_write(viewport->layout.swap,f); - lib3ds_intw_write(0,f); - lib3ds_intw_write(viewport->layout.swap_prior,f); - lib3ds_intw_write(viewport->layout.swap_view,f); + lib3ds_word_write(viewport->layout.style,strm); + lib3ds_intw_write(viewport->layout.active,strm); + lib3ds_intw_write(0,strm); + lib3ds_intw_write(viewport->layout.swap,strm); + lib3ds_intw_write(0,strm); + lib3ds_intw_write(viewport->layout.swap_prior,strm); + lib3ds_intw_write(viewport->layout.swap_view,strm); { Lib3dsChunk c; c.chunk=LIB3DS_VIEWPORT_SIZE; c.size=14; - lib3ds_chunk_write(&c,f); - lib3ds_intw_write(viewport->layout.position[0],f); - lib3ds_intw_write(viewport->layout.position[1],f); - lib3ds_intw_write(viewport->layout.size[0],f); - lib3ds_intw_write(viewport->layout.size[1],f); + lib3ds_chunk_write(&c,strm); + lib3ds_intw_write(viewport->layout.position[0],strm); + lib3ds_intw_write(viewport->layout.position[1],strm); + lib3ds_intw_write(viewport->layout.size[0],strm); + lib3ds_intw_write(viewport->layout.size[1],strm); } for (i=0; ilayout.views; ++i) { Lib3dsChunk c; c.chunk=LIB3DS_VIEWPORT_DATA_3; c.size=55; - lib3ds_chunk_write(&c,f); + lib3ds_chunk_write(&c,strm); - lib3ds_intw_write(0,f); - lib3ds_word_write(viewport->layout.viewL[i].axis_lock,f); - lib3ds_intw_write(viewport->layout.viewL[i].position[0],f); - lib3ds_intw_write(viewport->layout.viewL[i].position[1],f); - lib3ds_intw_write(viewport->layout.viewL[i].size[0],f); - lib3ds_intw_write(viewport->layout.viewL[i].size[1],f); - lib3ds_word_write(viewport->layout.viewL[i].type,f); - lib3ds_float_write(viewport->layout.viewL[i].zoom,f); - lib3ds_vector_write(viewport->layout.viewL[i].center,f); - lib3ds_float_write(viewport->layout.viewL[i].horiz_angle,f); - lib3ds_float_write(viewport->layout.viewL[i].vert_angle,f); - int result = fwrite(viewport->layout.viewL[i].camera,11,1,f); - if (result==0) return (LIB3DS_FALSE); + lib3ds_intw_write(0,strm); + lib3ds_word_write(viewport->layout.viewL[i].axis_lock,strm); + lib3ds_intw_write(viewport->layout.viewL[i].position[0],strm); + lib3ds_intw_write(viewport->layout.viewL[i].position[1],strm); + lib3ds_intw_write(viewport->layout.viewL[i].size[0],strm); + lib3ds_intw_write(viewport->layout.viewL[i].size[1],strm); + lib3ds_word_write(viewport->layout.viewL[i].type,strm); + lib3ds_float_write(viewport->layout.viewL[i].zoom,strm); + lib3ds_vector_write(viewport->layout.viewL[i].center,strm); + lib3ds_float_write(viewport->layout.viewL[i].horiz_angle,strm); + lib3ds_float_write(viewport->layout.viewL[i].vert_angle,strm); + strm->write(viewport->layout.viewL[i].camera,11); } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } @@ -266,7 +261,7 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_DEFAULT_VIEW; - if (!lib3ds_chunk_write_start(&c,f)) { + if (!lib3ds_chunk_write_start(&c,strm)) { return(LIB3DS_FALSE); } @@ -276,9 +271,9 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_TOP; c.size=22; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); } break; case LIB3DS_VIEW_TYPE_BOTTOM: @@ -286,9 +281,9 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_BOTTOM; c.size=22; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); } break; case LIB3DS_VIEW_TYPE_LEFT: @@ -296,9 +291,9 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_LEFT; c.size=22; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); } break; case LIB3DS_VIEW_TYPE_RIGHT: @@ -306,9 +301,9 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_RIGHT; c.size=22; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); } break; case LIB3DS_VIEW_TYPE_FRONT: @@ -316,9 +311,9 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_FRONT; c.size=22; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); } break; case LIB3DS_VIEW_TYPE_BACK: @@ -326,9 +321,9 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_BACK; c.size=22; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); } break; case LIB3DS_VIEW_TYPE_USER: @@ -336,12 +331,12 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_USER; c.size=34; - lib3ds_chunk_write(&c,f); - lib3ds_vector_write(viewport->default_view.position,f); - lib3ds_float_write(viewport->default_view.width,f); - lib3ds_float_write(viewport->default_view.horiz_angle,f); - lib3ds_float_write(viewport->default_view.vert_angle,f); - lib3ds_float_write(viewport->default_view.roll_angle,f); + lib3ds_chunk_write(&c,strm); + lib3ds_vector_write(viewport->default_view.position,strm); + lib3ds_float_write(viewport->default_view.width,strm); + lib3ds_float_write(viewport->default_view.horiz_angle,strm); + lib3ds_float_write(viewport->default_view.vert_angle,strm); + lib3ds_float_write(viewport->default_view.roll_angle,strm); } break; case LIB3DS_VIEW_TYPE_CAMERA: @@ -349,14 +344,13 @@ lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f) Lib3dsChunk c; c.chunk=LIB3DS_VIEW_CAMERA; c.size=17; - lib3ds_chunk_write(&c,f); - int result = fwrite(viewport->default_view.camera,1,11,f); - if (result==0) return (LIB3DS_FALSE); + lib3ds_chunk_write(&c,strm); + strm->write(viewport->default_view.camera,11); // NAH Potential issue here } break; } - if (!lib3ds_chunk_write_end(&c,f)) { + if (!lib3ds_chunk_write_end(&c,strm)) { return(LIB3DS_FALSE); } } diff --git a/src/osgPlugins/3ds/viewport.h b/src/osgPlugins/3ds/viewport.h index 38857ee3a..ba794e4dc 100644 --- a/src/osgPlugins/3ds/viewport.h +++ b/src/osgPlugins/3ds/viewport.h @@ -27,6 +27,9 @@ #include "types.h" #endif +#include +using namespace std; + #ifdef __cplusplus extern "C" { #endif @@ -122,9 +125,9 @@ struct _Lib3dsViewport { Lib3dsDefaultView default_view; }; -extern LIB3DSAPI Lib3dsBool lib3ds_viewport_read(Lib3dsViewport *viewport, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_viewport_read(Lib3dsViewport *viewport, iostream *strm); extern LIB3DSAPI void lib3ds_viewport_set_views(Lib3dsViewport *viewport, Lib3dsDword views); -extern LIB3DSAPI Lib3dsBool lib3ds_viewport_write(Lib3dsViewport *viewport, FILE *f); +extern LIB3DSAPI Lib3dsBool lib3ds_viewport_write(Lib3dsViewport *viewport, iostream *strm); #ifdef __cplusplus }