Commit 8f018b62 authored by Teseo Schneider's avatar Teseo Schneider
Browse files

added fast wn wrapper

parent 82d6fae0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -122,6 +122,7 @@ target_link_libraries(${PROJECT_NAME}
		geogram::geogram
		spdlog::spdlog
		Threads::Threads
		fast_winding_number
)
if(FLOAT_TETWILD_ENABLE_TBB)
	target_link_libraries(${PROJECT_NAME} PUBLIC tbb::tbb)
+27 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ if(NOT TARGET geogram::geogram)
	include(geogram)
endif()


# TBB
if(FLOAT_TETWILD_ENABLE_TBB AND NOT TARGET tbb::tbb)
	float_tetwild_download_tbb()
@@ -80,3 +81,29 @@ endif()

# C++11 threads
find_package(Threads REQUIRED)



# winding number
float_tetwild_download_windingnumber()
set(windingnumber_SOURCES
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/SYS_Math.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/SYS_Types.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_Array.cpp
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_Array.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_ArrayImpl.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_BVH.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_BVHImpl.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_FixedVector.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_ParallelUtil.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_SmallArray.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_SolidAngle.cpp
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/UT_SolidAngle.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/VM_SIMD.h
	${FLOAT_TETWILD_EXTERNAL}/windingnumber/VM_SSEFunc.h
)

add_library(fast_winding_number ${windingnumber_SOURCES})
target_link_libraries(fast_winding_number PRIVATE tbb::tbb)
target_compile_features(fast_winding_number PRIVATE ${CXX17_FEATURES})
target_include_directories(fast_winding_number PUBLIC "${FLOAT_TETWILD_EXTERNAL}/")
+8 −0
Original line number Diff line number Diff line
@@ -103,3 +103,11 @@ function(float_tetwild_download_aabbcc)
            GIT_TAG        0c85e61362d384d70c71946826bfed0fb24a74ba
            )
endfunction()

## winding number
function(float_tetwild_download_windingnumber)
    float_tetwild_download_project(windingnumber
            GIT_REPOSITORY https://github.com/alecjacobson/WindingNumber.git
            GIT_TAG        1e6081e52905575d8e98fb8b7c0921274a18752f
            )
endfunction()
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ set(SOURCES

	bfs_orient.h
	bfs_orient.cpp

	FastWindingNumber.hpp
	FastWindingNumber.cpp
)

prepend_current_path(SOURCES)
+42 −0
Original line number Diff line number Diff line
#include <floattetwild/FastWindingNumber.hpp>

#include <igl/parallel_for.h>

#include <windingnumber/UT_SolidAngle.h>

#include <cstdlib>



namespace floatTetWild {

void fast_winding_number(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, const Eigen::MatrixXd &P, Eigen::VectorXd &W)
{
    Eigen::Matrix<int,Eigen::Dynamic,3,Eigen::RowMajor> F_copy = F;

    HDK_Sample::UT_SolidAngle<float,float> solid_angle;

    int order = 2;
    double accuracy_scale = 2.0;

    std::vector<HDK_Sample::UT_Vector3T<float> > U(V.rows());
    for(int i = 0;i<V.rows();i++) {
        for(int j = 0;j<3;j++){
            U[i][j] = V(i,j);
        }
    }

    solid_angle.init(F_copy.rows(), F_copy.data(), V.rows(), &U[0], order);

    W.resize(P.rows());

    //for(int p = 0;p<P.rows();p++)
    igl::parallel_for(P.rows(),[&](int p) {
        HDK_Sample::UT_Vector3T<float>Pp;
        Pp[0] = P(p,0);
        Pp[1] = P(p,1);
        Pp[2] = P(p,2);
        W(p) = solid_angle.computeSolidAngle(Pp, accuracy_scale)/ (4.0*M_PI);
    } ,1000);
}
}
 No newline at end of file
Loading