create premake/cmake file for Bullet/Extras/obj2sdf

add missing 1.sdf for Bullet/data/kitchens/1.sdf
add support for getting keyboard events (pybullet.getKeyboardEvents and b3RobotSimulatorClientAPI::getKeyboardEvents)
This commit is contained in:
Erwin Coumans
2017-03-02 12:33:22 -08:00
parent 255b21a776
commit 34fc2fb589
29 changed files with 7317 additions and 40 deletions

View File

@@ -2899,6 +2899,45 @@ static PyObject* pybullet_setVRCameraState(PyObject* self, PyObject* args, PyObj
}
static PyObject* pybullet_getKeyboardEvents(PyObject* self, PyObject* args, PyObject *keywds)
{
b3SharedMemoryCommandHandle commandHandle;
b3SharedMemoryStatusHandle statusHandle;
int statusType;
int physicsClientId = 0;
b3PhysicsClientHandle sm = 0;
struct b3KeyboardEventsData keyboardEventsData;
PyObject* keyEventsObj = 0;
int i=0;
static char *kwlist[] = { "physicsClientId", NULL };
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|i", kwlist,&physicsClientId))
{
return NULL;
}
sm = getPhysicsClient(physicsClientId);
if (sm == 0)
{
PyErr_SetString(SpamError, "Not connected to physics server.");
return NULL;
}
commandHandle = b3RequestKeyboardEventsCommandInit(sm);
b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
b3GetKeyboardEventsData(sm,&keyboardEventsData);
keyEventsObj = PyDict_New();
for (i=0;i<keyboardEventsData.m_numKeyboardEvents;i++)
{
PyObject* keyObj = PyLong_FromLong(keyboardEventsData.m_keyboardEvents[i].m_keyCode);
PyObject* valObj = PyLong_FromLong(keyboardEventsData.m_keyboardEvents[i].m_keyState);
PyDict_SetItem(keyEventsObj, keyObj, valObj);
}
return keyEventsObj;
}
static PyObject* pybullet_getVREvents(PyObject* self, PyObject* args, PyObject *keywds)
{
@@ -5185,6 +5224,10 @@ static PyMethodDef SpamMethods[] = {
"Set properties of the VR Camera such as its root transform "
"for teleporting or to track objects (camera inside a vehicle for example)."
},
{ "getKeyboardEvents", (PyCFunction)pybullet_getKeyboardEvents, METH_VARARGS | METH_KEYWORDS,
"Get Keyboard events, keycode and state (KEY_IS_DOWN, KEY_WAS_TRIGGER, KEY_WAS_RELEASED)"
},
{ "startStateLogging", (PyCFunction)pybullet_startStateLogging, METH_VARARGS | METH_KEYWORDS,
"Start logging of state, such as robot base position, orientation, joint positions etc. "
"Specify loggingType (STATE_LOG_MINITAUR, STATE_LOG_GENERIC_ROBOT, STATE_LOG_VR_CONTROLLERS etc), "
@@ -5209,6 +5252,43 @@ static PyMethodDef SpamMethods[] = {
{NULL, NULL, 0, NULL} /* Sentinel */
};
///copied from CommonWindowInterface.h
enum {
B3G_ESCAPE = 27,
B3G_F1 = 0xff00,
B3G_F2,
B3G_F3,
B3G_F4,
B3G_F5,
B3G_F6,
B3G_F7,
B3G_F8,
B3G_F9,
B3G_F10,
B3G_F11,
B3G_F12,
B3G_F13,
B3G_F14,
B3G_F15,
B3G_LEFT_ARROW,
B3G_RIGHT_ARROW,
B3G_UP_ARROW,
B3G_DOWN_ARROW,
B3G_PAGE_UP,
B3G_PAGE_DOWN,
B3G_END,
B3G_HOME,
B3G_INSERT,
B3G_DELETE,
B3G_BACKSPACE,
B3G_SHIFT,
B3G_CONTROL,
B3G_ALT,
B3G_RETURN
};
#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT, "pybullet", /* m_name */
@@ -5280,6 +5360,10 @@ initpybullet(void)
PyModule_AddIntConstant(m, "VR_MAX_CONTROLLERS", MAX_VR_CONTROLLERS);
PyModule_AddIntConstant(m, "VR_MAX_BUTTONS", MAX_VR_BUTTONS);
PyModule_AddIntConstant(m, "KEY_IS_DOWN", eButtonIsDown);
PyModule_AddIntConstant(m, "KEY_WAS_TRIGGERED", eButtonTriggered);
PyModule_AddIntConstant(m, "KEY_WAS_RELEASED", eButtonReleased);
PyModule_AddIntConstant(m, "STATE_LOGGING_MINITAUR", STATE_LOGGING_MINITAUR);
PyModule_AddIntConstant(m, "STATE_LOGGING_GENERIC_ROBOT", STATE_LOGGING_GENERIC_ROBOT);
PyModule_AddIntConstant(m, "STATE_LOGGING_VR_CONTROLLERS", STATE_LOGGING_VR_CONTROLLERS);
@@ -5287,8 +5371,38 @@ initpybullet(void)
PyModule_AddIntConstant(m, "COV_ENABLE_GUI", COV_ENABLE_GUI);
PyModule_AddIntConstant(m, "COV_ENABLE_SHADOWS", COV_ENABLE_SHADOWS);
PyModule_AddIntConstant(m, "COV_ENABLE_WIREFRAME", COV_ENABLE_WIREFRAME);
PyModule_AddIntConstant(m,"B3G_F1",B3G_F1);
PyModule_AddIntConstant(m,"B3G_F2",B3G_F2);
PyModule_AddIntConstant(m,"B3G_F3",B3G_F3);
PyModule_AddIntConstant(m,"B3G_F4",B3G_F4);
PyModule_AddIntConstant(m,"B3G_F5",B3G_F5);
PyModule_AddIntConstant(m,"B3G_F6",B3G_F6);
PyModule_AddIntConstant(m,"B3G_F7",B3G_F7);
PyModule_AddIntConstant(m,"B3G_F8",B3G_F8);
PyModule_AddIntConstant(m,"B3G_F9",B3G_F9);
PyModule_AddIntConstant(m,"B3G_F10",B3G_F10);
PyModule_AddIntConstant(m,"B3G_F11",B3G_F11);
PyModule_AddIntConstant(m,"B3G_F12",B3G_F12);
PyModule_AddIntConstant(m,"B3G_F13",B3G_F13);
PyModule_AddIntConstant(m,"B3G_F14",B3G_F14);
PyModule_AddIntConstant(m,"B3G_F15",B3G_F15);
PyModule_AddIntConstant(m,"B3G_LEFT_ARROW",B3G_LEFT_ARROW);
PyModule_AddIntConstant(m,"B3G_RIGHT_ARROW",B3G_RIGHT_ARROW);
PyModule_AddIntConstant(m,"B3G_UP_ARROW",B3G_UP_ARROW);
PyModule_AddIntConstant(m,"B3G_DOWN_ARROW",B3G_DOWN_ARROW);
PyModule_AddIntConstant(m,"B3G_PAGE_UP",B3G_PAGE_UP);
PyModule_AddIntConstant(m,"B3G_PAGE_DOWN",B3G_PAGE_DOWN);
PyModule_AddIntConstant(m,"B3G_END",B3G_END);
PyModule_AddIntConstant(m,"B3G_HOME",B3G_HOME);
PyModule_AddIntConstant(m,"B3G_INSERT",B3G_INSERT);
PyModule_AddIntConstant(m,"B3G_DELETE",B3G_DELETE);
PyModule_AddIntConstant(m,"B3G_BACKSPACE", B3G_BACKSPACE);
PyModule_AddIntConstant(m,"B3G_SHIFT", B3G_SHIFT);
PyModule_AddIntConstant(m,"B3G_CONTROL", B3G_CONTROL);
PyModule_AddIntConstant(m,"B3G_ALT", B3G_ALT);
PyModule_AddIntConstant(m,"B3G_RETURN", B3G_RETURN);
SpamError = PyErr_NewException("pybullet.error", NULL, NULL);
Py_INCREF(SpamError);