├── .github
└── workflows
│ ├── conan-package.yml
│ ├── process-pull-request.yml
│ ├── unit-test-post.yml
│ └── unit-test.yml
├── .gitignore
├── CMakeLists.txt
├── LICENSE.txt
├── README.md
├── conandata.yml
├── conanfile.py
├── doc
└── img
│ ├── example.svg
│ └── slic3r_screenshot.png
├── examples
├── CMakeLists.txt
└── main.cpp
├── include
└── libnest2d
│ ├── backends
│ └── clipper
│ │ ├── clipper_polygon.hpp
│ │ └── geometries.hpp
│ ├── common.hpp
│ ├── geometry_traits.hpp
│ ├── geometry_traits_nfp.hpp
│ ├── libnest2d.hpp
│ ├── nester.hpp
│ ├── optimizer.hpp
│ ├── optimizers
│ ├── nlopt
│ │ ├── genetic.hpp
│ │ ├── nlopt_boilerplate.hpp
│ │ ├── simplex.hpp
│ │ └── subplex.hpp
│ └── optimlib
│ │ └── particleswarm.hpp
│ ├── parallel.hpp
│ ├── placers
│ ├── bottomleftplacer.hpp
│ ├── nfpplacer.hpp
│ └── placer_boilerplate.hpp
│ ├── selections
│ ├── djd_heuristic.hpp
│ ├── filler.hpp
│ ├── firstfit.hpp
│ └── selection_boilerplate.hpp
│ └── utils
│ ├── bigint.hpp
│ ├── boost_alg.hpp
│ ├── metaloop.hpp
│ ├── rational.hpp
│ ├── rotcalipers.hpp
│ └── rotfinder.hpp
├── src
└── libnest2d.cpp
├── test_package
├── CMakeLists.txt
├── conanfile.py
└── main.cpp
├── tests
├── CMakeLists.txt
└── test.cpp
└── tools
├── benchmark.h
├── libnfpglue.cpp
├── libnfpglue.hpp
├── libnfporb
├── LICENSE
├── ORIGIN
├── README.md
└── libnfporb.hpp
├── nfp_svgnest.hpp
├── nfp_svgnest_glue.hpp
├── printer_parts.cpp
├── printer_parts.hpp
└── svgtools.hpp
/.github/workflows/conan-package.yml:
--------------------------------------------------------------------------------
1 | name: conan-package
2 |
3 | on:
4 | push:
5 | paths:
6 | - 'src/**'
7 | - 'include/**'
8 | - 'test_package/**'
9 | - 'tests/**'
10 | - 'cmake/**'
11 | - 'conanfile.py'
12 | - 'conandata.yml'
13 | - 'CMakeLists.txt'
14 | - 'requirements.txt'
15 | - '.github/workflows/conan-package.yml'
16 | - '.github/workflows/requirements*'
17 | branches:
18 | - main
19 | - 'CURA-*'
20 | - 'PP-*'
21 | - 'NP-*'
22 | - '[0-9].[0-9]*'
23 | - '[0-9].[0-9][0-9]*'
24 |
25 | jobs:
26 | conan-package:
27 | uses: ultimaker/cura-workflows/.github/workflows/conan-package.yml@main
28 | secrets: inherit
29 |
--------------------------------------------------------------------------------
/.github/workflows/process-pull-request.yml:
--------------------------------------------------------------------------------
1 | name: process-pull-request
2 |
3 | on:
4 | pull_request_target:
5 | types: [opened, reopened, edited, synchronize, review_requested, ready_for_review, assigned]
6 |
7 | jobs:
8 | add_label:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 | - uses: actions-ecosystem/action-add-labels@v1
13 | if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
14 | with:
15 | labels: 'PR: Community Contribution :crown:'
16 |
--------------------------------------------------------------------------------
/.github/workflows/unit-test-post.yml:
--------------------------------------------------------------------------------
1 | name: unit-test-post
2 |
3 | on:
4 | workflow_run:
5 | workflows: [ unit-test ]
6 | types: [ completed ]
7 |
8 | jobs:
9 | publish-test-results:
10 | uses: ultimaker/cura-workflows/.github/workflows/unit-test-post.yml@main
11 | with:
12 | workflow_run_json: ${{ toJSON(github.event.workflow_run) }}
13 | secrets: inherit
14 |
--------------------------------------------------------------------------------
/.github/workflows/unit-test.yml:
--------------------------------------------------------------------------------
1 | name: unit-test
2 |
3 | on:
4 | push:
5 | paths:
6 | - 'src/**'
7 | - 'include/**'
8 | - 'tests'
9 | - 'test_package/**'
10 | - 'tests/**'
11 | - 'cmake/**'
12 | - 'conanfile.py'
13 | - 'conandata.yml'
14 | - 'CMakeLists.txt'
15 | - 'requirements.txt'
16 | - '.github/workflows/unit-test.yml'
17 | - '.github/workflows/requirements*'
18 | branches:
19 | - main
20 | - 'CURA-*'
21 | - 'PP-*'
22 | - 'NP-*'
23 | - '[0-9].[0-9]*'
24 | - '[0-9].[0-9][0-9]*'
25 | pull_request:
26 | paths:
27 | - 'src/**'
28 | - 'include/**'
29 | - 'tests'
30 | - 'test_package/**'
31 | - 'tests/**'
32 | - 'cmake/**'
33 | - 'conanfile.py'
34 | - 'conandata.yml'
35 | - 'CMakeLists.txt'
36 | - 'requirements.txt'
37 | - '.github/workflows/unit-test.yml'
38 | - '.github/workflows/requirements*'
39 | branches:
40 | - main
41 | - 'CURA-*'
42 | - 'PP-*'
43 | - 'NP-*'
44 | - '[0-9].[0-9]*'
45 | - '[0-9].[0-9][0-9]*'
46 |
47 | jobs:
48 | testing:
49 | name: Run unit tests
50 | uses: ultimaker/cura-workflows/.github/workflows/unit-test.yml@main
51 | with:
52 | test_use_ctest: true
53 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ### C++ template
2 | # Prerequisites
3 | *.d
4 |
5 | # Compiled Object files
6 | *.slo
7 | *.lo
8 | *.o
9 | *.obj
10 |
11 | # Precompiled Headers
12 | *.gch
13 | *.pch
14 |
15 | # Compiled Dynamic libraries
16 | *.so
17 | *.dylib
18 | *.dll
19 |
20 | # Fortran module files
21 | *.mod
22 | *.smod
23 |
24 | # Compiled Static libraries
25 | *.lai
26 | *.la
27 | *.a
28 | *.lib
29 |
30 | # Executables
31 | *.exe
32 | *.out
33 | *.app
34 |
35 | ### CMake template
36 | CMakeLists.txt.user
37 | CMakeCache.txt
38 | CMakeFiles
39 | CMakeScripts
40 | Testing
41 | Makefile
42 | cmake_install.cmake
43 | install_manifest.txt
44 | compile_commands.json
45 | CTestTestfile.cmake
46 | _deps
47 |
48 | ### JetBrains template
49 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
50 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
51 |
52 | # User-specific stuff
53 | .idea/**/workspace.xml
54 | .idea/**/tasks.xml
55 | .idea/**/usage.statistics.xml
56 | .idea/**/dictionaries
57 | .idea/**/shelf
58 |
59 | # Generated files
60 | .idea/**/contentModel.xml
61 |
62 | # Sensitive or high-churn files
63 | .idea/**/dataSources/
64 | .idea/**/dataSources.ids
65 | .idea/**/dataSources.local.xml
66 | .idea/**/sqlDataSources.xml
67 | .idea/**/dynamic.xml
68 | .idea/**/uiDesigner.xml
69 | .idea/**/dbnavigator.xml
70 |
71 | # Gradle
72 | .idea/**/gradle.xml
73 | .idea/**/libraries
74 |
75 | # Gradle and Maven with auto-import
76 | # When using Gradle or Maven with auto-import, you should exclude module files,
77 | # since they will be recreated, and may cause churn. Uncomment if using
78 | # auto-import.
79 | # .idea/artifacts
80 | # .idea/compiler.xml
81 | # .idea/jarRepositories.xml
82 | # .idea/modules.xml
83 | # .idea/*.iml
84 | # .idea/modules
85 | # *.iml
86 | # *.ipr
87 |
88 | # CMake
89 | cmake-build-*/
90 |
91 | # Mongo Explorer plugin
92 | .idea/**/mongoSettings.xml
93 |
94 | # File-based project format
95 | *.iws
96 |
97 | # IntelliJ
98 | out/
99 |
100 | # mpeltonen/sbt-idea plugin
101 | .idea_modules/
102 |
103 | # JIRA plugin
104 | atlassian-ide-plugin.xml
105 |
106 | # Cursive Clojure plugin
107 | .idea/replstate.xml
108 |
109 | # Crashlytics plugin (for Android Studio and IntelliJ)
110 | com_crashlytics_export_strings.xml
111 | crashlytics.properties
112 | crashlytics-build.properties
113 | fabric.properties
114 |
115 | # Editor-based Rest Client
116 | .idea/httpRequests
117 |
118 | # Android studio 3.1+ serialized cache file
119 | .idea/caches/build_file_checksums.ser
120 |
121 | .idea/
122 | tmp/*
123 | test_package/build
124 |
125 | CMakeUserPresets.json
126 | conaninfo.txt
127 | conanbuildinfo.txt
128 | conan.lock
129 | build/
130 | graph_info.json
131 | /test_package/deactivate_conanrun.sh
132 | /test_package/nest2d-release-x86_64-data.cmake
133 | /test_package/CMakeFiles/
134 | /test_package/test
135 | /test_package/NLopt-release-x86_64-data.cmake
136 | /test_package/nest2dTargets.cmake
137 | /test_package/.ninja_log
138 | /test_package/BoostConfig.cmake
139 | /test_package/nest2d-Target-release.cmake
140 | /test_package/clipper-config.cmake
141 | /test_package/clipper-config-version.cmake
142 | /test_package/conanrun.sh
143 | /test_package/Boost-Target-release.cmake
144 | /test_package/clipperTargets.cmake
145 | /test_package/CMakePresets.json
146 | /test_package/metadata/
147 | /test_package/NLoptTargets.cmake
148 | /test_package/nest2d-config-version.cmake
149 | /test_package/.ninja_deps
150 | /test_package/NLoptConfigVersion.cmake
151 | /test_package/clipper-Target-release.cmake
152 | /test_package/conandeps_legacy.cmake
153 | /test_package/deactivate_conanbuildenv-release-x86_64.sh
154 | /test_package/BoostTargets.cmake
155 | /test_package/CMakeCache.txt
156 | /test_package/deactivate_conanbuild.sh
157 | /test_package/nest2d-config.cmake
158 | /test_package/conanrunenv-release-x86_64.sh
159 | /test_package/conanbuildenv-release-x86_64.sh
160 | /test_package/clipper-release-x86_64-data.cmake
161 | /test_package/NLoptConfig.cmake
162 | /test_package/Boost-release-x86_64-data.cmake
163 | /test_package/build.ninja
164 | /test_package/cmakedeps_macros.cmake
165 | /test_package/cmake_install.cmake
166 | /test_package/conan_toolchain.cmake
167 | /test_package/BoostConfigVersion.cmake
168 | /test_package/NLopt-Target-release.cmake
169 | /test_package/deactivate_conanrunenv-release-x86_64.sh
170 | /test_package/conanbuild.sh
171 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.20)
2 | cmake_policy(SET CMP0091 NEW)
3 | project(libnest2d)
4 | find_package(standardprojectsettings REQUIRED)
5 |
6 | option(BUILD_SHARED_LIBS "Build shared libs instead of static (applies for dependencies as well)" OFF)
7 | option(HEADER_ONLY "If enabled static library will not be built." ON)
8 | option(ENABLE_TESTING "Build with Google unittest" OFF)
9 | set(GEOMETRIES clipper CACHE STRING "Geometry backend, available options: 'clipper' (default), 'boost'")
10 | set(OPTIMIZER nlopt CACHE STRING "Optimization backend, available options: 'nlopt' (default), 'optimlib'")
11 | set(THREADING std CACHE STRING "Multithreading, available options: 'std' (default), 'tbb', 'omp', 'none'")
12 |
13 | add_library(project_options INTERFACE)
14 | set_project_warnings(project_options)
15 |
16 | set(nest2d_HDRS
17 | include/libnest2d/libnest2d.hpp
18 | include/libnest2d/nester.hpp
19 | include/libnest2d/geometry_traits.hpp
20 | include/libnest2d/geometry_traits_nfp.hpp
21 | include/libnest2d/common.hpp
22 | include/libnest2d/optimizer.hpp
23 | include/libnest2d/parallel.hpp
24 | include/libnest2d/utils/metaloop.hpp
25 | include/libnest2d/utils/rotfinder.hpp
26 | include/libnest2d/utils/rotcalipers.hpp
27 | include/libnest2d/utils/bigint.hpp
28 | include/libnest2d/utils/rational.hpp
29 | include/libnest2d/utils/boost_alg.hpp
30 | include/libnest2d/placers/placer_boilerplate.hpp
31 | include/libnest2d/placers/bottomleftplacer.hpp
32 | include/libnest2d/placers/nfpplacer.hpp
33 | include/libnest2d/selections/selection_boilerplate.hpp
34 | include/libnest2d/selections/filler.hpp
35 | include/libnest2d/selections/firstfit.hpp
36 | include/libnest2d/selections/djd_heuristic.hpp
37 | )
38 |
39 | if("${GEOMETRIES}" STREQUAL "clipper")
40 | find_package(clipper REQUIRED)
41 | find_package(Boost REQUIRED)
42 | target_link_libraries(project_options INTERFACE clipper::clipper boost::boost)
43 | list(APPEND nest2d_HDRS
44 | include/libnest2d/clipper/clipper_polygon.hpp
45 | include/libnest2d/clipper/geometries.hpp
46 | )
47 | elseif("${GEOMETRIES}" STREQUAL "boost")
48 | find_package(Boost REQUIRED)
49 | target_link_libraries(project_options INTERFACE boost::boost)
50 | else()
51 | message(FATAL_ERROR "Unknown GEOMETRIES: ${GEOMETRIES} specified; use one of the following: 'clipper' (default), 'boost'")
52 | endif()
53 | target_compile_definitions(project_options INTERFACE LIBNEST2D_GEOMETRIES_${GEOMETRIES})
54 |
55 | if("${OPTIMIZER}" STREQUAL "nlopt")
56 | find_package(NLopt REQUIRED)
57 | target_link_libraries(project_options INTERFACE NLopt::nlopt)
58 | list(APPEND nest2d_HDRS
59 | include/libnest2d/optimizers/nlopt/simplex.hpp
60 | include/libnest2d/optimizers/nlopt/subplex.hpp
61 | include/libnest2d/optimizers/nlopt/genetic.hpp
62 | include/libnest2d/optimizers/nlopt/nlopt_boilerplate.hpp
63 | )
64 | elseif("${OPTIMIZER}" STREQUAL "optimlib")
65 | find_package(armadillo REQUIRED)
66 | target_link_libraries(project_options INTERFACE armadillo::armadillo)
67 | list(APPEND nest2d_HDRS
68 | include/libnest2d/optimizers/optimlib/particleswarm.hpp
69 | )
70 | else()
71 | message(FATAL_ERROR "Unknown OPTIMIZER: ${OPTIMIZER} specified; use one of the following: 'nlopt' (default), 'optimlib'")
72 | endif()
73 | target_compile_definitions(project_options INTERFACE LIBNEST2D_OPTIMIZER_${OPTIMIZER})
74 |
75 | if("${THREADING}" STREQUAL "std")
76 | use_threads(project_options)
77 | elseif("${THREADING}" STREQUAL "tbb")
78 | find_package(TBB REQUIRED)
79 | target_link_libraries(project_options INTERFACE tbb::tbb)
80 | target_compile_definitions(project_options INTERFACE TBB_USE_CAPTURED_EXCEPTION)
81 | elseif("${THREADING}" STREQUAL "omp")
82 | find_package(OpenMP REQUIRED)
83 | target_link_libraries(project_options INTERFACE OpenMP::OpenMP)
84 | elseif("${THREADING}" STREQUAL "none")
85 | message(WARNING "Compiling without threading support")
86 | else()
87 | message(FATAL_ERROR "Unknown OPTIMIZER: ${OPTIMIZER} specified; use one of the following: 'nlopt' (default), 'optimlib'")
88 | endif()
89 | target_compile_definitions(project_options INTERFACE LIBNEST2D_THREADING_${THREADING})
90 |
91 | set(libnest2d_SRCS
92 | src/libnest2d.cpp
93 | )
94 |
95 | if(HEADER_ONLY)
96 | add_library(nest2d INTERFACE ${libnest2d_HDRS})
97 | target_link_libraries(nest2d INTERFACE project_options)
98 | target_include_directories(nest2d
99 | INTERFACE
100 | $
101 | $
102 | )
103 | else()
104 | if(BUILD_SHARED_LIBS)
105 | add_library(nest2d SHARED ${libnest2d_SRCS} ${libnest2d_HDRS})
106 | if(WIN32)
107 | set_target_properties(nest2d PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
108 | endif()
109 | else()
110 | add_library(nest2d STATIC ${libnest2d_SRCS} ${libnest2d_HDRS})
111 | endif()
112 | target_link_libraries(nest2d PUBLIC project_options)
113 | target_include_directories(nest2d
114 | PUBLIC
115 | $
116 | $
117 | PRIVATE
118 | $
119 | )
120 | endif()
121 |
122 | if(ENABLE_TESTING)
123 | enable_testing()
124 | add_subdirectory(tests)
125 | endif()
126 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 |
9 | This version of the GNU Lesser General Public License incorporates
10 | the terms and conditions of version 3 of the GNU General Public
11 | License, supplemented by the additional permissions listed below.
12 |
13 | 0. Additional Definitions.
14 |
15 | As used herein, "this License" refers to version 3 of the GNU Lesser
16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU
17 | General Public License.
18 |
19 | "The Library" refers to a covered work governed by this License,
20 | other than an Application or a Combined Work as defined below.
21 |
22 | An "Application" is any work that makes use of an interface provided
23 | by the Library, but which is not otherwise based on the Library.
24 | Defining a subclass of a class defined by the Library is deemed a mode
25 | of using an interface provided by the Library.
26 |
27 | A "Combined Work" is a work produced by combining or linking an
28 | Application with the Library. The particular version of the Library
29 | with which the Combined Work was made is also called the "Linked
30 | Version".
31 |
32 | The "Minimal Corresponding Source" for a Combined Work means the
33 | Corresponding Source for the Combined Work, excluding any source code
34 | for portions of the Combined Work that, considered in isolation, are
35 | based on the Application, and not on the Linked Version.
36 |
37 | The "Corresponding Application Code" for a Combined Work means the
38 | object code and/or source code for the Application, including any data
39 | and utility programs needed for reproducing the Combined Work from the
40 | Application, but excluding the System Libraries of the Combined Work.
41 |
42 | 1. Exception to Section 3 of the GNU GPL.
43 |
44 | You may convey a covered work under sections 3 and 4 of this License
45 | without being bound by section 3 of the GNU GPL.
46 |
47 | 2. Conveying Modified Versions.
48 |
49 | If you modify a copy of the Library, and, in your modifications, a
50 | facility refers to a function or data to be supplied by an Application
51 | that uses the facility (other than as an argument passed when the
52 | facility is invoked), then you may convey a copy of the modified
53 | version:
54 |
55 | a) under this License, provided that you make a good faith effort to
56 | ensure that, in the event an Application does not supply the
57 | function or data, the facility still operates, and performs
58 | whatever part of its purpose remains meaningful, or
59 |
60 | b) under the GNU GPL, with none of the additional permissions of
61 | this License applicable to that copy.
62 |
63 | 3. Object Code Incorporating Material from Library Header Files.
64 |
65 | The object code form of an Application may incorporate material from
66 | a header file that is part of the Library. You may convey such object
67 | code under terms of your choice, provided that, if the incorporated
68 | material is not limited to numerical parameters, data structure
69 | layouts and accessors, or small macros, inline functions and templates
70 | (ten or fewer lines in length), you do both of the following:
71 |
72 | a) Give prominent notice with each copy of the object code that the
73 | Library is used in it and that the Library and its use are
74 | covered by this License.
75 |
76 | b) Accompany the object code with a copy of the GNU GPL and this license
77 | document.
78 |
79 | 4. Combined Works.
80 |
81 | You may convey a Combined Work under terms of your choice that,
82 | taken together, effectively do not restrict modification of the
83 | portions of the Library contained in the Combined Work and reverse
84 | engineering for debugging such modifications, if you also do each of
85 | the following:
86 |
87 | a) Give prominent notice with each copy of the Combined Work that
88 | the Library is used in it and that the Library and its use are
89 | covered by this License.
90 |
91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license
92 | document.
93 |
94 | c) For a Combined Work that displays copyright notices during
95 | execution, include the copyright notice for the Library among
96 | these notices, as well as a reference directing the user to the
97 | copies of the GNU GPL and this license document.
98 |
99 | d) Do one of the following:
100 |
101 | 0) Convey the Minimal Corresponding Source under the terms of this
102 | License, and the Corresponding Application Code in a form
103 | suitable for, and under terms that permit, the user to
104 | recombine or relink the Application with a modified version of
105 | the Linked Version to produce a modified Combined Work, in the
106 | manner specified by section 6 of the GNU GPL for conveying
107 | Corresponding Source.
108 |
109 | 1) Use a suitable shared library mechanism for linking with the
110 | Library. A suitable mechanism is one that (a) uses at run time
111 | a copy of the Library already present on the user's computer
112 | system, and (b) will operate properly with a modified version
113 | of the Library that is interface-compatible with the Linked
114 | Version.
115 |
116 | e) Provide Installation Information, but only if you would otherwise
117 | be required to provide such information under section 6 of the
118 | GNU GPL, and only to the extent that such information is
119 | necessary to install and execute a modified version of the
120 | Combined Work produced by recombining or relinking the
121 | Application with a modified version of the Linked Version. (If
122 | you use option 4d0, the Installation Information must accompany
123 | the Minimal Corresponding Source and Corresponding Application
124 | Code. If you use option 4d1, you must provide the Installation
125 | Information in the manner specified by section 6 of the GNU GPL
126 | for conveying Corresponding Source.)
127 |
128 | 5. Combined Libraries.
129 |
130 | You may place library facilities that are a work based on the
131 | Library side by side in a single library together with other library
132 | facilities that are not Applications and are not covered by this
133 | License, and convey such a combined library under terms of your
134 | choice, if you do both of the following:
135 |
136 | a) Accompany the combined library with a copy of the same work based
137 | on the Library, uncombined with any other library facilities,
138 | conveyed under the terms of this License.
139 |
140 | b) Give prominent notice with the combined library that part of it
141 | is a work based on the Library, and explaining where to find the
142 | accompanying uncombined form of the same work.
143 |
144 | 6. Revised Versions of the GNU Lesser General Public License.
145 |
146 | The Free Software Foundation may publish revised and/or new versions
147 | of the GNU Lesser General Public License from time to time. Such new
148 | versions will be similar in spirit to the present version, but may
149 | differ in detail to address new problems or concerns.
150 |
151 | Each version is given a distinguishing version number. If the
152 | Library as you received it specifies that a certain numbered version
153 | of the GNU Lesser General Public License "or any later version"
154 | applies to it, you have the option of following the terms and
155 | conditions either of that published version or of any later version
156 | published by the Free Software Foundation. If the Library as you
157 | received it does not specify a version number of the GNU Lesser
158 | General Public License, you may choose any version of the GNU Lesser
159 | General Public License ever published by the Free Software Foundation.
160 |
161 | If the Library as you received it specifies that a proxy can decide
162 | whether future versions of the GNU Lesser General Public License shall
163 | apply, that proxy's public statement of acceptance of any version is
164 | permanent authorization for you to choose that version for the
165 | Library.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # libnest2d
2 |
3 |