Skip to content

Commit e137273

Browse files
committed
Update JS/WASM bindings to reflect template-based types in libnest2d with ClipperLib and opt:: integration
NP-1172
1 parent c5b57c5 commit e137273

File tree

1 file changed

+29
-30
lines changed

1 file changed

+29
-30
lines changed

src/libnest2d_js.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,37 +14,36 @@ using namespace libnest2d;
1414
using namespace emscripten;
1515

1616
EMSCRIPTEN_BINDINGS(libnest2d_js) {
17-
// Expose Point type
18-
value_object<Point>("Point")
19-
.field("x", &Point::x)
20-
.field("y", &Point::y);
21-
22-
// Expose Polygon type
23-
value_object<Polygon>("Polygon")
24-
.field("points", &Polygon::points);
25-
26-
// Expose NesterConfig
27-
value_object<NesterConfig>("NesterConfig")
28-
.field("iterations", &NesterConfig::iterations)
29-
.field("time_limit", &NesterConfig::time_limit);
30-
31-
// Expose Nester class
32-
class_<Nester>("Nester")
17+
// Expose ClipperLib::IntPoint as Point
18+
value_object<ClipperLib::IntPoint>("Point")
19+
.field("x", &ClipperLib::IntPoint::X)
20+
.field("y", &ClipperLib::IntPoint::Y);
21+
22+
// Expose ClipperLib::Polygon
23+
value_object<ClipperLib::Polygon>("Polygon")
24+
.field("contour", &ClipperLib::Polygon::Contour)
25+
.field("holes", &ClipperLib::Polygon::Holes);
26+
27+
// Expose NestConfig (template, so use default types)
28+
value_object<NestConfig<>>("NestConfig")
29+
.field("placer_config", &NestConfig<>::placer_config);
30+
31+
// Expose _Nester (template, so use default types)
32+
class_<_Nester<NfpPlacer, FirstFitSelection>>("Nester")
3333
.constructor<>()
34-
.function("nest", &Nester::nest);
35-
36-
// Expose OptimizerConfig
37-
value_object<OptimizerConfig>("OptimizerConfig")
38-
.field("max_evals", &OptimizerConfig::max_evals)
39-
.field("tolerance", &OptimizerConfig::tolerance);
40-
41-
// Expose Optimizer class
42-
class_<Optimizer>("Optimizer")
43-
.constructor<>()
44-
.function("optimize", &Optimizer::optimize);
45-
46-
// Expose utility functions (example)
47-
function("polygonArea", &polygon_area);
34+
.function("nest", &_Nester<NfpPlacer, FirstFitSelection>::nest);
35+
36+
// Expose StopCriteria as OptimizerConfig
37+
value_object<opt::StopCriteria>("OptimizerConfig")
38+
.field("max_iterations", &opt::StopCriteria::max_iterations)
39+
.field("absolute_score_difference", &opt::StopCriteria::absolute_score_difference)
40+
.field("relative_score_difference", &opt::StopCriteria::relative_score_difference)
41+
.field("stop_score", &opt::StopCriteria::stop_score);
42+
43+
// Expose Optimizer (template, so use NloptOptimizer)
44+
class_<opt::Optimizer<opt::NloptOptimizer>>("Optimizer")
45+
.constructor<const opt::StopCriteria&>()
46+
.function("optimize_min", &opt::Optimizer<opt::NloptOptimizer>::optimize_min<double>);
4847
}
4948

5049
#endif // LIBNEST2D_JS_H

0 commit comments

Comments
 (0)