Skip to content

Commit d7d99bb

Browse files
Merge pull request #88 from MariusCausemann/igl_fast_winding
Use IGL's fast winding number, and control IGL threading
2 parents 02f3d9f + 885908a commit d7d99bb

File tree

5 files changed

+15
-60
lines changed

5 files changed

+15
-60
lines changed

src/MeshImprovement.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include <floattetwild/VertexSmoothing.h>
1616
#include <floattetwild/Parameters.h>
1717
#include <floattetwild/MeshIO.hpp>
18-
#include <floattetwild/FastWindingNumber.hpp>
1918
#include <floattetwild/CSGTreeParser.hpp>
2019

2120
//#include <floattetwild/FloatTetCutting.h>
@@ -26,6 +25,7 @@
2625

2726
#include <igl/Timer.h>
2827
#include <igl/winding_number.h>
28+
#include <igl/fast_winding_number.h>
2929

3030
#include <floattetwild/MshLoader.h>
3131
#include <geogram/mesh/mesh_AABB.h>
@@ -1472,7 +1472,7 @@ void floatTetWild::boolean_operation(Mesh& mesh, const json& csg_tree_with_ids,
14721472
get_tracked_surface(mesh, vs, fs, i);
14731473

14741474
if (!mesh.params.use_general_wn)
1475-
floatTetWild::fast_winding_number(
1475+
igl::fast_winding_number(
14761476
Eigen::MatrixXd(vs.cast<double>()), Eigen::MatrixXi(fs), C, w[i]);
14771477
else
14781478
igl::winding_number(
@@ -1506,13 +1506,13 @@ void floatTetWild::boolean_operation(Mesh& mesh, const json& csg_tree_with_ids,
15061506
fs.row(k) = Fs[i][k];
15071507

15081508
if (!mesh.params.use_general_wn)
1509-
floatTetWild::fast_winding_number(
1509+
igl::fast_winding_number(
15101510
Eigen::MatrixXd(vs.cast<double>()), Eigen::MatrixXi(fs), C, w[i]);
15111511
else
15121512
igl::winding_number(
15131513
Eigen::MatrixXd(vs.cast<double>()), Eigen::MatrixXi(fs), C, w[i]);
1514+
}
15141515
}
1515-
}
15161516

15171517
boolean_operation(mesh, csg_tree_with_ids, w);
15181518
}
@@ -1530,7 +1530,7 @@ void floatTetWild::boolean_operation(Mesh& mesh, const json &csg_tree_with_ids,
15301530
auto &t = mesh.tets[t_id];
15311531
if(t.is_removed)
15321532
continue;
1533-
1533+
15341534
bool keep = CSGTreeParser::keep_tet(csg_tree_with_ids, cnt, w);
15351535
t.is_removed = !keep;
15361536
int tid = 0;
@@ -1573,8 +1573,8 @@ void floatTetWild::boolean_operation(Mesh& mesh, int op){
15731573

15741574
Eigen::VectorXd w1, w2;
15751575
if(!mesh.params.use_general_wn) {
1576-
floatTetWild::fast_winding_number(Eigen::MatrixXd(v1.cast<double>()), Eigen::MatrixXi(f1), C, w1);
1577-
floatTetWild::fast_winding_number(Eigen::MatrixXd(v2.cast<double>()), Eigen::MatrixXi(f2), C, w2);
1576+
igl::fast_winding_number(Eigen::MatrixXd(v1.cast<double>()), Eigen::MatrixXi(f1), C, w1);
1577+
igl::fast_winding_number(Eigen::MatrixXd(v2.cast<double>()), Eigen::MatrixXi(f2), C, w2);
15781578
}else {
15791579
igl::winding_number(Eigen::MatrixXd(v1.cast<double>()), Eigen::MatrixXi(f1), C, w1);
15801580
igl::winding_number(Eigen::MatrixXd(v2.cast<double>()), Eigen::MatrixXi(f2), C, w2);
@@ -1630,7 +1630,7 @@ void floatTetWild::filter_outside(Mesh& mesh, bool invert_faces) {
16301630
F.col(2) = tmp;
16311631
}
16321632
if(!mesh.params.use_general_wn)
1633-
floatTetWild::fast_winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
1633+
igl::fast_winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
16341634
else
16351635
igl::winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
16361636

@@ -1707,7 +1707,7 @@ void floatTetWild::filter_outside(Mesh& mesh, const std::vector<Vector3> &input_
17071707
// F.col(2) = tmp;
17081708
// }
17091709
if(!mesh.params.use_general_wn)
1710-
floatTetWild::fast_winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
1710+
igl::fast_winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
17111711
else
17121712
igl::winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
17131713

@@ -1821,7 +1821,7 @@ void floatTetWild::mark_outside(Mesh& mesh, bool invert_faces){
18211821
}
18221822
Eigen::VectorXd W;
18231823
if(!mesh.params.use_general_wn)
1824-
floatTetWild::fast_winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
1824+
igl::fast_winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
18251825
else
18261826
igl::winding_number(Eigen::MatrixXd(V.cast<double>()), Eigen::MatrixXi(F), C, W);
18271827

src/external/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ else()
5454
bfs_orient.h
5555
bfs_orient.cpp
5656

57-
FastWindingNumber.hpp
58-
FastWindingNumber.cpp
59-
6057
Rational.h
6158
)
6259
endif()

src/external/FastWindingNumber.cpp

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/external/FastWindingNumber.hpp

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/main.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
#include <igl/Timer.h>
3232
#include <igl/write_triangle_mesh.h>
33+
#include "igl/default_num_threads.h"
34+
3335

3436
#ifdef LIBIGL_WITH_TETGEN
3537
#include <igl/copyleft/tetgen/tetrahedralize.h>
@@ -283,6 +285,9 @@ int main(int argc, char** argv)
283285
std::cout << "TBB threads " << num_threads << std::endl;
284286
tbb::global_control parallelism_limit(tbb::global_control::max_allowed_parallelism, num_threads);
285287
tbb::global_control stack_size_limit(tbb::global_control::thread_stack_size, stack_size);
288+
// IGL has issues with a nested for loop and oversubscription, see
289+
// https://github.com/libigl/libigl/issues/2412
290+
igl::default_num_threads(std::ceil(std::sqrt(num_threads)));
286291
#endif
287292

288293
// if(params.is_quiet){

0 commit comments

Comments
 (0)