diff options
-rw-r--r-- | src/export.cc | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/export.cc b/src/export.cc index 5ac3ac0..8abd5fa 100644 --- a/src/export.cc +++ b/src/export.cc @@ -83,7 +83,6 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDial stream.str(""); stream << x3 << " " << y3 << " " << z3; std::string vs3 = stream.str(); - CGAL_Polyhedron::Traits::Vector_3 normal(1,0,0); if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) { // The above condition ensures that there are 3 distinct vertices, but // they may be collinear. If they are, the unit normal is meaningless @@ -91,16 +90,16 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDial // collinear then the unit normal must be calculated from the // components. if (!CGAL::collinear(v1.point(),v2.point(),v3.point())) { - // Pseudocode: CGAL kernel must be set up to enable unit_normal and - // Vector type must be declared as Vector_3<Kernel>. - // http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Function_unit_normal.html - normal = CGAL::normal(v1.point(),v2.point(),v3.point()); - normal = normal / sqrt(CGAL::to_double(normal.squared_length())); - } - output << " facet normal " - << CGAL::to_double(normal.x()) << " " - << CGAL::to_double(normal.y()) << " " - << CGAL::to_double(normal.z()) << "\n"; + CGAL_Polyhedron::Traits::Vector_3 normal = CGAL::normal(v1.point(),v2.point(),v3.point()); + output << " facet normal " + << CGAL::sign(normal.x()) * sqrt(CGAL::to_double(normal.x()*normal.x()/normal.squared_length())) + << " " + << CGAL::sign(normal.y()) * sqrt(CGAL::to_double(normal.y()*normal.y()/normal.squared_length())) + << " " + << CGAL::sign(normal.z()) * sqrt(CGAL::to_double(normal.z()*normal.z()/normal.squared_length())) + << "\n"; + } + else output << " facet normal 1 0 0\n"; output << " outer loop\n"; output << " vertex " << vs1 << "\n"; output << " vertex " << vs2 << "\n"; |