99#include < emscripten/val.h>
1010#include < libnest2d/backends/clipper/geometries.hpp>
1111#include < libnest2d/placers/bottomleftplacer.hpp>
12- #include < libnest2d/optimizers/nlopt/subplex.hpp>
1312
1413using namespace emscripten ;
1514using namespace libnest2d ;
@@ -32,6 +31,23 @@ EMSCRIPTEN_DECLARE_VAL_TYPE(PointList);
3231EMSCRIPTEN_DECLARE_VAL_TYPE (ItemList);
3332EMSCRIPTEN_DECLARE_VAL_TYPE (DoubleList);
3433
34+ // Helper function to convert a Point to a JavaScript object
35+ // Helper function to convert a Point to a JavaScript object
36+ emscripten::val pointToJSObject (const Point& point) {
37+ emscripten::val obj = emscripten::val::object ();
38+ obj.set (" x" , getX (point));
39+ obj.set (" y" , getY (point));
40+ return obj;
41+ }
42+
43+ // Helper function to convert a vector of Points to a JavaScript array
44+ emscripten::val pointVectorToJSArray (const std::vector<Point>& points) {
45+ emscripten::val jsArray = emscripten::val::array ();
46+ for (size_t i = 0 ; i < points.size (); ++i) {
47+ jsArray.set (i, pointToJSObject (points[i]));
48+ }
49+ return jsArray;
50+ }
3551// Helper function to convert JavaScript arrays to std::vector<Point>
3652std::vector<Point> jsArrayToPointVector (const emscripten::val& jsArray) {
3753 std::vector<Point> vertices;
@@ -69,7 +85,7 @@ size_t nestWrapper(ItemList jsItems, const Box& bin, long distance = 1, const Nf
6985 NestConfig<> nestConfig (config);
7086
7187 // Call the nest function
72- size_t result = nest (items, bin, distance, nestConfig );
88+ size_t result = nest (items, bin);
7389
7490 // Copy results back to original JavaScript items
7591 for (size_t i = 0 ; i < items.size () && i < length; ++i) {
@@ -164,7 +180,11 @@ EMSCRIPTEN_BINDINGS(libnest2d_js) {
164180 .function (" markAsFixedInBin" , &Item::markAsFixedInBin)
165181 .function (" markAsDisallowedAreaInBin" , &Item::markAsDisallowedAreaInBin)
166182 .function (" priority" , select_overload<int () const >(&Item::priority))
167- .function (" setPriority" , select_overload<void (int )>(&Item::priority));
183+ .function (" setPriority" , select_overload<void (int )>(&Item::priority))
184+ .function (" transformedShape" , optional_override ([](const Item& self) {
185+ const auto & poly = self.transformedShape ();
186+ return pointVectorToJSArray (poly.Contour );
187+ }));
168188
169189 // Polygon class for internal type compatibility
170190 class_<Polygon>(" Polygon" );
0 commit comments