[pybullet] expose collision filter mode and max constraint force:
pybullet.changeUserConstraint(maxForce=<double>) pybullet.setPhysicsEngineParameter(collisionFilterMode=<int>)
This commit is contained in:
@@ -347,6 +347,18 @@ int b3PhysicsParamSetNumSolverIterations(b3SharedMemoryCommandHandle commandHand
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int b3PhysicsParamSetCollisionFilterMode(b3SharedMemoryCommandHandle commandHandle, int filterMode)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
|
b3Assert(command->m_type == CMD_SEND_PHYSICS_SIMULATION_PARAMETERS);
|
||||||
|
command->m_physSimParamArgs.m_collisionFilterMode = filterMode;
|
||||||
|
command->m_updateFlags |= SIM_PARAM_UPDATE_COLLISION_FILTER_MODE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int b3PhysicsParamSetTimeStep(b3SharedMemoryCommandHandle commandHandle, double timeStep)
|
int b3PhysicsParamSetTimeStep(b3SharedMemoryCommandHandle commandHandle, double timeStep)
|
||||||
{
|
{
|
||||||
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
@@ -1109,6 +1121,19 @@ int b3InitChangeUserConstraintSetFrameInB(b3SharedMemoryCommandHandle commandHan
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int b3InitChangeUserConstraintSetMaxForce(b3SharedMemoryCommandHandle commandHandle, double maxAppliedForce)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
|
b3Assert(command);
|
||||||
|
b3Assert(command->m_type == CMD_USER_CONSTRAINT);
|
||||||
|
b3Assert(command->m_updateFlags & USER_CONSTRAINT_CHANGE_CONSTRAINT);
|
||||||
|
|
||||||
|
command->m_updateFlags |=USER_CONSTRAINT_CHANGE_MAX_FORCE;
|
||||||
|
command->m_userConstraintArguments.m_maxAppliedForce = maxAppliedForce;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3InitRemoveUserConstraintCommand(b3PhysicsClientHandle physClient, int userConstraintUniqueId)
|
b3SharedMemoryCommandHandle b3InitRemoveUserConstraintCommand(b3PhysicsClientHandle physClient, int userConstraintUniqueId)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ int b3GetStatusUserConstraintUniqueId(b3SharedMemoryStatusHandle statusHandle);
|
|||||||
b3SharedMemoryCommandHandle b3InitChangeUserConstraintCommand(b3PhysicsClientHandle physClient, int userConstraintUniqueId);
|
b3SharedMemoryCommandHandle b3InitChangeUserConstraintCommand(b3PhysicsClientHandle physClient, int userConstraintUniqueId);
|
||||||
int b3InitChangeUserConstraintSetPivotInB(b3SharedMemoryCommandHandle commandHandle, double jointChildPivot[3]);
|
int b3InitChangeUserConstraintSetPivotInB(b3SharedMemoryCommandHandle commandHandle, double jointChildPivot[3]);
|
||||||
int b3InitChangeUserConstraintSetFrameInB(b3SharedMemoryCommandHandle commandHandle, double jointChildFrameOrn[4]);
|
int b3InitChangeUserConstraintSetFrameInB(b3SharedMemoryCommandHandle commandHandle, double jointChildFrameOrn[4]);
|
||||||
|
int b3InitChangeUserConstraintSetMaxForce(b3SharedMemoryCommandHandle commandHandle, double maxAppliedForce);
|
||||||
|
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3InitRemoveUserConstraintCommand(b3PhysicsClientHandle physClient, int userConstraintUniqueId);
|
b3SharedMemoryCommandHandle b3InitRemoveUserConstraintCommand(b3PhysicsClientHandle physClient, int userConstraintUniqueId);
|
||||||
|
|
||||||
@@ -170,6 +172,10 @@ int b3PhysicsParamSetDefaultContactERP(b3SharedMemoryCommandHandle commandHandle
|
|||||||
int b3PhysicsParamSetNumSubSteps(b3SharedMemoryCommandHandle commandHandle, int numSubSteps);
|
int b3PhysicsParamSetNumSubSteps(b3SharedMemoryCommandHandle commandHandle, int numSubSteps);
|
||||||
int b3PhysicsParamSetRealTimeSimulation(b3SharedMemoryCommandHandle commandHandle, int enableRealTimeSimulation);
|
int b3PhysicsParamSetRealTimeSimulation(b3SharedMemoryCommandHandle commandHandle, int enableRealTimeSimulation);
|
||||||
int b3PhysicsParamSetNumSolverIterations(b3SharedMemoryCommandHandle commandHandle, int numSolverIterations);
|
int b3PhysicsParamSetNumSolverIterations(b3SharedMemoryCommandHandle commandHandle, int numSolverIterations);
|
||||||
|
int b3PhysicsParamSetCollisionFilterMode(b3SharedMemoryCommandHandle commandHandle, int filterMode);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int b3PhysicsParamSetUseSplitImpulse(b3SharedMemoryCommandHandle commandHandle, int useSplitImpulse);
|
int b3PhysicsParamSetUseSplitImpulse(b3SharedMemoryCommandHandle commandHandle, int useSplitImpulse);
|
||||||
int b3PhysicsParamSetSplitImpulsePenetrationThreshold(b3SharedMemoryCommandHandle commandHandle, double splitImpulsePenetrationThreshold);
|
int b3PhysicsParamSetSplitImpulsePenetrationThreshold(b3SharedMemoryCommandHandle commandHandle, double splitImpulsePenetrationThreshold);
|
||||||
|
|
||||||
|
|||||||
@@ -3664,6 +3664,11 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
btMatrix3x3 childFrameBasis(childFrameOrn);
|
btMatrix3x3 childFrameBasis(childFrameOrn);
|
||||||
userConstraintPtr->m_mbConstraint->setFrameInB(childFrameBasis);
|
userConstraintPtr->m_mbConstraint->setFrameInB(childFrameBasis);
|
||||||
}
|
}
|
||||||
|
if (clientCmd.m_updateFlags & USER_CONSTRAINT_CHANGE_MAX_FORCE)
|
||||||
|
{
|
||||||
|
btScalar maxImp = clientCmd.m_userConstraintArguments.m_maxAppliedForce*m_data->m_physicsDeltaTime;
|
||||||
|
userConstraintPtr->m_mbConstraint->setMaxAppliedImpulse(maxImp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (userConstraintPtr->m_rbConstraint)
|
if (userConstraintPtr->m_rbConstraint)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -540,6 +540,8 @@ enum EnumUserConstraintFlags
|
|||||||
USER_CONSTRAINT_CHANGE_CONSTRAINT=4,
|
USER_CONSTRAINT_CHANGE_CONSTRAINT=4,
|
||||||
USER_CONSTRAINT_CHANGE_PIVOT_IN_B=8,
|
USER_CONSTRAINT_CHANGE_PIVOT_IN_B=8,
|
||||||
USER_CONSTRAINT_CHANGE_FRAME_ORN_IN_B=16,
|
USER_CONSTRAINT_CHANGE_FRAME_ORN_IN_B=16,
|
||||||
|
USER_CONSTRAINT_CHANGE_MAX_FORCE=32,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UserConstraintArgs
|
struct UserConstraintArgs
|
||||||
@@ -552,6 +554,7 @@ struct UserConstraintArgs
|
|||||||
double m_childFrame[7];
|
double m_childFrame[7];
|
||||||
double m_jointAxis[3];
|
double m_jointAxis[3];
|
||||||
int m_jointType;
|
int m_jointType;
|
||||||
|
double m_maxAppliedForce;
|
||||||
int m_userConstraintUniqueId;
|
int m_userConstraintUniqueId;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -542,12 +542,15 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar
|
|||||||
int useSplitImpulse = -1;
|
int useSplitImpulse = -1;
|
||||||
double splitImpulsePenetrationThreshold = -1;
|
double splitImpulsePenetrationThreshold = -1;
|
||||||
int numSubSteps = -1;
|
int numSubSteps = -1;
|
||||||
|
int collisionFilterMode = -1;
|
||||||
|
|
||||||
b3PhysicsClientHandle sm = 0;
|
b3PhysicsClientHandle sm = 0;
|
||||||
|
|
||||||
int physicsClientId = 0;
|
int physicsClientId = 0;
|
||||||
static char *kwlist[] = { "fixedTimeStep", "numSolverIterations","useSplitImpulse","splitImpulsePenetrationThreshold", "numSubSteps","physicsClientId", NULL };
|
static char *kwlist[] = { "fixedTimeStep", "numSolverIterations","useSplitImpulse","splitImpulsePenetrationThreshold", "numSubSteps","collisionFilterMode", "physicsClientId", NULL };
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diidii", kwlist,&fixedTimeStep,&numSolverIterations,&useSplitImpulse,&splitImpulsePenetrationThreshold,&numSubSteps,&physicsClientId))
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diidiii", kwlist,&fixedTimeStep,&numSolverIterations,&useSplitImpulse,&splitImpulsePenetrationThreshold,&numSubSteps,
|
||||||
|
&collisionFilterMode, &physicsClientId))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -567,6 +570,10 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar
|
|||||||
{
|
{
|
||||||
b3PhysicsParamSetNumSolverIterations(command, numSolverIterations);
|
b3PhysicsParamSetNumSolverIterations(command, numSolverIterations);
|
||||||
}
|
}
|
||||||
|
if (collisionFilterMode>=0)
|
||||||
|
{
|
||||||
|
b3PhysicsParamSetCollisionFilterMode(command, collisionFilterMode);
|
||||||
|
}
|
||||||
if (numSubSteps >= 0)
|
if (numSubSteps >= 0)
|
||||||
{
|
{
|
||||||
b3PhysicsParamSetNumSubSteps(command, numSubSteps);
|
b3PhysicsParamSetNumSubSteps(command, numSubSteps);
|
||||||
@@ -3016,7 +3023,7 @@ static PyObject* pybullet_getClosestPointData(PyObject* self, PyObject* args, Py
|
|||||||
|
|
||||||
static PyObject* pybullet_changeUserConstraint(PyObject* self, PyObject* args, PyObject *keywds)
|
static PyObject* pybullet_changeUserConstraint(PyObject* self, PyObject* args, PyObject *keywds)
|
||||||
{
|
{
|
||||||
static char *kwlist[] = { "userConstraintUniqueId","jointChildPivot", "jointChildFrameOrientation", "physicsClientId", NULL};
|
static char *kwlist[] = { "userConstraintUniqueId","jointChildPivot", "jointChildFrameOrientation","maxForce", "physicsClientId", NULL};
|
||||||
int userConstraintUniqueId=-1;
|
int userConstraintUniqueId=-1;
|
||||||
b3SharedMemoryCommandHandle commandHandle;
|
b3SharedMemoryCommandHandle commandHandle;
|
||||||
b3SharedMemoryStatusHandle statusHandle;
|
b3SharedMemoryStatusHandle statusHandle;
|
||||||
@@ -3027,8 +3034,9 @@ static PyObject* pybullet_changeUserConstraint(PyObject* self, PyObject* args, P
|
|||||||
PyObject* jointChildFrameOrnObj=0;
|
PyObject* jointChildFrameOrnObj=0;
|
||||||
double jointChildPivot[3];
|
double jointChildPivot[3];
|
||||||
double jointChildFrameOrn[4];
|
double jointChildFrameOrn[4];
|
||||||
|
double maxForce = -1;
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|OOi", kwlist,&userConstraintUniqueId,&jointChildPivotObj, &jointChildFrameOrnObj,&physicsClientId))
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|OOdi", kwlist,&userConstraintUniqueId,&jointChildPivotObj, &jointChildFrameOrnObj,&maxForce, &physicsClientId))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -3050,6 +3058,10 @@ static PyObject* pybullet_changeUserConstraint(PyObject* self, PyObject* args, P
|
|||||||
{
|
{
|
||||||
b3InitChangeUserConstraintSetFrameInB(commandHandle, jointChildFrameOrn);
|
b3InitChangeUserConstraintSetFrameInB(commandHandle, jointChildFrameOrn);
|
||||||
}
|
}
|
||||||
|
if (maxForce>=0)
|
||||||
|
{
|
||||||
|
b3InitChangeUserConstraintSetMaxForce(commandHandle,maxForce);
|
||||||
|
}
|
||||||
|
|
||||||
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
|
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
|
||||||
statusType = b3GetStatusType(statusHandle);
|
statusType = b3GetStatusType(statusHandle);
|
||||||
|
|||||||
Reference in New Issue
Block a user