Skip to content

Commit 71d0993

Browse files
committed
Add helper functions for Point conversion to JS objects and arrays
1 parent 2c9a888 commit 71d0993

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

libnest2d_js/libnest2d_js.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
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

1413
using namespace emscripten;
1514
using namespace libnest2d;
@@ -32,6 +31,23 @@ EMSCRIPTEN_DECLARE_VAL_TYPE(PointList);
3231
EMSCRIPTEN_DECLARE_VAL_TYPE(ItemList);
3332
EMSCRIPTEN_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>
3652
std::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

Comments
 (0)