diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 583312c..40f901d 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -31,44 +31,35 @@ endif() add_subdirectory(deps) - add_subdirectory(deps/glfw-3.4) - +# --------- GLAD (global) --------- +add_library(glad STATIC ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/src/glad.c) +target_include_directories(glad PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include) +# --------- VIEWER Lib (separat → nur bei src/viewer/* Änderung gebaut!) --------- +add_library(VIEWER STATIC src/viewer/simple_viewer.cpp) +target_include_directories(VIEWER PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-2.6.0/include + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include + ${CMAKE_CURRENT_SOURCE_DIR}/deps/eigen-3.4.0/ +) +target_link_libraries(viewer PUBLIC glad glfw) # --------- Executable --------- -add_executable(${PROJECT_NAME} src/apps/v0/conformallab_cli.cpp ) - +add_executable(${PROJECT_NAME} src/apps/v0/conformallab_cli.cpp) target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE - - ${CMAKE_CURRENT_SOURCE_DIR}/deps/single_includes ${CMAKE_CURRENT_SOURCE_DIR}/deps/eigen-3.4.0/ ${CMAKE_CURRENT_SOURCE_DIR}/deps/CGAL-6.1.1/include ${CMAKE_CURRENT_SOURCE_DIR}/deps/boost_1_90_0/ - ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-2.6.0/include - ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include -) -target_include_directories(${PROJECT_NAME} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/include -) -add_library(glad STATIC - ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/src/glad.c -) -target_include_directories(glad PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-glad/include + ${CMAKE_CURRENT_SOURCE_DIR}/deps/libigl-2.6.0/include # Core libigl ) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) +#-------- Compiler-Definitionen --------- +target_compile_definitions(${PROJECT_NAME} PRIVATE CGAL_DISABLE_GMP CGAL_DISABLE_MPFR) +target_link_libraries(${PROJECT_NAME} PRIVATE viewer) +#--------- Output-Ordner --------- +set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) -target_compile_definitions(${PROJECT_NAME} PRIVATE - CGAL_DISABLE_GMP - CGAL_DISABLE_MPFR -) -# Output-Ordner -set_target_properties(${PROJECT_NAME} PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin - -) -target_link_libraries(${PROJECT_NAME} - PRIVATE glad glfw -) diff --git a/code/include/example_include.hpp b/code/include/example_include.hpp deleted file mode 100644 index f62204e..0000000 --- a/code/include/example_include.hpp +++ /dev/null @@ -1,7 +0,0 @@ -//exmaple include hedder -#ifndef EXAMPLE_INCLUDE_HPP -#define EXAMPLE_INCLUDE_HPP - - - -#endif // EXAMPLE_INCLUDE_HPP \ No newline at end of file diff --git a/code/include/simple_visualize.h b/code/include/mesh_utils.hpp similarity index 68% rename from code/include/simple_visualize.h rename to code/include/mesh_utils.hpp index 5ae7e19..fc4e936 100644 --- a/code/include/simple_visualize.h +++ b/code/include/mesh_utils.hpp @@ -1,15 +1,16 @@ #pragma once #include #include -#include #include namespace mesh_utils { - template void cgal_to_eigen(CGAL::Surface_mesh& mesh, Eigen::MatrixXd& V, Eigen::MatrixXi& F) { + + CGAL::Polygon_mesh_processing::triangulate_faces(mesh); + V.resize(mesh.num_vertices(), 3); F.resize(mesh.num_faces(), 3); @@ -17,7 +18,7 @@ void cgal_to_eigen(CGAL::Surface_mesh& mesh, auto p = mesh.point(v); V.row(v.idx()) << p.x(), p.y(), p.z(); } - + Eigen::Index face_idx = 0; for (auto f : mesh.faces()) { int vertex_count = 0; @@ -29,29 +30,12 @@ void cgal_to_eigen(CGAL::Surface_mesh& mesh, face_idx++; } } - template -void simple_visualize_mesh( CGAL::Surface_mesh& mesh, bool triangulate = true) { - if(!CGAL::is_triangle_mesh(mesh)) { - std::cerr << "Warning: Mesh is not triangulated. Visualizer expects triangles.\n"; - - - if(triangulate){ - std::cout << "Triangulating mesh for visualization...\n"; - CGAL::Polygon_mesh_processing::triangulate_faces(mesh); - } - else{ - std::cout << " exit without visualizetion.\n"; - return; - } - } - Eigen::MatrixXd V; Eigen::MatrixXi F; - cgal_to_eigen(mesh, V, F); +void simple_visualize_mesh(Eigen::MatrixXd& V, Eigen::MatrixXi& F) { igl::opengl::glfw::Viewer viewer; viewer.data().set_mesh(V, F); viewer.launch(); } - // Zero-Copy Map für V (optional) template Eigen::Map> @@ -60,5 +44,4 @@ get_vertex_map(CGAL::Surface_mesh& mesh) { double* data = reinterpret_cast(&points[0][0]); return {data, static_cast(points.size()), 3}; } - } // namespace diff --git a/code/include/viewer_utils.h b/code/include/viewer_utils.h new file mode 100644 index 0000000..4140d11 --- /dev/null +++ b/code/include/viewer_utils.h @@ -0,0 +1,11 @@ +#pragma once + +#include +#include + +namespace viewer_utils { + +// Deklaration (Implementation in viewer.cpp) +void simple_visualize(Eigen::MatrixXd& V, Eigen::MatrixXi& F); + +} \ No newline at end of file diff --git a/code/src/apps/v0/conformallab_cli.cpp b/code/src/apps/v0/conformallab_cli.cpp index b06486d..e404966 100644 --- a/code/src/apps/v0/conformallab_cli.cpp +++ b/code/src/apps/v0/conformallab_cli.cpp @@ -1,7 +1,9 @@ #include #include #include -#include "simple_visualize.h" + +#include "viewer_utils.h" +#include "mesh_utils.hpp" #include @@ -23,7 +25,7 @@ bool parse_arguments(int argc, char* argv[], std::string& input_file, std::strin CLI::App app{"demo of conformallab"}; app.add_option("-i,--input", input_file, "Input OFF file")->required(); app.add_option("-o,--output", output_file, "Output OFF file (optional)"); - app.add_flag("-s,--show", show, "Show the input mesh in a viewer"); + app.add_flag("-s,--show", show, "Show the input mesh in a viewer "); app.add_flag("-v,--verbose",verbose, "Enable verbose output"); app.set_help_flag("-h,--help", "Show this help message and exit"); @@ -83,7 +85,12 @@ int main(int argc, char* argv[]) // CGAL -> libigl if(show){ std::cout << "Visualizing input mesh...\n"; - mesh_utils::simple_visualize_mesh(surface_mesh,true); + Eigen::MatrixXd V; + Eigen::MatrixXi F; + + mesh_utils::cgal_to_eigen(surface_mesh, V, F); + viewer_utils::simple_visualize(V, F); + } // for now, we just write the input mesh to the output file as a placeholder diff --git a/code/src/viewer/simple_viewer.cpp b/code/src/viewer/simple_viewer.cpp new file mode 100644 index 0000000..c15d14b --- /dev/null +++ b/code/src/viewer/simple_viewer.cpp @@ -0,0 +1,9 @@ +#include "viewer_utils.h" + +namespace viewer_utils { + void simple_visualize(Eigen::MatrixXd& V, Eigen::MatrixXi& F) { + igl::opengl::glfw::Viewer viewer; + viewer.data().set_mesh(V, F); + viewer.launch(); + } +}