diff --git a/CMakeLists.txt b/CMakeLists.txt index efa919b..14f9b8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,17 @@ cmake_minimum_required(VERSION 3.0.0) project(delaunator VERSION 0.1.0) -set (CMAKE_CXX_STANDARD 17) +set (CMAKE_CXX_STANDARD 14) if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/includes") execute_process(COMMAND bash "-c" "(cd ${CMAKE_CURRENT_SOURCE_DIR} && ./fetch-includes.sh)") endif() -# message("PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}") -add_executable(main src/main.cpp) +add_executable(triangulate src/triangulate.cpp) add_library(delaunator src/delaunator.cpp) -target_include_directories (main PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/includes/rapidjson/include") -target_include_directories (main PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/includes/prettyprint") +target_include_directories (triangulate PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/includes/rapidjson/include") +target_include_directories (triangulate PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/includes/prettyprint") target_include_directories (delaunator PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/includes/rapidjson/include") target_include_directories (delaunator PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/includes/prettyprint") -target_link_libraries(main delaunator) +target_link_libraries(triangulate delaunator) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) -# include(CPack) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9ba9d9e..abad187 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ ], "compilerPath": "/usr/bin/clang", "cStandard": "c11", - "cppStandard": "c++17", + "cppStandard": "c++14", "intelliSenseMode": "clang-x64", "compileCommands": "${workspaceFolder}/build/compile_commands.json" } diff --git a/README.md b/README.md index 9ba9d9e..20fff39 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,44 @@ # delaunator-cpp -**c_cpp_properties.json** +A really fast C++ library for +[Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation) of 2D points. -``` -{ - "configurations": [ - { - "name": "CPP Mac", - "includePath": [ - "${workspaceFolder}/**", - "/usr/include/**" - ], - "defines": [], - "macFrameworkPath": [ - "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks" - ], - "compilerPath": "/usr/bin/clang", - "cStandard": "c11", - "cppStandard": "c++17", - "intelliSenseMode": "clang-x64", - "compileCommands": "${workspaceFolder}/build/compile_commands.json" - } - ], - "version": 4 +delaunator-cpp is a C++ port from https://github.com/mapbox/delaunator a JavaScript implementation of very fast 2D Delaunay algorithm. + +## Features + +* Probably the fastest C++ open source 2D Delaunay implementation +* Roughly 3 times faster then JS version. +* Example showing triangulation of GeoJson points + +## Usage + +```CPP +#include "delaunator.h" +#include + +//... +int main(int, char* argv[]) { + //... + const vector coords = {/* x0, y0, x1, y1, ... */}; + Delaunator delaunator(coords); //triangulation happens here + for(long int i = 0; i < delaunator.triangles.size(); i+=3) { + printf( + "Triangle points: [[%f, %f], [%f, %f], [%f, %f]]\n", + delaunator.coords[2 * delaunator.triangles[i]], //tx0 + delaunator.coords[2 * delaunator.triangles[i] + 1], //ty0 + delaunator.coords[2 * delaunator.triangles[i + 1]], //tx1 + delaunator.coords[2 * delaunator.triangles[i + 1] + 1], //ty1 + delaunator.coords[2 * delaunator.triangles[i + 2]], //tx2 + delaunator.coords[2 * delaunator.triangles[i + 2] + 1], //ty2 + ) + } } -``` \ No newline at end of file +``` + +For full example see `src/triangulate.cpp` + +## TODO + +* Benchmarks +* Unit tests diff --git a/src/delaunator.cpp b/src/delaunator.cpp index c670efa..8600b09 100644 --- a/src/delaunator.cpp +++ b/src/delaunator.cpp @@ -6,7 +6,7 @@ #include #include #include -#include "prettyprint.hpp" +// #include "prettyprint.hpp" #include using namespace std; diff --git a/src/main.cpp b/src/triangulate.cpp similarity index 92% rename from src/main.cpp rename to src/triangulate.cpp index 295383a..fba4dec 100644 --- a/src/main.cpp +++ b/src/triangulate.cpp @@ -1,4 +1,3 @@ -// #include #include "rapidjson/document.h" #include "rapidjson/prettywriter.h" #include "delaunator.h" @@ -8,7 +7,7 @@ #include #include #include -#include "prettyprint.hpp" +// #include "prettyprint.hpp" #include using namespace std; @@ -42,9 +41,7 @@ namespace { const double y = coordinates[1].GetDouble(); coords.push_back(x); coords.push_back(y); - // printf("coordinates %f %f \n", x, y); } - // Points points = {.x_vector = x_vector, .y_vector = y_vector}; return coords; } @@ -115,17 +112,8 @@ int main(int, char* argv[]) { stream.open(output); stream << out_json; stream.close(); - // cout << output << endl; } else { puts(out_json); } - - // cout << output << endl; - // if (sizeof(argv) > 2) { - // puts("ouput to file"); - // } else { - // puts(out_json); - // } return 0; - // cout << delaunator.triangles << endl; }