diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6893075 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "3-Modeling/c++/deps/polyscope"] + path = 3-Modeling/c++/deps/polyscope + url = https://github.com/nmwsharp/polyscope.git diff --git a/3-modeling/c++/CMakeLists.txt b/3-modeling/c++/CMakeLists.txt new file mode 100644 index 0000000..49bc5dd --- /dev/null +++ b/3-modeling/c++/CMakeLists.txt @@ -0,0 +1,70 @@ +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/polyscope) + +# == Build our project stuff + +set(SRCS + simpleTest.cpp + # add any other source files here +) + +# To change the name of your executable, change "gc_project" in the lines below to whatever you want +add_executable(simpleTest "${SRCS}") +target_link_libraries(simpleTest polyscope) diff --git a/3-modeling/c++/deps/polyscope b/3-modeling/c++/deps/polyscope new file mode 160000 index 0000000..047dd98 --- /dev/null +++ b/3-modeling/c++/deps/polyscope @@ -0,0 +1 @@ +Subproject commit 047dd980715c590f7720715c94a4382802c4e116 diff --git a/3-modeling/c++/simppleTest.cpp b/3-modeling/c++/simppleTest.cpp new file mode 100644 index 0000000..c62731b --- /dev/null +++ b/3-modeling/c++/simppleTest.cpp @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include +#include "polyscope/polyscope.h" +#include "polyscope/point_cloud.h" + +#include "deps/CLI11.hpp" + +void processFile(const std::string &filename, + const std::vector &vectorCols) +{ + std::vector> pc; + std::vector> alldata; + std::ifstream ifs(filename); + double x,y,z; + std::string line; + while(std::getline(ifs, line)) + { + std::stringstream linestream(line); + std::vector data; + auto i=0; + while(linestream.good()) + { + double v; + linestream >> v; + data.push_back(v); + ++i; + } + pc.push_back({data[0],data[1],data[2]}); + alldata.push_back(data); + } + std::cout< scalars; + for(auto i=0u; i < alldata.size(); ++i) + scalars.push_back(alldata[i][col]); + ps->addScalarQuantity("Scalar col"+std::to_string(col), scalars); + } + else + { + std::vector> V; + for(auto i=0u; i < alldata.size(); ++i) + V.push_back({alldata[i][col],alldata[i][col+1],alldata[i][col+2]}); + ps->addVectorQuantity("Vector col"+std::to_string(col), V); + col +=2; + } + } +} + +int main(int argc, char **argv) +{ + CLI::App app{"displayPTS"}; + std::vector filenames; + app.add_option("-i,--input,1", filenames, "Input point clouds") + ->required(); + std::vector vectorCols; + app.add_option("--vectorCols", vectorCols, "Indices of columns to group as vectors (col col+1 col+2)"); + CLI11_PARSE(app,argc,argv); + + auto errorMSG=[&](const size_t vi, const size_t vj){ + std::cout<<"Error while parsing the vectorCols: "; + std::cout<<"("<