mirror of https://github.com/CGAL/cgal
Activate Leo's code
This commit is contained in:
parent
cc5297554c
commit
c63c2a24e2
|
|
@ -1,5 +1,6 @@
|
||||||
#include <CGAL/Simple_cartesian.h>
|
#include <CGAL/Simple_cartesian.h>
|
||||||
#include <CGAL/Surface_mesh.h>
|
#include <CGAL/Surface_mesh.h>
|
||||||
|
#include <CGAL/IO/polygon_mesh_io.h>
|
||||||
#include <CGAL/Timer.h>
|
#include <CGAL/Timer.h>
|
||||||
|
|
||||||
#include <CGAL/Surface_mesh_simplification/edge_collapse.h>
|
#include <CGAL/Surface_mesh_simplification/edge_collapse.h>
|
||||||
|
|
@ -36,8 +37,8 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
Surface_mesh surface_mesh;
|
Surface_mesh surface_mesh;
|
||||||
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/fold.off");
|
const std::string filename = (argc > 1) ? argv[1] : CGAL::data_file_path("meshes/fold.off");
|
||||||
std::ifstream is(filename);
|
|
||||||
if(!is || !(is >> surface_mesh))
|
if(!CGAL::IO::read_polygon_mesh(filename, surface_mesh))
|
||||||
{
|
{
|
||||||
std::cerr << "Failed to read input mesh: " << filename << std::endl;
|
std::cerr << "Failed to read input mesh: " << filename << std::endl;
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
||||||
|
|
@ -220,19 +220,19 @@ std::optional< MatrixC33<R> > inverse_matrix(const MatrixC33<R>& m)
|
||||||
|
|
||||||
if(! CGAL_NTS is_zero(det))
|
if(! CGAL_NTS is_zero(det))
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
|
RT c00 = diff_of_products(m.r1().y(),m.r2().z(),m.r2().y(),m.r1().z()) / det;
|
||||||
|
RT c01 = diff_of_products(m.r2().y(),m.r0().z(),m.r0().y(),m.r2().z()) / det;
|
||||||
|
RT c02 = diff_of_products(m.r0().y(),m.r1().z(),m.r1().y(),m.r0().z()) / det;
|
||||||
|
|
||||||
// RT c00 = diff_of_products(m.r1().y(),m.r2().z(),m.r2().y(),m.r1().z()) / det;
|
RT c10 = diff_of_products(m.r2().x(),m.r1().z(),m.r1().x(),m.r2().z()) / det;
|
||||||
// RT c01 = diff_of_products(m.r2().y(),m.r0().z(),m.r0().y(),m.r2().z()) / det;
|
RT c11 = diff_of_products(m.r0().x(),m.r2().z(),m.r2().x(),m.r0().z()) / det;
|
||||||
// RT c02 = diff_of_products(m.r0().y(),m.r1().z(),m.r1().y(),m.r0().z()) / det;
|
RT c12 = diff_of_products(m.r1().x(),m.r0().z(),m.r0().x(),m.r1().z()) / det;
|
||||||
|
|
||||||
// RT c10 = diff_of_products(m.r2().x(),m.r1().z(),m.r1().x(),m.r2().z()) / det;
|
|
||||||
// RT c11 = diff_of_products(m.r0().x(),m.r2().z(),m.r2().x(),m.r0().z()) / det;
|
|
||||||
// RT c12 = diff_of_products(m.r1().x(),m.r0().z(),m.r0().x(),m.r1().z()) / det;
|
|
||||||
|
|
||||||
// RT c20 = diff_of_products(m.r1().x(),m.r2().y(),m.r2().x(),m.r1().y()) / det;
|
|
||||||
// RT c21 = diff_of_products(m.r2().x(),m.r0().y(),m.r0().x(),m.r2().y()) / det;
|
|
||||||
// RT c22 = diff_of_products(m.r0().x(),m.r1().y(),m.r1().x(),m.r0().y()) / det;
|
|
||||||
|
|
||||||
|
RT c20 = diff_of_products(m.r1().x(),m.r2().y(),m.r2().x(),m.r1().y()) / det;
|
||||||
|
RT c21 = diff_of_products(m.r2().x(),m.r0().y(),m.r0().x(),m.r2().y()) / det;
|
||||||
|
RT c22 = diff_of_products(m.r0().x(),m.r1().y(),m.r1().x(),m.r0().y()) / det;
|
||||||
|
#else
|
||||||
RT c00 = (m.r1().y()*m.r2().z() - m.r1().z()*m.r2().y()) / det;
|
RT c00 = (m.r1().y()*m.r2().z() - m.r1().z()*m.r2().y()) / det;
|
||||||
RT c01 = (m.r2().y()*m.r0().z() - m.r0().y()*m.r2().z()) / det;
|
RT c01 = (m.r2().y()*m.r0().z() - m.r0().y()*m.r2().z()) / det;
|
||||||
RT c02 = (m.r0().y()*m.r1().z() - m.r1().y()*m.r0().z()) / det;
|
RT c02 = (m.r0().y()*m.r1().z() - m.r1().y()*m.r0().z()) / det;
|
||||||
|
|
@ -244,6 +244,7 @@ std::optional< MatrixC33<R> > inverse_matrix(const MatrixC33<R>& m)
|
||||||
RT c20 = (m.r1().x()*m.r2().y() - m.r2().x()*m.r1().y()) / det;
|
RT c20 = (m.r1().x()*m.r2().y() - m.r2().x()*m.r1().y()) / det;
|
||||||
RT c21 = (m.r2().x()*m.r0().y() - m.r0().x()*m.r2().y()) / det;
|
RT c21 = (m.r2().x()*m.r0().y() - m.r0().x()*m.r2().y()) / det;
|
||||||
RT c22 = (m.r0().x()*m.r1().y() - m.r0().y()*m.r1().x()) / det;
|
RT c22 = (m.r0().x()*m.r1().y() - m.r0().y()*m.r1().x()) / det;
|
||||||
|
#endif
|
||||||
|
|
||||||
rInverse = result_type(Matrix(c00,c01,c02,
|
rInverse = result_type(Matrix(c00,c01,c02,
|
||||||
c10,c11,c12,
|
c10,c11,c12,
|
||||||
|
|
|
||||||
|
|
@ -319,7 +319,7 @@ LindstromTurkCore<TM,K>::
|
||||||
extract_triangle_data()
|
extract_triangle_data()
|
||||||
{
|
{
|
||||||
mTriangle_data.reserve(mProfile.triangles().size());
|
mTriangle_data.reserve(mProfile.triangles().size());
|
||||||
|
maxBb = 0.0;
|
||||||
for(const Triangle& tri : mProfile.triangles())
|
for(const Triangle& tri : mProfile.triangles())
|
||||||
{
|
{
|
||||||
const Point_reference p0 = get_point(tri.v0);
|
const Point_reference p0 = get_point(tri.v0);
|
||||||
|
|
@ -327,9 +327,9 @@ extract_triangle_data()
|
||||||
const Point_reference p2 = get_point(tri.v2);
|
const Point_reference p2 = get_point(tri.v2);
|
||||||
|
|
||||||
//TODO for obscur reason, computing this maxBb increase running time by 10%
|
//TODO for obscur reason, computing this maxBb increase running time by 10%
|
||||||
maxBb=(std::max)({maxBb,std::abs(p0.x()),std::abs(p0.y()),std::abs(p0.z()),
|
maxBb=(std::max)({maxBb,CGAL::abs(p0.x()),CGAL::abs(p0.y()),CGAL::abs(p0.z()),
|
||||||
std::abs(p1.x()),std::abs(p1.y()),std::abs(p1.z()),
|
CGAL::abs(p1.x()),CGAL::abs(p1.y()),CGAL::abs(p1.z()),
|
||||||
std::abs(p2.x()),std::abs(p2.y()),std::abs(p2.z())});
|
CGAL::abs(p2.x()),CGAL::abs(p2.y()),CGAL::abs(p2.z())});
|
||||||
|
|
||||||
Vector v01 = p1 - p0;
|
Vector v01 = p1 - p0;
|
||||||
Vector v02 = p2 - p0;
|
Vector v02 = p2 - p0;
|
||||||
|
|
@ -342,6 +342,7 @@ extract_triangle_data()
|
||||||
|
|
||||||
mTriangle_data.push_back(Triangle_data(lNormalV,lNormalL));
|
mTriangle_data.push_back(Triangle_data(lNormalV,lNormalL));
|
||||||
}
|
}
|
||||||
|
maxBb *= 2.0; // to avoid numerical problems
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class TM, class K>
|
template<class TM, class K>
|
||||||
|
|
@ -659,11 +660,10 @@ add_constraint_if_alpha_compatible(const Vector& Ai,
|
||||||
FT l = CGAL_NTS sqrt(slai);
|
FT l = CGAL_NTS sqrt(slai);
|
||||||
CGAL_SMS_LT_TRACE(3, " l: " << n_to_string(l));
|
CGAL_SMS_LT_TRACE(3, " l: " << n_to_string(l));
|
||||||
|
|
||||||
// Due to double number type, l may have a small value instead of zero (example sum of the faces normals of a tetrahedra for volumic constraint)
|
// Due to double number type, l may have a small value instead of zero (example sum of the face normals of a tetrahedron for volumic constraint)
|
||||||
// if bi is greater than maxBb, we consider that l is zero
|
// if bi is greater than maxBb, we consider that l is zero
|
||||||
CGAL_SMS_LT_TRACE(3, " error consider: " << (std::abs(bi) / (2*maxBb)));
|
CGAL_SMS_LT_TRACE(3, " error consider: " << (CGAL::abs(bi) / maxBb));
|
||||||
if(l > (std::abs(bi) / (2*maxBb)))
|
if(l > (std::abs(bi) / maxBb))
|
||||||
// if(!CGAL_NTS is_zero(l))
|
|
||||||
{
|
{
|
||||||
Vector Ain = Ai / l;
|
Vector Ain = Ai / l;
|
||||||
FT bin = bi / l;
|
FT bin = bi / l;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue