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;
}
Beispiel #4
0
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;
}