diff --git a/src/OpenMesh/Core/IO/writer/OFFWriter.cc b/src/OpenMesh/Core/IO/writer/OFFWriter.cc index 79254392..ba7edd03 100644 --- a/src/OpenMesh/Core/IO/writer/OFFWriter.cc +++ b/src/OpenMesh/Core/IO/writer/OFFWriter.cc @@ -100,8 +100,6 @@ write(const std::string& _filename, BaseExporter& _be, Options _opt, std::stream return false; } - out.precision(_precision); - // write header line if (_opt.check(Options::VertexTexCoord)) out << "ST"; if (_opt.check(Options::VertexColor) || _opt.check(Options::FaceColor)) out << "C"; @@ -111,6 +109,9 @@ write(const std::string& _filename, BaseExporter& _be, Options _opt, std::stream out << "\n"; + if (!_opt.check(Options::Binary)) + out.precision(_precision); + // write to file bool result = (_opt.check(Options::Binary) ? write_binary(out, _be, _opt) : @@ -146,8 +147,6 @@ write(std::ostream& _os, BaseExporter& _be, Options _opt, std::streamsize _preci return false; } - _os.precision(_precision); - // write header line if (_opt.check(Options::VertexTexCoord)) _os << "ST"; if (_opt.check(Options::VertexColor) || _opt.check(Options::FaceColor)) _os << "C"; @@ -156,6 +155,8 @@ write(std::ostream& _os, BaseExporter& _be, Options _opt, std::streamsize _preci if (_opt.check(Options::Binary)) _os << " BINARY"; _os << "\n"; + if (!_opt.check(Options::Binary)) + _os.precision(_precision); // write to file bool result = (_opt.check(Options::Binary) ? diff --git a/src/OpenMesh/Core/IO/writer/OMWriter.cc b/src/OpenMesh/Core/IO/writer/OMWriter.cc index b1cfdd62..3d6a8943 100644 --- a/src/OpenMesh/Core/IO/writer/OMWriter.cc +++ b/src/OpenMesh/Core/IO/writer/OMWriter.cc @@ -91,7 +91,7 @@ _OMWriter_() bool _OMWriter_::write(const std::string& _filename, BaseExporter& _be, - Options _opt, std::streamsize _precision) const + Options _opt, std::streamsize /*_precision*/) const { // check whether exporter can give us an OpenMesh BaseKernel if (!_be.kernel()) return false; @@ -104,7 +104,6 @@ _OMWriter_::write(const std::string& _filename, BaseExporter& _be, _opt += Options::Binary; // only binary format supported std::ofstream ofs(_filename.c_str(), std::ios::binary); - ofs.precision(_precision); // check if file is open if (!ofs.is_open()) @@ -127,10 +126,9 @@ _OMWriter_::write(const std::string& _filename, BaseExporter& _be, //----------------------------------------------------------------------------- bool -_OMWriter_::write(std::ostream& _os, BaseExporter& _be, Options _opt, std::streamsize _precision) const +_OMWriter_::write(std::ostream& _os, BaseExporter& _be, Options _opt, std::streamsize /*_precision*/) const { // std::clog << "[OMWriter]::write( stream )\n"; - _os.precision(_precision); // check exporter features if ( !check( _be, _opt ) ) diff --git a/src/OpenMesh/Core/IO/writer/PLYWriter.cc b/src/OpenMesh/Core/IO/writer/PLYWriter.cc index 3a21e4f3..8b0490aa 100644 --- a/src/OpenMesh/Core/IO/writer/PLYWriter.cc +++ b/src/OpenMesh/Core/IO/writer/PLYWriter.cc @@ -115,7 +115,8 @@ write(const std::string& _filename, BaseExporter& _be, Options _opt, std::stream return false; } - out.precision(_precision); + if (!_opt.check(Options::Binary)) + out.precision(_precision); // write to file bool result = (_opt.check(Options::Binary) ? @@ -153,7 +154,8 @@ write(std::ostream& _os, BaseExporter& _be, Options _opt, std::streamsize _preci return false; } - _os.precision(_precision); + if (!_opt.check(Options::Binary)) + _os.precision(_precision); // write to file bool result = (_opt.check(Options::Binary) ? diff --git a/src/OpenMesh/Core/IO/writer/STLWriter.cc b/src/OpenMesh/Core/IO/writer/STLWriter.cc index 556c5af9..39d1a74c 100644 --- a/src/OpenMesh/Core/IO/writer/STLWriter.cc +++ b/src/OpenMesh/Core/IO/writer/STLWriter.cc @@ -81,36 +81,25 @@ bool _STLWriter_:: write(const std::string& _filename, BaseExporter& _be, Options _opt, std::streamsize _precision) const { - // check exporter features - if (!check(_be, _opt)) return false; - - - // check writer features - if (_opt.check(Options::VertexNormal) || - _opt.check(Options::VertexTexCoord) || - _opt.check(Options::FaceColor)) - return false; - - // binary or ascii ? if (_filename.rfind(".stla") != std::string::npos) { _opt -= Options::Binary; - return write_stla(_filename, _be, _opt); } else if (_filename.rfind(".stlb") != std::string::npos) { _opt += Options::Binary; - return write_stlb(_filename, _be, _opt); - } - else if (_filename.rfind(".stl") != std::string::npos) - { - return (_opt.check( Options::Binary ) - ? write_stlb(_filename, _be, _opt) - : write_stla(_filename, _be, _opt) ); } - return false; + // open file + std::fstream out(_filename.c_str(), (_opt.check(Options::Binary) ? std::ios_base::binary | std::ios_base::out + : std::ios_base::out) ); + + bool result = write(out, _be, _opt, _precision); + + out.close(); + + return result; } //----------------------------------------------------------------------------- @@ -129,7 +118,8 @@ write(std::ostream& _os, BaseExporter& _be, Options _opt, std::streamsize _preci _opt.check(Options::FaceColor)) return false; - _os.precision(_precision); + if (!_opt.check(Options::Binary)) + _os.precision(_precision); if (_opt & Options::Binary) return write_stlb(_os, _be, _opt);