diff --git a/FileIO/Legacy/OGSIOVer4.cpp b/FileIO/Legacy/OGSIOVer4.cpp index d7de162b91c5b0f22201dc11ba28545ccbd4c86f..f7cf4e3d5ad04a45bc809250335b08cec07ac668 100644 --- a/FileIO/Legacy/OGSIOVer4.cpp +++ b/FileIO/Legacy/OGSIOVer4.cpp @@ -565,6 +565,39 @@ bool readGLIFileV4(const std::string& fname, return false; } +std::size_t writeTINSurfaces(std::ofstream &os, GeoLib::SurfaceVec const* sfcs_vec, std::size_t sfc_count, std::string const& path) +{ + const std::vector<GeoLib::Surface*>* sfcs (sfcs_vec->getVector()); + for (std::size_t k(0); k < sfcs->size(); k++) + { + os << "#SURFACE" << "\n"; + std::string sfc_name; + if (sfcs_vec->getNameOfElementByID (sfc_count, sfc_name)) { + os << "\t$NAME " << "\n" << "\t\t" << sfc_name << "\n"; + } else { + os << "\t$NAME " << "\n" << "\t\t" << sfc_count << "\n"; + sfc_name = std::to_string (sfc_count); + } + sfc_name += ".tin"; + os << "\t$TIN" << "\n"; + os << "\t\t" << sfc_name << "\n"; + // create tin file + sfc_name = path + sfc_name; + std::ofstream tin_os (sfc_name.c_str()); + GeoLib::Surface const& sfc (*(*sfcs)[k]); + const std::size_t n_tris (sfc.getNTriangles()); + for (std::size_t l(0); l < n_tris; l++) { + GeoLib::Triangle const& tri (*(sfc[l])); + tin_os << l << " " << *(tri.getPoint(0)) << " " << + *(tri.getPoint(1)) << " " << *(tri.getPoint(2)) << + "\n"; + } + tin_os.close(); + sfc_count++; + } + return sfc_count; +} + void writeGLIFileV4 (const std::string& fname, const std::string& geo_name, const GeoLib::GEOObjects& geo) @@ -603,19 +636,13 @@ void writeGLIFileV4 (const std::string& fname, for (std::size_t j(0); j < (*plys)[k]->getNumberOfPoints(); j++) os << " " << ((*plys)[k])->getPointID(j) << "\n"; } - - INFO("GeoLib::writeGLIFileV4(): write closed polylines as surfaces to file %s.", - fname.c_str()); - for (std::size_t k(0); k < plys->size(); k++) - if ((*plys)[k]->isClosed()) - { - os << "#SURFACE" << "\n"; - os << " $NAME " << "\n" << " " << k << "\n"; //plys_vec->getNameOfElement ((*plys)[k]) << "\n"; - os << " $TYPE " << "\n" << " 0" << "\n"; - os << " $POLYLINES" << "\n" << " " << k << "\n"; //plys_vec->getNameOfElement ((*plys)[k]) << "\n"; - } } + // writing surfaces as TIN files + const GeoLib::SurfaceVec* sfcs_vec (geo.getSurfaceVecObj (geo_name)); + if (sfcs_vec) + writeTINSurfaces(os, sfcs_vec, 0, BaseLib::extractPath(fname)); + os << "#STOP" << "\n"; os.close (); } @@ -706,37 +733,8 @@ void writeAllDataToGLIFileV4 (const std::string& fname, const GeoLib::GEOObjects for (std::size_t j(0); j < geo_names.size(); j++) { const GeoLib::SurfaceVec* sfcs_vec (geo.getSurfaceVecObj (geo_names[j])); - if (sfcs_vec) { - const std::vector<GeoLib::Surface*>* sfcs (sfcs_vec->getVector()); - for (std::size_t k(0); k < sfcs->size(); k++) - { - os << "#SURFACE" << "\n"; - std::string sfc_name; - if (sfcs_vec->getNameOfElementByID (sfcs_cnt, sfc_name)) { - os << "\t$NAME " << "\n" << "\t\t" << sfc_name << "\n"; - } else { - os << "\t$NAME " << "\n" << "\t\t" << sfcs_cnt << "\n"; - sfc_name = std::to_string (sfcs_cnt); - } - sfc_name += ".tin"; - os << "\t$TIN" << "\n"; - os << "\t\t" << sfc_name << "\n"; - // create tin file - sfc_name = path + sfc_name; - std::ofstream tin_os (sfc_name.c_str()); - GeoLib::Surface const& sfc (*(*sfcs)[k]); - const std::size_t n_tris (sfc.getNTriangles()); - for (std::size_t l(0); l < n_tris; l++) { - GeoLib::Triangle const& tri (*(sfc[l])); - tin_os << l << " " << *(tri.getPoint(0)) << " " << - *(tri.getPoint(1)) << " " << *(tri.getPoint(2)) << - "\n"; - } - tin_os.close(); - - sfcs_cnt++; - } - } + if (sfcs_vec) + sfcs_cnt += writeTINSurfaces(os, sfcs_vec, sfcs_cnt, path); } os << "#STOP" << "\n";