summaryrefslogtreecommitdiff
path: root/examples/pybullet/pybullet.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pybullet/pybullet.c')
-rw-r--r--examples/pybullet/pybullet.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c
index f78f464f9..5a8c2eb03 100644
--- a/examples/pybullet/pybullet.c
+++ b/examples/pybullet/pybullet.c
@@ -9190,6 +9190,64 @@ static PyObject* pybullet_getMeshData(PyObject* self, PyObject* args, PyObject*
}
+static PyObject* pybullet_getTetraMeshData(PyObject* self, PyObject* args, PyObject* keywds)
+{
+ int bodyUniqueId = -1;
+ b3PhysicsClientHandle sm = 0;
+ b3SharedMemoryCommandHandle command;
+ b3SharedMemoryStatusHandle statusHandle;
+ struct b3TetraMeshData meshData;
+ int statusType;
+ int flags = -1;
+
+ int physicsClientId = 0;
+ static char* kwlist[] = {"bodyUniqueId", "flags", "physicsClientId", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|iii", kwlist, &bodyUniqueId, &flags , &physicsClientId))
+ {
+ return NULL;
+ }
+ sm = getPhysicsClient(physicsClientId);
+ if (sm == 0)
+ {
+ PyErr_SetString(SpamError, "Not connected to physics server.");
+ return NULL;
+ }
+ command = b3GetTetraMeshDataCommandInit(sm, bodyUniqueId);
+ if (flags >= 0)
+ {
+ b3GetTetraMeshDataSetFlags(command, flags);
+ }
+
+ statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
+ statusType = b3GetStatusType(statusHandle);
+ if (statusType == CMD_REQUEST_TETRA_MESH_DATA_COMPLETED)
+ {
+ int i;
+ PyObject* pyVertexData;
+ PyObject* pyListMeshData = PyTuple_New(2);
+ b3GetTetraMeshData(sm, &meshData);
+ PyTuple_SetItem(pyListMeshData, 0, PyInt_FromLong(meshData.m_numVertices));
+ pyVertexData = PyTuple_New(meshData.m_numVertices);
+ PyTuple_SetItem(pyListMeshData, 1, pyVertexData);
+
+ for (i = 0; i < meshData.m_numVertices; i++)
+ {
+ PyObject* pyListVertex = PyTuple_New(3);
+ PyTuple_SetItem(pyListVertex, 0, PyFloat_FromDouble(meshData.m_vertices[i].x));
+ PyTuple_SetItem(pyListVertex, 1, PyFloat_FromDouble(meshData.m_vertices[i].y));
+ PyTuple_SetItem(pyListVertex, 2, PyFloat_FromDouble(meshData.m_vertices[i].z));
+ PyTuple_SetItem(pyVertexData, i, pyListVertex);
+ }
+
+ return pyListMeshData;
+ }
+
+ PyErr_SetString(SpamError, "getTetraMeshData failed");
+ return NULL;
+}
+
+
+
static PyObject* pybullet_resetMeshData(PyObject* self, PyObject* args, PyObject* keywds)
{
int bodyUniqueId = -1;
@@ -12644,6 +12702,9 @@ static PyMethodDef SpamMethods[] = {
{"getMeshData", (PyCFunction)pybullet_getMeshData, METH_VARARGS | METH_KEYWORDS,
"Get mesh data. Returns vertices etc from the mesh."},
+ {"getTetraMeshData", (PyCFunction)pybullet_getTetraMeshData, METH_VARARGS | METH_KEYWORDS,
+ "Get mesh data. Returns tetra from the mesh."},
+
{"resetMeshData", (PyCFunction)pybullet_resetMeshData, METH_VARARGS | METH_KEYWORDS,
"Reset mesh data. Only implemented for deformable bodies."},