diff --git a/.gitmodules b/.gitmodules index 111b48c..f3516a9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "3-Modeling/c++/deps/geometry-central"] path = 3-modeling/c++/deps/geometry-central url = https://github.com/nmwsharp/geometry-central.git +[submodule "4-LaplacianSmoothing/c++/deps/polyscope"] + path = 4-LaplacianSmoothing/c++/deps/polyscope + url = https://github.com/nmwsharp/polyscope.git +[submodule "4-LaplacianSmoothing/c++/deps/geometry-central"] + path = 4-LaplacianSmoothing/c++/deps/geometry-central + url = https://github.com/nmwsharp/geometry-central.git diff --git a/4-LaplacianSmoothing/c++/CMakeLists.txt b/4-LaplacianSmoothing/c++/CMakeLists.txt new file mode 100644 index 0000000..a00cae1 --- /dev/null +++ b/4-LaplacianSmoothing/c++/CMakeLists.txt @@ -0,0 +1,67 @@ +cmake_minimum_required(VERSION 3.12) + +project(CGDI) + + +# Print the build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release" FORCE) +endif() +message(STATUS "cmake build type: ${CMAKE_BUILD_TYPE}") + +### Configure the compiler +# This is a basic, decent setup that should do something sane on most compilers + +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + + # using Clang (linux or apple) or GCC + message("Using clang/gcc compiler flags") + SET(BASE_CXX_FLAGS "-std=c++11 -Wall -Wextra") + SET(DISABLED_WARNINGS " -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations -Wno-missing-braces -Wno-unused-private-field") + SET(TRACE_INCLUDES " -H -Wno-error=unused-command-line-argument") + + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + message("Setting clang-specific options") + SET(BASE_CXX_FLAGS "${BASE_CXX_FLAGS} -ferror-limit=3 -fcolor-diagnostics") + SET(CMAKE_CXX_FLAGS_DEBUG "-g3 -fsanitize=address -fno-limit-debug-info") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + message("Setting gcc-specific options") + SET(BASE_CXX_FLAGS "${BASE_CXX_FLAGS} -fmax-errors=5") + SET(CMAKE_CXX_FLAGS_DEBUG "-g3") + SET(DISABLED_WARNINGS "${DISABLED_WARNINGS} -Wno-maybe-uninitialized -Wno-format-zero-length -Wno-unused-but-set-parameter -Wno-unused-but-set-variable") + endif() + + SET(CMAKE_CXX_FLAGS "${BASE_CXX_FLAGS} ${DISABLED_WARNINGS}") + SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") + +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + # using Visual Studio C++ + message("Using Visual Studio compiler flags") + set(BASE_CXX_FLAGS "${BASE_CXX_FLAGS} /W4") + set(BASE_CXX_FLAGS "${BASE_CXX_FLAGS} /MP") # parallel build + SET(DISABLED_WARNINGS "${DISABLED_WARNINGS} /wd\"4267\"") # ignore conversion to smaller type (fires more aggressively than the gcc version, which is annoying) + SET(DISABLED_WARNINGS "${DISABLED_WARNINGS} /wd\"4244\"") # ignore conversion to smaller type (fires more aggressively than the gcc version, which is annoying) + SET(DISABLED_WARNINGS "${DISABLED_WARNINGS} /wd\"4305\"") # ignore truncation on initialization + SET(CMAKE_CXX_FLAGS "${BASE_CXX_FLAGS} ${DISABLED_WARNINGS}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd") + + add_definitions(/D "_CRT_SECURE_NO_WARNINGS") + add_definitions(-DNOMINMAX) + add_definitions(-D_USE_MATH_DEFINES) +else() + # unrecognized + message( FATAL_ERROR "Unrecognized compiler [${CMAKE_CXX_COMPILER_ID}]" ) +endif() + + +# == Deps +add_subdirectory(deps/geometry-central) +add_subdirectory(deps/polyscope) + +# == Build our project stuff + + +add_executable(displayOBJ displayOBJ) +target_link_libraries(displayOBJ polyscope geometry-central) + diff --git a/4-LaplacianSmoothing/c++/deps/geometry-central b/4-LaplacianSmoothing/c++/deps/geometry-central new file mode 160000 index 0000000..954e993 --- /dev/null +++ b/4-LaplacianSmoothing/c++/deps/geometry-central @@ -0,0 +1 @@ +Subproject commit 954e9933a4be27637904b02a2f2fe1cae756e3f9 diff --git a/4-LaplacianSmoothing/c++/deps/polyscope b/4-LaplacianSmoothing/c++/deps/polyscope new file mode 160000 index 0000000..873e700 --- /dev/null +++ b/4-LaplacianSmoothing/c++/deps/polyscope @@ -0,0 +1 @@ +Subproject commit 873e700f22ff1ef91689980a53cbb403c79636bf diff --git a/4-LaplacianSmoothing/c++/displayOBJ.cpp b/4-LaplacianSmoothing/c++/displayOBJ.cpp new file mode 100644 index 0000000..ab7160b --- /dev/null +++ b/4-LaplacianSmoothing/c++/displayOBJ.cpp @@ -0,0 +1,33 @@ +#include "geometrycentral/surface/manifold_surface_mesh.h" +#include "geometrycentral/surface/meshio.h" +#include "geometrycentral/surface/vertex_position_geometry.h" + +#include "polyscope/polyscope.h" +#include "polyscope/surface_mesh.h" + +using namespace geometrycentral; +using namespace geometrycentral::surface; + +// == Geometry-central data +std::unique_ptr mesh; +std::unique_ptr geometry; + +int main(int argc, char **argv) { + + // Initialize polyscope + polyscope::init(); + + // Load mesh + std::tie(mesh, geometry) = readManifoldSurfaceMesh(argv[1]); + + // Register the mesh with polyscope + polyscope::registerSurfaceMesh("Input obj", + geometry->inputVertexPositions, + mesh->getFaceVertexList(), + polyscopePermutations(*mesh)); + + // Give control to the polyscope gui + polyscope::show(); + + return EXIT_SUCCESS; +} diff --git a/4-LaplacianSmoothing/python/testPyGEL.py b/4-LaplacianSmoothing/python/testPyGEL.py new file mode 100644 index 0000000..f2eea30 --- /dev/null +++ b/4-LaplacianSmoothing/python/testPyGEL.py @@ -0,0 +1,31 @@ +import polyscope +import numpy as np +from pygel3d import hmesh + +m = hmesh.load("../cube.obj") +print(m.positions()) + +faces = m.faces() + +## Old school +allfaces=[] +for f in faces: + face=[] + for v in m.circulate_face(f): + face.append(v) + allfaces = allfaces + [face] + +## Fancy version +allfaces2 = [[v for v in m.circulate_face(f)] for f in faces] + +polyscope.init() + +#Display the vertices as point cloud +polyscope.register_point_cloud("data", m.positions()) + +#Display the vertices as mesh +polyscope.register_surface_mesh("data mesh", m.positions(), allfaces) +#Display the vertices as mesh +polyscope.register_surface_mesh("data mesh2", m.positions(), allfaces2) + +polyscope.show()