mirror of
https://github.com/jhasse/poly2tri.git
synced 2024-12-03 02:33:30 +01:00
add gsl span support
This commit is contained in:
parent
81612cb108
commit
4a5d11548c
@ -3,6 +3,13 @@ cmake_minimum_required(VERSION 3.12)
|
||||
project(poly2tri LANGUAGES CXX)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
gsl
|
||||
GIT_REPOSITORY https://github.com/microsoft/GSL.git
|
||||
GIT_TAG 1d036585ccea8a57dc5fdc84406181db3d1f3205)
|
||||
FetchContent_MakeAvailable(gsl)
|
||||
|
||||
option(P2T_BUILD_TESTS "Build tests" OFF)
|
||||
option(P2T_BUILD_TESTBED "Build the testbed application" OFF)
|
||||
|
||||
@ -10,6 +17,7 @@ file(GLOB SOURCES poly2tri/common/*.cc poly2tri/sweep/*.cc)
|
||||
file(GLOB HEADERS poly2tri/*.h poly2tri/common/*.h poly2tri/sweep/*.h)
|
||||
add_library(poly2tri ${SOURCES} ${HEADERS})
|
||||
target_include_directories(poly2tri INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_link_libraries(poly2tri PUBLIC GSL)
|
||||
|
||||
get_target_property(poly2tri_target_type poly2tri TYPE)
|
||||
if(poly2tri_target_type STREQUAL SHARED_LIBRARY)
|
||||
|
@ -32,13 +32,13 @@
|
||||
|
||||
namespace p2t {
|
||||
|
||||
CDT::CDT(const std::vector<Point*>& polyline)
|
||||
CDT::CDT(gsl::span<Point> polyline)
|
||||
{
|
||||
sweep_context_ = new SweepContext(polyline);
|
||||
sweep_ = new Sweep;
|
||||
}
|
||||
|
||||
void CDT::AddHole(const std::vector<Point*>& polyline)
|
||||
void CDT::AddHole(gsl::span<Point> polyline)
|
||||
{
|
||||
sweep_context_->AddHole(polyline);
|
||||
}
|
||||
|
@ -35,6 +35,8 @@
|
||||
#include "sweep_context.h"
|
||||
#include "sweep.h"
|
||||
|
||||
#include <gsl/span>
|
||||
|
||||
#include "../common/dll_symbol.h"
|
||||
|
||||
/**
|
||||
@ -54,7 +56,7 @@ public:
|
||||
*
|
||||
* @param polyline
|
||||
*/
|
||||
CDT(const std::vector<Point*>& polyline);
|
||||
explicit CDT(gsl::span<Point> polyline);
|
||||
|
||||
/**
|
||||
* Destructor - clean up memory
|
||||
@ -66,7 +68,7 @@ public:
|
||||
*
|
||||
* @param polyline
|
||||
*/
|
||||
void AddHole(const std::vector<Point*>& polyline);
|
||||
void AddHole(gsl::span<Point> polyline);
|
||||
|
||||
/**
|
||||
* Add a steiner point
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
namespace p2t {
|
||||
|
||||
SweepContext::SweepContext(std::vector<Point*> polyline) : points_(std::move(polyline)),
|
||||
SweepContext::SweepContext(gsl::span<Point> polyline) :
|
||||
front_(nullptr),
|
||||
head_(nullptr),
|
||||
tail_(nullptr),
|
||||
@ -42,14 +42,17 @@ SweepContext::SweepContext(std::vector<Point*> polyline) : points_(std::move(pol
|
||||
af_middle_(nullptr),
|
||||
af_tail_(nullptr)
|
||||
{
|
||||
InitEdges(points_);
|
||||
for (auto& point : polyline) {
|
||||
points_.push_back(&point);
|
||||
}
|
||||
InitEdges(polyline);
|
||||
}
|
||||
|
||||
void SweepContext::AddHole(const std::vector<Point*>& polyline)
|
||||
void SweepContext::AddHole(gsl::span<Point> polyline)
|
||||
{
|
||||
InitEdges(polyline);
|
||||
for (auto i : polyline) {
|
||||
points_.push_back(i);
|
||||
for (auto& point : polyline) {
|
||||
points_.push_back(&point);
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,12 +98,12 @@ void SweepContext::InitTriangulation()
|
||||
|
||||
}
|
||||
|
||||
void SweepContext::InitEdges(const std::vector<Point*>& polyline)
|
||||
void SweepContext::InitEdges(gsl::span<Point> polyline)
|
||||
{
|
||||
size_t num_points = polyline.size();
|
||||
for (size_t i = 0; i < num_points; i++) {
|
||||
size_t j = i < num_points - 1 ? i + 1 : 0;
|
||||
edge_list.push_back(new Edge(*polyline[i], *polyline[j]));
|
||||
edge_list.push_back(new Edge(polyline[i], polyline[j]));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gsl/span>
|
||||
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <cstddef>
|
||||
@ -51,7 +53,7 @@ class SweepContext {
|
||||
public:
|
||||
|
||||
/// Constructor
|
||||
explicit SweepContext(std::vector<Point*> polyline);
|
||||
explicit SweepContext(gsl::span<Point> polyline);
|
||||
/// Destructor
|
||||
~SweepContext();
|
||||
|
||||
@ -82,7 +84,7 @@ Point* GetPoints();
|
||||
|
||||
void RemoveFromMap(Triangle* triangle);
|
||||
|
||||
void AddHole(const std::vector<Point*>& polyline);
|
||||
void AddHole(gsl::span<Point> polyline);
|
||||
|
||||
void AddPoint(Point* point);
|
||||
|
||||
@ -147,7 +149,7 @@ Point* tail_;
|
||||
Node *af_head_, *af_middle_, *af_tail_;
|
||||
|
||||
void InitTriangulation();
|
||||
void InitEdges(const std::vector<Point*>& polyline);
|
||||
void InitEdges(gsl::span<Point> polyline);
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user