|
@@ -94,6 +94,18 @@ int w_BezierCurve_insertControlPoint(lua_State *L)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int w_BezierCurve_removeControlPoint(lua_State *L)
|
|
|
|
+{
|
|
|
|
+ BezierCurve *curve = luax_checkbeziercurve(L, 1);
|
|
|
|
+ int idx = luaL_checkint(L, 2);
|
|
|
|
+
|
|
|
|
+ if (idx > 0) // 1-indexing
|
|
|
|
+ idx--;
|
|
|
|
+
|
|
|
|
+ luax_catchexcept(L, [&](){ curve->removeControlPoint(idx); });
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
int w_BezierCurve_getControlPointCount(lua_State *L)
|
|
int w_BezierCurve_getControlPointCount(lua_State *L)
|
|
{
|
|
{
|
|
BezierCurve *curve = luax_checkbeziercurve(L, 1);
|
|
BezierCurve *curve = luax_checkbeziercurve(L, 1);
|
|
@@ -165,6 +177,28 @@ int w_BezierCurve_render(lua_State *L)
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int w_BezierCurve_renderSegment(lua_State *L)
|
|
|
|
+{
|
|
|
|
+ BezierCurve *curve = luax_checkbeziercurve(L, 1);
|
|
|
|
+ double start = luaL_checknumber(L, 2);
|
|
|
|
+ double end = luaL_checknumber(L, 3);
|
|
|
|
+ int accuracy = luaL_optinteger(L, 4, 5);
|
|
|
|
+
|
|
|
|
+ std::vector<Vector> points;
|
|
|
|
+ luax_catchexcept(L, [&](){ points = curve->renderSegment(start, end, accuracy); });
|
|
|
|
+
|
|
|
|
+ lua_createtable(L, points.size()*2, 0);
|
|
|
|
+ for (size_t i = 0; i < points.size(); ++i)
|
|
|
|
+ {
|
|
|
|
+ lua_pushnumber(L, points[i].x);
|
|
|
|
+ lua_rawseti(L, -2, 2*i+1);
|
|
|
|
+ lua_pushnumber(L, points[i].y);
|
|
|
|
+ lua_rawseti(L, -2, 2*i+2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 1;
|
|
|
|
+}
|
|
|
|
+
|
|
static const luaL_Reg functions[] =
|
|
static const luaL_Reg functions[] =
|
|
{
|
|
{
|
|
{"getDegree", w_BezierCurve_getDegree},
|
|
{"getDegree", w_BezierCurve_getDegree},
|
|
@@ -172,12 +206,14 @@ static const luaL_Reg functions[] =
|
|
{"getControlPoint", w_BezierCurve_getControlPoint},
|
|
{"getControlPoint", w_BezierCurve_getControlPoint},
|
|
{"setControlPoint", w_BezierCurve_setControlPoint},
|
|
{"setControlPoint", w_BezierCurve_setControlPoint},
|
|
{"insertControlPoint", w_BezierCurve_insertControlPoint},
|
|
{"insertControlPoint", w_BezierCurve_insertControlPoint},
|
|
|
|
+ {"removeControlPoint", w_BezierCurve_removeControlPoint},
|
|
{"getControlPointCount", w_BezierCurve_getControlPointCount},
|
|
{"getControlPointCount", w_BezierCurve_getControlPointCount},
|
|
{"translate", w_BezierCurve_translate},
|
|
{"translate", w_BezierCurve_translate},
|
|
{"rotate", w_BezierCurve_rotate},
|
|
{"rotate", w_BezierCurve_rotate},
|
|
{"scale", w_BezierCurve_scale},
|
|
{"scale", w_BezierCurve_scale},
|
|
{"evaluate", w_BezierCurve_evaluate},
|
|
{"evaluate", w_BezierCurve_evaluate},
|
|
{"render", w_BezierCurve_render},
|
|
{"render", w_BezierCurve_render},
|
|
|
|
+ {"renderSegment", w_BezierCurve_renderSegment},
|
|
{ 0, 0 }
|
|
{ 0, 0 }
|
|
};
|
|
};
|
|
|
|
|