Skip to content

Commit b68e11d

Browse files
committed
update nestWrapper return type to size_t, add Circle class, enhance Box constructors, and improve consistency in function bindings.
1 parent 992315a commit b68e11d

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

libnest2d_js/libnest2d_js.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ std::vector<double> jsArrayToVectorDouble(const emscripten::val& jsArray) {
7373
}
7474

7575
// Wrapper function for nest() to handle JavaScript arrays
76-
long nestWrapper(emscripten::val jsItems, const Box& bin, long distance = 1, const NfpConfig& config = NfpConfig()) {
76+
size_t nestWrapper(emscripten::val jsItems, const Box& bin, long distance = 1, const NfpConfig& config = NfpConfig()) {
7777
// Convert JavaScript array to std::vector<Item>
7878
std::vector<Item> items;
7979
unsigned length = jsItems["length"].as<unsigned>();
@@ -93,7 +93,7 @@ long nestWrapper(emscripten::val jsItems, const Box& bin, long distance = 1, con
9393
NestConfig<> nestConfig(config);
9494

9595
// Call the nest function
96-
long result = nest(items, bin, distance, nestConfig);
96+
size_t result = nest(items, bin, distance, nestConfig);
9797

9898
// Copy results back to original JavaScript items
9999
for (size_t i = 0; i < items.size() && i < length; ++i) {
@@ -123,9 +123,11 @@ EMSCRIPTEN_BINDINGS(libnest2d_js) {
123123
class_<Box>("Box")
124124
.constructor<Point>()
125125
.constructor<Point, Point>()
126-
.constructor<long, long>()
127126
.constructor<long, long, Point>()
128127
.class_function("infinite", &Box::infinite)
128+
.class_function("fromDimensions", optional_override([](long width, long height) -> Box {
129+
return Box(width, height);
130+
}))
129131
.function("minCorner", select_overload<const Point&() const>(&Box::minCorner))
130132
.function("maxCorner", select_overload<const Point&() const>(&Box::maxCorner))
131133
.function("width", &Box::width)
@@ -134,6 +136,17 @@ EMSCRIPTEN_BINDINGS(libnest2d_js) {
134136
.function("center", select_overload<Point() const>(&Box::center))
135137
;
136138

139+
// Circle class
140+
class_<Circle>("Circle")
141+
.constructor<>()
142+
.constructor<Point, double>()
143+
.function("center", select_overload<const Point&() const>(&Circle::center))
144+
.function("setCenter", select_overload<void(const Point&)>(&Circle::center))
145+
.function("radius", select_overload<double() const>(&Circle::radius))
146+
.function("setRadius", select_overload<void(double)>(&Circle::radius))
147+
.function("area", &Circle::area)
148+
;
149+
137150
// NfpConfig::Alignment enum
138151
enum_<NfpConfig::Alignment>("Alignment")
139152
.value("CENTER", NfpConfig::Alignment::CENTER)

0 commit comments

Comments
 (0)