Skip to content

Commit b23997e

Browse files
committed
Use point list over custom js type point list
NP-1172
1 parent fe819ee commit b23997e

File tree

1 file changed

+7
-38
lines changed

1 file changed

+7
-38
lines changed

libnest2d_js/libnest2d_js.cpp

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -32,45 +32,12 @@ EMSCRIPTEN_DECLARE_VAL_TYPE(ItemList);
3232
EMSCRIPTEN_DECLARE_VAL_TYPE(DoubleList);
3333
EMSCRIPTEN_DECLARE_VAL_TYPE(ResultAndItem);
3434

35-
36-
// Helper function to convert a Point to a JavaScript object
37-
emscripten::val pointToJSObject(const Point& point) {
38-
emscripten::val obj = emscripten::val::object();
39-
obj.set("x", long{ static_cast<long>(getX(point)) } );
40-
obj.set("y", long{ static_cast<long>(getY(point)) } );
41-
return obj;
42-
}
43-
4435
ResultAndItem resultAndItems(const size_t result, const ItemList& items) {
4536
emscripten::val obj = emscripten::val::object();
4637
obj.set("result", result);
4738
obj.set("items", items);
4839
return ResultAndItem { obj };
4940
}
50-
// Helper function to convert a vector of Points to a JavaScript array
51-
emscripten::val pointVectorToJSArray(const std::vector<Point>& points) {
52-
emscripten::val jsArray = emscripten::val::array();
53-
for (size_t i = 0; i < points.size(); ++i) {
54-
jsArray.set(i, pointToJSObject(points[i]));
55-
}
56-
return jsArray;
57-
}
58-
// Helper function to convert JavaScript arrays to std::vector<Point>
59-
std::vector<Point> jsArrayToPointVector(const emscripten::val& jsArray) {
60-
std::vector<Point> vertices;
61-
unsigned length = jsArray["length"].as<unsigned>();
62-
vertices.reserve(length);
63-
64-
for (unsigned i = 0; i < length; i++) {
65-
emscripten::val jsPoint = jsArray[i];
66-
// Use property access instead of method calls for better compatibility
67-
long x = jsPoint["x"].as<long>();
68-
long y = jsPoint["y"].as<long>();
69-
vertices.emplace_back(x, y);
70-
}
71-
72-
return vertices;
73-
}
7441

7542
// Wrapper function for nest() to handle JavaScript arrays
7643
ResultAndItem nestWrapper(const ItemList& jsItems, const Box& bin, double scaleFactor) {
@@ -162,14 +129,12 @@ EMSCRIPTEN_BINDINGS(libnest2d_js) {
162129
.field("parallel", &NfpConfig::parallel)
163130
;
164131

165-
166132
// Item class
167133
class_<Item>("Item")
168134
.constructor<const PolygonImpl&>()
169-
.class_function("createFromVertices", optional_override([](const emscripten::val& jsVertices) -> Item {
170-
std::vector<Point> vertices = jsArrayToPointVector(jsVertices);
135+
.class_function("createFromVertices", optional_override([](const PointList& vertices) -> Item {
171136
PolygonImpl polygon;
172-
polygon.Contour = vertices;
137+
polygon.Contour = emscripten::vecFromJSArray<Point>(vertices);
173138
return Item(polygon);
174139
}))
175140
.function("binId", select_overload<int() const>(&Item::binId))
@@ -189,7 +154,11 @@ EMSCRIPTEN_BINDINGS(libnest2d_js) {
189154
.function("setPriority", select_overload<void(int)>(&Item::priority))
190155
.function("transformedShape", optional_override([](const Item& self) {
191156
const auto& poly = self.transformedShape();
192-
return pointVectorToJSArray(poly.Contour);
157+
emscripten::val shape = emscripten::val::array();
158+
for (const auto& point : poly.Contour) {
159+
shape.call<void>("push", point);
160+
}
161+
return PointList { shape };
193162
}));
194163

195164

0 commit comments

Comments
 (0)