emcc ./wasm/solver.c ./wasm/libslvs.a -L./wasm/ -lslvs -o ./dist/solver.js -s TOTAL_MEMORY=134217728 -s EXPORTED_FUNCTIONS='[_main, _solver, _free]' int solver(int nLines, float *ptr) { // for (int i=0; i 0) { sys.constraint[sys.constraints++] = Slvs_MakeConstraint( con_id++, g, SLVS_C_POINTS_COINCIDENT, 200, 0.0, pt_id - 1, pt_id - 2, 0, 0); } else { sys.constraint[sys.constraints++] = Slvs_MakeConstraint( con_id++, g, SLVS_C_POINTS_COINCIDENT, 200, 0.0, pt_id - 1, 101, 0, 0); } printf("h:%i\n", h); sys.param[sys.params++] = Slvs_MakeParam(h++, g, (float)*ptr++); sys.param[sys.params++] = Slvs_MakeParam(h++, g, (float)*ptr++); sys.entity[sys.entities++] = Slvs_MakePoint2d(pt_id++, g, 200, h - 2, h - 1); sys.entity[sys.entities++] = Slvs_MakeLineSegment(line_id++, g, 200, pt_id - 1, pt_id - 2); sys.constraint[sys.constraints++] = Slvs_MakeConstraint( con_id++, g, SLVS_C_PT_PT_DISTANCE, 200, 30.0, pt_id - 1, pt_id - 2, 0, 0); sys.constraint[sys.constraints++] = Slvs_MakeConstraint( con_id++, g, SLVS_C_VERTICAL, 200, 0.0, 0, 0, line_id-1, 0); } /* If the solver fails, then ask it to report which constraints caused * the problem. */ sys.calculateFaileds = 1; sys.dragged[0] = 10; sys.dragged[1] = 11; sys.dragged[2] = 14; sys.dragged[3] = 15; /* And solve. */ Slvs_Solve(&sys, g); // printf("%i,wtf\n", sys.result); if (sys.result == SLVS_RESULT_OKAY) { printf("solved okay\n"); for (int i = 0; i < nLines * 4; i++) { // *buf_pt_start++ = (float)sys.param[ptStart++].val; printf("%f\n", sys.param[ptStart++].val); } } else { int i; printf("solve failed: problematic constraints are:"); for (i = 0; i < sys.faileds; i++) { printf(" %d", sys.failed[i]); } printf("\n"); if (sys.result == SLVS_RESULT_INCONSISTENT) { printf("system inconsistent\n"); } else { printf("system nonconvergent\n"); } } sys.params = sys.constraints = sys.entities = 0; return 0; }