static int inverse_legs(lua_State *L) { std::vector<double> qLegs; std::vector<double> pLLeg = lua_checkvector(L, 1); std::vector<double> pRLeg = lua_checkvector(L, 2); std::vector<double> pTorso = lua_checkvector(L, 3); int leg = 0; qLegs = darwinop_kinematics_inverse_legs(&pLLeg[0], &pRLeg[0], &pTorso[0], leg); lua_pushvector(L, qLegs); return 1; }
static int inverse_arm(lua_State *L) { std::vector<double> qArm; std::vector<double> dArm = lua_checkvector(L, 1); qArm = darwinop_kinematics_inverse_arm(&dArm[0]); if(qArm[0]==-999) lua_pushnil(L); else lua_pushvector(L, qArm); return 1; }
static int inverse_leg(lua_State *L) { std::vector<double> qLeg; std::vector<double> pLeg = lua_checkvector(L, 1); int leg = luaL_checkint(L, 2); double hipYawPitch = 0; Transform trLeg = transform6D(&pLeg[0]); qLeg = darwinop_kinematics_inverse_leg(trLeg, leg, hipYawPitch); lua_pushvector(L, qLeg); return 1; }
int luaNode__newindex(lua_State* l) { is::Node* node = lua_tonode(l,1); if ( node == NULL ) { lua_Debug ar1; lua_getstack( l, 1, &ar1 ); lua_getinfo( l, "fl", &ar1 ); lua_Debug ar2; lua_getinfo( l, ">S", &ar2 ); lua_pushfstring( l, "%s:%d: attempt to index a NULL Node!", ar2.short_src, ar1.currentline ); return lua_error( l ); } std::string field = luaL_checkstring(l,2); if ( field == "pos" ) { node->setPos( *lua_checkvector( l, 3 ) ); } else if ( field == "ang" ) { node->setAng( *lua_checkvector( l, 3 ) ); } else if ( field == "scale" ) { node->setScale( *lua_checkvector( l, 3 ) ); } else if ( field == "color" ) { node->setColor( *lua_checkcolor( l, 3 ) ); } else if ( field == "x" ) { glm::vec3 pos = node->getPos(); pos.x = luaL_checknumber( l, 3 ); node->setPos( pos ); } else if ( field == "y" ) { glm::vec3 pos = node->getPos(); pos.y = luaL_checknumber( l, 3 ); node->setPos( pos ); } else if ( field == "z" ) { glm::vec3 pos = node->getPos(); pos.z = luaL_checknumber( l, 3 ); node->setPos( pos ); } else if ( field == "sx" ) { glm::vec3 scale = node->getScale(); scale.x = luaL_checknumber( l, 3 ); node->setScale( scale ); } else if ( field == "sy" ) { glm::vec3 scale = node->getScale(); scale.y = luaL_checknumber( l, 3 ); node->setScale( scale ); } else if ( field == "sz" ) { glm::vec3 scale = node->getScale(); scale.z = luaL_checknumber( l, 3 ); node->setScale( scale ); } else if ( field == "r" ) { glm::vec4 color = node->getColor(); color.x = luaL_checknumber( l, 3 ); node->setColor( color ); } else if ( field == "g" ) { glm::vec4 color = node->getColor(); color.y = luaL_checknumber( l, 3 ); node->setColor( color ); } else if ( field == "b" ) { glm::vec4 color = node->getColor(); color.z = luaL_checknumber( l, 3 ); node->setColor( color ); } else if ( field == "a" ) { glm::vec4 color = node->getColor(); color.w = luaL_checknumber( l, 3 ); node->setColor( color ); } else { luaText__newindex( l ); luaButton__newindex( l ); luaCheckbox__newindex( l ); luaDropdown__newindex( l ); if ( node->m_luaReference == LUA_NOREF ) { lua_newtable( l ); node->m_luaReference = luaL_ref( l, LUA_REGISTRYINDEX ); } lua_rawgeti( l, LUA_REGISTRYINDEX, node->m_luaReference ); lua_pushvalue( l, 3 ); lua_setfield( l, -2, luaL_checkstring( l, 2 ) ); } return 0; }
static int torso_lleg(lua_State *L) { std::vector<double> q = lua_checkvector(L, 1); Transform t = inv(darwinop_kinematics_forward_lleg(&q[0])); lua_pushvector(L, position6D(t)); return 1; }
static int forward_rleg(lua_State *L) { std::vector<double> q = lua_checkvector(L, 1); Transform t = darwinop_kinematics_forward_rleg(&q[0]); lua_pushtransform(L, t); return 1; }