Fix OBJ writer from Nef

This commit is contained in:
Thomas Krijnen
2023-12-11 21:05:58 +01:00
parent e74f160a48
commit 9c82b752b6
@@ -1150,9 +1150,9 @@ public:
ofs << "v " << v.cartesian(0) << " " << v.cartesian(1) << " " << v.cartesian(2) << "\n"; ofs << "v " << v.cartesian(0) << " " << v.cartesian(1) << " " << v.cartesian(2) << "\n";
} }
for (auto& idxs : facets) { for (auto& idxs : facets) {
ofs << "i"; ofs << "f";
for (auto& i : idxs) { for (auto& i : idxs) {
ofs << " " << i; ofs << " " << (i+1);
} }
ofs << "\n"; ofs << "\n";
} }
@@ -1297,22 +1297,25 @@ bool convert_to_polyhedron(const CGAL::Nef_polyhedron_3<Kernel>& a, CGAL::Polyhe
} }
template <typename Kernel> template <typename Kernel>
bool write_to_obj(const CGAL::Nef_polyhedron_3<Kernel>& a, std::ofstream& ofs, size_t volume_index = 0) { bool write_to_obj(const CGAL::Nef_polyhedron_3<Kernel>& a, std::ostream& ofs, size_t volume_index = 0) {
size_t v = 0; size_t v = 0;
Polysoup_builder<Kernel> vis;
for (auto it = a.volumes_begin(); it != a.volumes_end(); ++it) { for (auto it = a.volumes_begin(); it != a.volumes_end(); ++it) {
if (!it->mark()) { if (!it->mark()) {
continue; continue;
} }
for (auto jt = it->shells_begin(); jt != it->shells_end(); ++jt) { for (auto jt = it->shells_begin(); jt != it->shells_end(); ++jt) {
if (v++ == volume_index) { if (v++ == volume_index || volume_index == std::numeric_limits<size_t>::max()) {
Polysoup_builder<Kernel> vis;
a.visit_shell_objects(CGAL::Nef_polyhedron_3<Kernel>::SFace_const_handle(jt), vis); a.visit_shell_objects(CGAL::Nef_polyhedron_3<Kernel>::SFace_const_handle(jt), vis);
vis.write(ofs); if (volume_index != std::numeric_limits<size_t>::max()) {
return true; vis.write(ofs);
return true;
}
} }
} }
} }
return false; vis.write(ofs);
return volume_index == std::numeric_limits<size_t>::max();
} }
#endif #endif