PyBullet: expose flags to createMultiBody
This commit is contained in:
@@ -1414,6 +1414,20 @@ B3_SHARED_API void b3CreateMultiBodyUseMaximalCoordinates(b3SharedMemoryCommandH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
B3_SHARED_API void b3CreateMultiBodySetFlags(b3SharedMemoryCommandHandle commandHandle, int flags)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
|
b3Assert(command);
|
||||||
|
b3Assert(command->m_type == CMD_CREATE_MULTI_BODY);
|
||||||
|
if (command->m_type==CMD_CREATE_MULTI_BODY)
|
||||||
|
{
|
||||||
|
command->m_updateFlags |= MULT_BODY_HAS_FLAGS;
|
||||||
|
command->m_createMultiBodyArgs.m_flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
B3_SHARED_API int b3GetStatusMultiBodyUniqueId(b3SharedMemoryStatusHandle statusHandle)
|
B3_SHARED_API int b3GetStatusMultiBodyUniqueId(b3SharedMemoryStatusHandle statusHandle)
|
||||||
{
|
{
|
||||||
const SharedMemoryStatus* status = (const SharedMemoryStatus* ) statusHandle;
|
const SharedMemoryStatus* status = (const SharedMemoryStatus* ) statusHandle;
|
||||||
|
|||||||
@@ -466,6 +466,8 @@ B3_SHARED_API int b3CreateMultiBodyLink(b3SharedMemoryCommandHandle commandHandl
|
|||||||
|
|
||||||
//useMaximalCoordinates are disabled by default, enabling them is experimental and not fully supported yet
|
//useMaximalCoordinates are disabled by default, enabling them is experimental and not fully supported yet
|
||||||
B3_SHARED_API void b3CreateMultiBodyUseMaximalCoordinates(b3SharedMemoryCommandHandle commandHandle);
|
B3_SHARED_API void b3CreateMultiBodyUseMaximalCoordinates(b3SharedMemoryCommandHandle commandHandle);
|
||||||
|
B3_SHARED_API void b3CreateMultiBodySetFlags(b3SharedMemoryCommandHandle commandHandle, int flags);
|
||||||
|
|
||||||
|
|
||||||
//int b3CreateMultiBodyAddLink(b3SharedMemoryCommandHandle commandHandle, int jointType, int parentLinkIndex, double linkMass, int linkCollisionShapeUnique, int linkVisualShapeUniqueId);
|
//int b3CreateMultiBodyAddLink(b3SharedMemoryCommandHandle commandHandle, int jointType, int parentLinkIndex, double linkMass, int linkCollisionShapeUnique, int linkVisualShapeUniqueId);
|
||||||
|
|
||||||
|
|||||||
@@ -5804,6 +5804,12 @@ bool PhysicsServerCommandProcessor::processCreateMultiBodyCommand(const struct S
|
|||||||
}
|
}
|
||||||
|
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
|
||||||
|
if (clientCmd.m_updateFlags & MULT_BODY_HAS_FLAGS)
|
||||||
|
{
|
||||||
|
flags = clientCmd.m_createMultiBodyArgs.m_flags;
|
||||||
|
}
|
||||||
|
|
||||||
bool ok = processImportedObjects("memory", bufferServerToClient, bufferSizeInBytes, useMultiBody, flags, u2b);
|
bool ok = processImportedObjects("memory", bufferServerToClient, bufferSizeInBytes, useMultiBody, flags, u2b);
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
|
|||||||
@@ -926,6 +926,7 @@ enum eCreateMultiBodyEnum
|
|||||||
{
|
{
|
||||||
MULTI_BODY_HAS_BASE=1,
|
MULTI_BODY_HAS_BASE=1,
|
||||||
MULT_BODY_USE_MAXIMAL_COORDINATES=2,
|
MULT_BODY_USE_MAXIMAL_COORDINATES=2,
|
||||||
|
MULT_BODY_HAS_FLAGS=4,
|
||||||
};
|
};
|
||||||
struct b3CreateMultiBodyArgs
|
struct b3CreateMultiBodyArgs
|
||||||
{
|
{
|
||||||
@@ -947,7 +948,7 @@ struct b3CreateMultiBodyArgs
|
|||||||
int m_linkParentIndices[MAX_CREATE_MULTI_BODY_LINKS];
|
int m_linkParentIndices[MAX_CREATE_MULTI_BODY_LINKS];
|
||||||
int m_linkJointTypes[MAX_CREATE_MULTI_BODY_LINKS];
|
int m_linkJointTypes[MAX_CREATE_MULTI_BODY_LINKS];
|
||||||
double m_linkJointAxis[3*MAX_CREATE_MULTI_BODY_LINKS];
|
double m_linkJointAxis[3*MAX_CREATE_MULTI_BODY_LINKS];
|
||||||
|
int m_flags;
|
||||||
#if 0
|
#if 0
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
std::string m_sourceFile;
|
std::string m_sourceFile;
|
||||||
|
|||||||
@@ -6485,6 +6485,7 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje
|
|||||||
int baseCollisionShapeIndex=-1;
|
int baseCollisionShapeIndex=-1;
|
||||||
int baseVisualShapeIndex=-1;
|
int baseVisualShapeIndex=-1;
|
||||||
int useMaximalCoordinates = 0;
|
int useMaximalCoordinates = 0;
|
||||||
|
int flags = -1;
|
||||||
PyObject* basePosObj=0;
|
PyObject* basePosObj=0;
|
||||||
PyObject* baseOrnObj=0;
|
PyObject* baseOrnObj=0;
|
||||||
PyObject* baseInertialFramePositionObj=0;
|
PyObject* baseInertialFramePositionObj=0;
|
||||||
@@ -6500,21 +6501,22 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje
|
|||||||
PyObject* linkJointAxisObj=0;
|
PyObject* linkJointAxisObj=0;
|
||||||
PyObject* linkInertialFramePositionObj=0;
|
PyObject* linkInertialFramePositionObj=0;
|
||||||
PyObject* linkInertialFrameOrientationObj=0;
|
PyObject* linkInertialFrameOrientationObj=0;
|
||||||
|
|
||||||
|
static char* kwlist[] = {
|
||||||
|
"baseMass","baseCollisionShapeIndex","baseVisualShapeIndex","basePosition", "baseOrientation",
|
||||||
|
"baseInertialFramePosition", "baseInertialFrameOrientation", "linkMasses","linkCollisionShapeIndices",
|
||||||
|
"linkVisualShapeIndices","linkPositions", "linkOrientations","linkInertialFramePositions","linkInertialFrameOrientations", "linkParentIndices",
|
||||||
|
"linkJointTypes","linkJointAxis", "useMaximalCoordinates", "flags", "physicsClientId", NULL};
|
||||||
|
|
||||||
static char* kwlist[] = {"baseMass","baseCollisionShapeIndex","baseVisualShapeIndex","basePosition", "baseOrientation", "baseInertialFramePosition", "baseInertialFrameOrientation",
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diiOOOOOOOOOOOOOOiii", kwlist,
|
||||||
"linkMasses","linkCollisionShapeIndices", "linkVisualShapeIndices",
|
&baseMass,&baseCollisionShapeIndex,&baseVisualShapeIndex,&basePosObj, &baseOrnObj,
|
||||||
"linkPositions", "linkOrientations","linkInertialFramePositions","linkInertialFrameOrientations", "linkParentIndices", "linkJointTypes","linkJointAxis",
|
&baseInertialFramePositionObj, &baseInertialFrameOrientationObj,&linkMassesObj, &linkCollisionShapeIndicesObj,
|
||||||
"useMaximalCoordinates","physicsClientId", NULL};
|
&linkVisualShapeIndicesObj, &linkPositionsObj, &linkOrientationsObj,&linkInertialFramePositionObj, &linkInertialFrameOrientationObj,&linkParentIndicesObj,
|
||||||
|
&linkJointTypesObj,&linkJointAxisObj, &useMaximalCoordinates, &flags, &physicsClientId))
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diiOOOOOOOOOOOOOOii", kwlist, &baseMass,&baseCollisionShapeIndex,&baseVisualShapeIndex,
|
|
||||||
&basePosObj, &baseOrnObj,&baseInertialFramePositionObj, &baseInertialFrameOrientationObj,
|
|
||||||
&linkMassesObj, &linkCollisionShapeIndicesObj, &linkVisualShapeIndicesObj, &linkPositionsObj, &linkOrientationsObj,
|
|
||||||
&linkInertialFramePositionObj, &linkInertialFrameOrientationObj,
|
|
||||||
&linkParentIndicesObj, &linkJointTypesObj,&linkJointAxisObj,
|
|
||||||
&useMaximalCoordinates, &physicsClientId))
|
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sm = getPhysicsClient(physicsClientId);
|
sm = getPhysicsClient(physicsClientId);
|
||||||
if (sm == 0)
|
if (sm == 0)
|
||||||
{
|
{
|
||||||
@@ -6634,6 +6636,10 @@ static PyObject* pybullet_createMultiBody(PyObject* self, PyObject* args, PyObje
|
|||||||
{
|
{
|
||||||
b3CreateMultiBodyUseMaximalCoordinates(commandHandle);
|
b3CreateMultiBodyUseMaximalCoordinates(commandHandle);
|
||||||
}
|
}
|
||||||
|
if (flags >0)
|
||||||
|
{
|
||||||
|
b3CreateMultiBodySetFlags(commandHandle, flags);
|
||||||
|
}
|
||||||
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
|
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
|
||||||
statusType = b3GetStatusType(statusHandle);
|
statusType = b3GetStatusType(statusHandle);
|
||||||
if (statusType == CMD_CREATE_MULTI_BODY_COMPLETED)
|
if (statusType == CMD_CREATE_MULTI_BODY_COMPLETED)
|
||||||
@@ -8172,12 +8178,12 @@ static PyObject* pybullet_calculateInverseKinematics(PyObject* self,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int szInBytes = sizeof(double) * szJointDamping;
|
||||||
|
int i;
|
||||||
if (szJointDamping != dofCount)
|
if (szJointDamping != dofCount)
|
||||||
{
|
{
|
||||||
printf("calculateInverseKinematics: the size of input joint damping values should be equal to the number of degrees of freedom, ignoring the additonal values.");
|
printf("calculateInverseKinematics: the size of input joint damping values should be equal to the number of degrees of freedom, ignoring the additonal values.");
|
||||||
}
|
}
|
||||||
int szInBytes = sizeof(double) * szJointDamping;
|
|
||||||
int i;
|
|
||||||
jointDamping = (double*)malloc(szInBytes);
|
jointDamping = (double*)malloc(szInBytes);
|
||||||
for (i = 0; i < szJointDamping; i++)
|
for (i = 0; i < szJointDamping; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user