fix body name in GUI more

expose getBodyInfo to b3RobotSimulatorClientAPI
This commit is contained in:
Erwin Coumans
2017-03-03 11:33:20 -08:00
parent 3d43ab1bad
commit 7cb5898db6
4 changed files with 43 additions and 2 deletions

View File

@@ -24,6 +24,10 @@ int main(int argc, char* argv[])
sim->setGravity(b3MakeVector3(0,0,-10)); sim->setGravity(b3MakeVector3(0,0,-10));
int blockId = sim->loadURDF("cube.urdf");
b3BodyInfo bodyInfo;
sim->getBodyInfo(blockId,&bodyInfo);
sim->loadURDF("plane.urdf"); sim->loadURDF("plane.urdf");
MinitaurSetup minitaur; MinitaurSetup minitaur;

View File

@@ -342,6 +342,12 @@ bool b3RobotSimulatorClientAPI::loadMJCF(const std::string& fileName, b3RobotSim
bool b3RobotSimulatorClientAPI::loadBullet(const std::string& fileName, b3RobotSimulatorLoadFileResults& results) bool b3RobotSimulatorClientAPI::loadBullet(const std::string& fileName, b3RobotSimulatorLoadFileResults& results)
{ {
if (!isConnected())
{
b3Warning("Not connected");
return false;
}
b3SharedMemoryStatusHandle statusHandle; b3SharedMemoryStatusHandle statusHandle;
int statusType; int statusType;
b3SharedMemoryCommandHandle command; b3SharedMemoryCommandHandle command;
@@ -397,9 +403,26 @@ bool b3RobotSimulatorClientAPI::loadSDF(const std::string& fileName, b3RobotSimu
return statusOk; return statusOk;
} }
bool b3RobotSimulatorClientAPI::getBodyInfo(int bodyUniqueId, struct b3BodyInfo* bodyInfo)
{
if (!isConnected())
{
b3Warning("Not connected");
return false;
}
int result = b3GetBodyInfo(m_data->m_physicsClientHandle, bodyUniqueId, bodyInfo);
return (result != 0);
}
bool b3RobotSimulatorClientAPI::getBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation) const bool b3RobotSimulatorClientAPI::getBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation) const
{ {
if (!isConnected())
{
b3Warning("Not connected");
return false;
}
b3SharedMemoryCommandHandle cmd_handle = b3SharedMemoryCommandHandle cmd_handle =
b3RequestActualStateCommandInit(m_data->m_physicsClientHandle, bodyUniqueId); b3RequestActualStateCommandInit(m_data->m_physicsClientHandle, bodyUniqueId);
b3SharedMemoryStatusHandle status_handle = b3SharedMemoryStatusHandle status_handle =
@@ -431,6 +454,12 @@ bool b3RobotSimulatorClientAPI::getBasePositionAndOrientation(int bodyUniqueId,
bool b3RobotSimulatorClientAPI::resetBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation) bool b3RobotSimulatorClientAPI::resetBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation)
{ {
if (!isConnected())
{
b3Warning("Not connected");
return false;
}
b3SharedMemoryCommandHandle commandHandle; b3SharedMemoryCommandHandle commandHandle;
commandHandle = b3CreatePoseCommandInit(m_data->m_physicsClientHandle, bodyUniqueId); commandHandle = b3CreatePoseCommandInit(m_data->m_physicsClientHandle, bodyUniqueId);

View File

@@ -150,6 +150,8 @@ public:
bool loadMJCF(const std::string& fileName, b3RobotSimulatorLoadFileResults& results); bool loadMJCF(const std::string& fileName, b3RobotSimulatorLoadFileResults& results);
bool loadBullet(const std::string& fileName, b3RobotSimulatorLoadFileResults& results); bool loadBullet(const std::string& fileName, b3RobotSimulatorLoadFileResults& results);
bool getBodyInfo(int bodyUniqueId, struct b3BodyInfo* bodyInfo);
bool getBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation) const; bool getBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation) const;
bool resetBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation); bool resetBasePositionAndOrientation(int bodyUniqueId, b3Vector3& basePosition, b3Quaternion& baseOrientation);

View File

@@ -414,13 +414,19 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
if ((flag & bParse::FD_DOUBLE_PRECISION) != 0) { if ((flag & bParse::FD_DOUBLE_PRECISION) != 0) {
Bullet::btMultiBodyDoubleData* mb = Bullet::btMultiBodyDoubleData* mb =
(Bullet::btMultiBodyDoubleData*)bf.m_multiBodies[i]; (Bullet::btMultiBodyDoubleData*)bf.m_multiBodies[i];
if (mb->m_baseName)
{
bodyJoints->m_baseName = mb->m_baseName;
}
addJointInfoFromMultiBodyData(mb,bodyJoints, m_data->m_verboseOutput); addJointInfoFromMultiBodyData(mb,bodyJoints, m_data->m_verboseOutput);
} else } else
{ {
Bullet::btMultiBodyFloatData* mb = Bullet::btMultiBodyFloatData* mb =
(Bullet::btMultiBodyFloatData*)bf.m_multiBodies[i]; (Bullet::btMultiBodyFloatData*)bf.m_multiBodies[i];
if (mb->m_baseName)
{
bodyJoints->m_baseName = mb->m_baseName;
}
addJointInfoFromMultiBodyData(mb,bodyJoints, m_data->m_verboseOutput); addJointInfoFromMultiBodyData(mb,bodyJoints, m_data->m_verboseOutput);
} }
} }