diff --git a/.gitmodules b/.gitmodules index 8c7b45d2..f25e657c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -52,3 +52,6 @@ [submodule "modules/box2d"] path = modules/box2d url = https://github.com/erincatto/box2d +[submodule "modules/pnpoly.h"] + path = modules/pnpoly.h + url = https://github.com/BlackMATov/pnpoly.h diff --git a/modules/pnpoly.h b/modules/pnpoly.h new file mode 160000 index 00000000..6a55491c --- /dev/null +++ b/modules/pnpoly.h @@ -0,0 +1 @@ +Subproject commit 6a55491c4c791ea08404e5966e8e0104bf1b90c1 diff --git a/scripts/cloc_all.sh b/scripts/cloc_all.sh index 866dfa4c..42b3bdee 100755 --- a/scripts/cloc_all.sh +++ b/scripts/cloc_all.sh @@ -16,5 +16,6 @@ cloc \ $SCRIPT_DIR/../modules/enum.hpp/untests \ $SCRIPT_DIR/../modules/flat.hpp/headers \ $SCRIPT_DIR/../modules/flat.hpp/untests \ + $SCRIPT_DIR/../modules/pnpoly.h \ $SCRIPT_DIR/../modules/promise.hpp/headers \ $SCRIPT_DIR/../modules/promise.hpp/untests diff --git a/scripts/cloc_engine.sh b/scripts/cloc_engine.sh index e7d31dbd..5d0c65dd 100755 --- a/scripts/cloc_engine.sh +++ b/scripts/cloc_engine.sh @@ -8,4 +8,5 @@ cloc \ $SCRIPT_DIR/../modules/ecs.hpp/headers \ $SCRIPT_DIR/../modules/enum.hpp/headers \ $SCRIPT_DIR/../modules/flat.hpp/headers \ + $SCRIPT_DIR/../modules/pnpoly.h \ $SCRIPT_DIR/../modules/promise.hpp/headers diff --git a/scripts/cloc_modules.sh b/scripts/cloc_modules.sh index 7fba43c1..8567dd38 100755 --- a/scripts/cloc_modules.sh +++ b/scripts/cloc_modules.sh @@ -10,5 +10,6 @@ cloc \ $SCRIPT_DIR/../modules/enum.hpp/untests \ $SCRIPT_DIR/../modules/flat.hpp/headers \ $SCRIPT_DIR/../modules/flat.hpp/untests \ + $SCRIPT_DIR/../modules/pnpoly.h \ $SCRIPT_DIR/../modules/promise.hpp/headers \ $SCRIPT_DIR/../modules/promise.hpp/untests diff --git a/scripts/update_modules.sh b/scripts/update_modules.sh index b27ac858..4edb3649 100755 --- a/scripts/update_modules.sh +++ b/scripts/update_modules.sh @@ -105,6 +105,9 @@ cp -fv $MODULES_DIR/miniz/miniz_tinfl.h $SOURCES_RDPARTY_DIR/miniz/miniz_tinfl.h cp -fv $MODULES_DIR/miniz/miniz_zip.c $SOURCES_RDPARTY_DIR/miniz/miniz_zip.c cp -fv $MODULES_DIR/miniz/miniz_zip.h $SOURCES_RDPARTY_DIR/miniz/miniz_zip.h +mkdir -p $SOURCES_RDPARTY_DIR/pnpoly.h +cp -fv $MODULES_DIR/pnpoly.h/pnpoly.h $SOURCES_RDPARTY_DIR/pnpoly.h/pnpoly.h + mkdir -p $HEADERS_RDPARTY_DIR/pugixml cp -rfv $MODULES_DIR/pugixml/src/. $HEADERS_RDPARTY_DIR/pugixml/ diff --git a/sources/3rdparty/pnpoly.h/pnpoly.h b/sources/3rdparty/pnpoly.h/pnpoly.h new file mode 100644 index 00000000..a2d43e9c --- /dev/null +++ b/sources/3rdparty/pnpoly.h/pnpoly.h @@ -0,0 +1,77 @@ +/******************************************************************************* + * + * PNPOLY_INCLUDE_H + * + ******************************************************************************/ + +#ifndef PNPOLY_INCLUDE_H +#define PNPOLY_INCLUDE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef PNPOLY_DEF +# ifdef PNPOLY_STATIC +# define PNPOLY_DEF static +# else +# define PNPOLY_DEF extern +# endif +#endif + +PNPOLY_DEF int pnpoly(int nvert, const float *vertx, const float *verty, float testx, float testy); + +#ifdef __cplusplus +} +#endif + +#endif // PNPOLY_INCLUDE_H + +/******************************************************************************* + * + * PNPOLY_IMPLEMENTATION + * + ******************************************************************************/ + +#ifdef PNPOLY_IMPLEMENTATION + +PNPOLY_DEF int pnpoly(int nvert, const float *vertx, const float *verty, float testx, float testy) +{ + int i, j, c = 0; + for (i = 0, j = nvert-1; i < nvert; j = i++) { + if ( ((verty[i]>testy) != (verty[j]>testy)) && + (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) ) + c = !c; + } + return c; +} + +#endif // PNPOLY_IMPLEMENTATION + +/* +Copyright (c) 1970-2003, Wm. Randolph Franklin +Copyright (c) 2020, by Matvey Cherevko (blackmatov@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimers. +2. Redistributions in binary form must reproduce the above copyright notice in + the documentation and/or other materials provided with the distribution. +3. The name of W. Randolph Franklin may not be used to endorse or promote + products derived from this Software without specific prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +