diff --git a/BGL/include/CGAL/boost/graph/IO/PLY.h b/BGL/include/CGAL/boost/graph/IO/PLY.h index 4018fcb198f..d4986001cd1 100644 --- a/BGL/include/CGAL/boost/graph/IO/PLY.h +++ b/BGL/include/CGAL/boost/graph/IO/PLY.h @@ -342,6 +342,11 @@ bool write_PLY(std::ostream& os, bool has_vcolor = !is_default_parameter::value; bool has_fcolor = !is_default_parameter::value; + bool has_vnormal = false; + if constexpr (!parameters::is_default_parameter::value) + { + has_vnormal = true; + } VIMap vim = CGAL::get_initialized_vertex_index_map(g, np); Vpm vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), get_const_property_map(boost::vertex_point, g)); @@ -379,6 +384,25 @@ bool write_PLY(std::ostream& os, << "property uchar alpha" << std::endl; } + if constexpr (!parameters::is_default_parameter::value) + { + auto vnm = get_parameter(np, internal_np::vertex_normal_map); + typedef decltype(vnm) Normal_map; + typedef Kernel_traits::Kernel::FT FloatDouble; + if(std::is_same::value) + { + os << "property float nx" << std::endl + << "property float ny" << std::endl + << "property float nz" << std::endl; + } + else + { + os << "property double nx" << std::endl + << "property double ny" << std::endl + << "property double nz" << std::endl; + } + } + os << "element face " << faces(g).size() << std::endl; internal::output_property_header( os, std::make_pair(CGAL::Identity_property_map >(), @@ -398,6 +422,14 @@ bool write_PLY(std::ostream& os, { const Point_3& p = get(vpm, vd); internal::output_properties(os, &p, make_ply_point_writer (Identity_property_map())); + if constexpr (!parameters::is_default_parameter::value) + { + auto vnm = get_parameter(np, internal_np::vertex_normal_map); + typedef decltype(vnm) Normal_map; + typedef typename Normal_map::value_type Vector_3; + Vector_3 vec = get(vnm,vd); + internal::output_properties(os, &vec, make_ply_normal_writer (Identity_property_map())); + } if(has_vcolor) { const CGAL::IO::Color& c = get(vcm, vd); diff --git a/Stream_support/test/Stream_support/issue_7874.cpp b/Stream_support/test/Stream_support/issue_7874.cpp index 461cc8e281a..fac43dd223a 100644 --- a/Stream_support/test/Stream_support/issue_7874.cpp +++ b/Stream_support/test/Stream_support/issue_7874.cpp @@ -81,7 +81,7 @@ int main() // from #include // https://doc.cgal.org/latest/BGL/group__PkgBGLIoFuncsPLY.html#ga959dcd88ca979d3b6b0806d883a0247f CGAL::IO::write_PLY("generic_write_PLY_sm.ply", sm, "generic write_PLY(Surface_mesh)", - CGAL::parameters::stream_precision(17).use_binary_mode(true).vertex_point_map(scsmvpm)); + CGAL::parameters::stream_precision(17).use_binary_mode(true).vertex_point_map(scsmvpm).vertex_normal_map(scsmvnpm)); /* if(!CGAL::IO::read_polygon_mesh("generic_write_PLY_sm.ply", osm)) {