Changeset 10819
- Timestamp:
- 11/23/09 12:00:07 (3 years ago)
- Location:
- OpenSceneGraph/trunk/src/osgPlugins
- Files:
-
- 4 modified
-
ive/DataOutputStream.cpp (modified) (5 diffs)
-
ive/DataOutputStream.h (modified) (3 diffs)
-
ive/ReaderWriterIVE.cpp (modified) (4 diffs)
-
osgTerrain/ImageLayer.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgPlugins/ive/DataOutputStream.cpp
r10762 r10819 124 124 #include <osg/io_utils> 125 125 #include <osgDB/FileUtils> 126 #include <osgDB/FileNameUtils> 126 127 #include <osgDB/fstream> 128 #include <osgDB/WriteFile> 127 129 128 130 #include <stdlib.h> … … 143 145 _maximumErrorToSizeRatio = 0.001; 144 146 147 _outputTextureFiles = false; 148 _textureFileNameNumber = 0; 149 145 150 _options = options; 146 151 147 152 _compressionLevel = 0; 153 154 if (options) _filename = options->getPluginStringData("filename"); 155 156 if (_filename.empty()) 157 { 158 // initialize _filename to a unique identifier in case a real filename is not supplied 159 std::ostringstream filenameBuilder; 160 filenameBuilder << "file" << ostream; // use address of ostream to formulate unique filename 161 _filename = filenameBuilder.str(); 162 } 148 163 149 164 if (_options.get()) … … 158 173 setIncludeImageMode(IMAGE_COMPRESS_DATA); 159 174 } 160 osg::notify(osg::DEBUG_INFO) << "ive::DataOutp ouStream.setIncludeImageMode()=" << getIncludeImageMode() << std::endl;175 osg::notify(osg::DEBUG_INFO) << "ive::DataOutputStream.setIncludeImageMode()=" << getIncludeImageMode() << std::endl; 161 176 162 177 setIncludeExternalReferences(optionsString.find("inlineExternalReferencesInIVEFile")!=std::string::npos); 163 osg::notify(osg::DEBUG_INFO) << "ive::DataOutp ouStream.setIncludeExternalReferences()=" << getIncludeExternalReferences() << std::endl;178 osg::notify(osg::DEBUG_INFO) << "ive::DataOutputStream.setIncludeExternalReferences()=" << getIncludeExternalReferences() << std::endl; 164 179 165 180 setWriteExternalReferenceFiles(optionsString.find("noWriteExternalReferenceFiles")==std::string::npos); 166 osg::notify(osg::DEBUG_INFO) << "ive::DataOutp ouStream.setWriteExternalReferenceFiles()=" << getWriteExternalReferenceFiles() << std::endl;181 osg::notify(osg::DEBUG_INFO) << "ive::DataOutputStream.setWriteExternalReferenceFiles()=" << getWriteExternalReferenceFiles() << std::endl; 167 182 168 183 setUseOriginalExternalReferences(optionsString.find("useOriginalExternalReferences")!=std::string::npos); 169 osg::notify(osg::DEBUG_INFO) << "ive::DataOutpouStream.setUseOriginalExternalReferences()=" << getUseOriginalExternalReferences() << std::endl; 184 osg::notify(osg::DEBUG_INFO) << "ive::DataOutputStream.setUseOriginalExternalReferences()=" << getUseOriginalExternalReferences() << std::endl; 185 186 setOutputTextureFiles(optionsString.find("OutputTextureFiles")!=std::string::npos); 187 osg::notify(osg::DEBUG_INFO) << "ive::DataOutputStream.setOutputTextureFiles()=" << getOutputTextureFiles() << std::endl; 170 188 171 189 _compressionLevel = (optionsString.find("compressed")!=std::string::npos) ? 1 : 0; 172 osg::notify(osg::DEBUG_INFO) << "ive::DataOutp ouStream._compressionLevel=" << _compressionLevel << std::endl;190 osg::notify(osg::DEBUG_INFO) << "ive::DataOutputStream._compressionLevel=" << _compressionLevel << std::endl; 173 191 174 192 std::string::size_type terrainErrorPos = optionsString.find("TerrainMaximumErrorToSizeRatio="); … … 1440 1458 break; 1441 1459 case IMAGE_REFERENCE_FILE: 1442 // Only include image name in stream 1443 if (image && !(image->getFileName().empty())){ 1444 writeString(image->getFileName()); 1460 { 1461 if (image) 1462 { 1463 // Only include image name in stream 1464 std::string fileName = image->getFileName(); 1465 // Export an image, if requested 1466 if (getOutputTextureFiles()) 1467 { 1468 if (fileName.empty()) 1469 { // synthesize a new faux filename 1470 fileName = getTextureFileNameForOutput(); 1471 } 1472 osgDB::writeImageFile(*image, fileName); 1473 } 1474 writeString(fileName); 1445 1475 } 1446 else{ 1476 else 1477 { 1447 1478 writeString(""); 1448 1479 } 1449 1480 break; 1481 } 1450 1482 case IMAGE_INCLUDE_FILE: 1451 1483 // Include image file in stream … … 1840 1872 } 1841 1873 1874 std::string DataOutputStream::getTextureFileNameForOutput() 1875 { 1876 std::string fileName = osgDB::getNameLessExtension(_filename); 1877 if (_textureFileNameNumber>0) 1878 { 1879 std::ostringstream o; 1880 o << '_' << _textureFileNameNumber; 1881 fileName += o.str(); 1882 } 1883 1884 fileName += ".dds"; 1885 ++_textureFileNameNumber; 1886 1887 return fileName; 1888 } 1889 1890 1891 1842 1892 void DataOutputStream::setExternalFileWritten(const std::string& filename, bool hasBeenWritten) 1843 1893 { -
OpenSceneGraph/trunk/src/osgPlugins/ive/DataOutputStream.h
r10762 r10819 131 131 bool getUseOriginalExternalReferences() const {return _useOriginalExternalReferences;}; 132 132 133 // Set and get if export texture files during write 134 void setOutputTextureFiles(bool flag) { _outputTextureFiles = flag; } 135 bool getOutputTextureFiles() const { return _outputTextureFiles; } 136 137 // support code for OutputTextureFiles 138 virtual std::string getTextureFileNameForOutput(); 139 void setFileName(std::string newFileName) {_filename = newFileName;} 140 std::string getFileName(void) const {return(_filename);} 141 133 142 void setTerrainMaximumErrorToSizeRatio(double ratio) { _maximumErrorToSizeRatio = ratio; } 134 143 double getTerrainMaximumErrorToSizeRatio() const { return _maximumErrorToSizeRatio; } … … 151 160 std::ostream* _ostream; 152 161 std::ostream* _output_ostream; 162 std::string _filename; // not necessary, but optional for use in texture export 153 163 154 164 std::stringstream _compressionStream; … … 189 199 190 200 IncludeImageMode _includeImageMode; 191 201 202 bool _outputTextureFiles; 203 unsigned int _textureFileNameNumber; 204 192 205 osg::ref_ptr<const osgDB::ReaderWriter::Options> _options; 193 206 -
OpenSceneGraph/trunk/src/osgPlugins/ive/ReaderWriterIVE.cpp
r10762 r10819 29 29 supportsOption("TerrainMaximumErrorToSizeRatio=value","Export option that controls error matric used to determine terrain HieghtField storage precision."); 30 30 supportsOption("noLoadExternalReferenceFiles","Import option"); 31 supportsOption("OutputTextureFiles","Write out the texture images to file"); 31 32 } 32 33 … … 69 70 osg::ref_ptr<Options> local_opt = options ? static_cast<Options*>(options->clone(osg::CopyOp::SHALLOW_COPY)) : new Options; 70 71 local_opt->getDatabasePathList().push_front(osgDB::getFilePath(fileName)); 71 72 72 73 osgDB::ifstream istream(fileName.c_str(), std::ios::in | std::ios::binary); 73 74 return readNode(istream,local_opt.get()); … … 119 120 if(local_opt->getDatabasePathList().empty()) 120 121 local_opt->setDatabasePath(osgDB::getFilePath(fileName)); 122 123 local_opt->setPluginStringData("filename",fileName); 124 121 125 osgDB::ofstream fout(fileName.c_str(), std::ios::out | std::ios::binary); 122 126 if (!fout) return WriteResult::ERROR_IN_WRITING_FILE; … … 135 139 if(local_opt->getDatabasePathList().empty()) 136 140 local_opt->setDatabasePath(osgDB::getFilePath(fileName)); 141 142 local_opt->setPluginStringData("filename",fileName); 137 143 138 144 osgDB::ofstream fout(fileName.c_str(), std::ios::out | std::ios::binary); -
OpenSceneGraph/trunk/src/osgPlugins/osgTerrain/ImageLayer.cpp
r8840 r10819 12 12 #include <osgDB/Input> 13 13 #include <osgDB/Output> 14 #include <osgDB/WriteFile> 14 15 #include <osgDB/ParameterOutput> 15 16 … … 65 66 { 66 67 const osgTerrain::ImageLayer& layer = static_cast<const osgTerrain::ImageLayer&>(obj); 68 69 std::string fileName = layer.getFileName(); 67 70 68 if ( !layer.getFileName().empty())71 if (fw.getOutputTextureFiles()) 69 72 { 70 fw.indent()<<"file "<< layer.getFileName() << std::endl; 73 if (fileName.empty()) 74 { 75 fileName = fw.getTextureFileNameForOutput(); 76 } 77 osgDB::writeImageFile(*layer.getImage(), fileName); 78 } 79 if (!fileName.empty()) 80 { 81 fw.indent()<<"file "<< fw.wrapString(fileName) << std::endl; 71 82 } 72 83
