remove visual shape from CPU/TinyRenderer with removeBody
(thanks to Jeff Bingham for reporting the bug!)
This commit is contained in:
@@ -9,6 +9,9 @@ class btCollisionObject;
|
||||
struct LinkVisualShapesConverter
|
||||
{
|
||||
virtual void convertVisualShapes(int linkIndex, const char* pathPrefix, const btTransform& localInertiaFrame, const UrdfLink* linkPtr, const UrdfModel* model, class btCollisionObject* colShape, int objectIndex) =0;
|
||||
|
||||
virtual void removeVisualShape(class btCollisionObject* colObj)=0;
|
||||
|
||||
};
|
||||
|
||||
#endif //LINK_VISUAL_SHAPES_CONVERTER_H
|
||||
|
||||
@@ -5101,6 +5101,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
||||
|
||||
if (bodyHandle->m_multiBody->getBaseCollider())
|
||||
{
|
||||
m_data->m_visualConverter.removeVisualShape(bodyHandle->m_multiBody->getBaseCollider());
|
||||
m_data->m_dynamicsWorld->removeCollisionObject(bodyHandle->m_multiBody->getBaseCollider());
|
||||
int graphicsIndex = bodyHandle->m_multiBody->getBaseCollider()->getUserIndex();
|
||||
m_data->m_guiHelper->removeGraphicsInstance(graphicsIndex);
|
||||
@@ -5110,6 +5111,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
||||
|
||||
if (bodyHandle->m_multiBody->getLink(link).m_collider)
|
||||
{
|
||||
m_data->m_visualConverter.removeVisualShape(bodyHandle->m_multiBody->getLink(link).m_collider);
|
||||
m_data->m_dynamicsWorld->removeCollisionObject(bodyHandle->m_multiBody->getLink(link).m_collider);
|
||||
int graphicsIndex = bodyHandle->m_multiBody->getLink(link).m_collider->getUserIndex();
|
||||
m_data->m_guiHelper->removeGraphicsInstance(graphicsIndex);
|
||||
@@ -5126,6 +5128,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
||||
}
|
||||
if (bodyHandle->m_rigidBody)
|
||||
{
|
||||
m_data->m_visualConverter.removeVisualShape(bodyHandle->m_rigidBody);
|
||||
serverCmd.m_removeObjectArgs.m_bodyUniqueIds[serverCmd.m_removeObjectArgs.m_numBodies++] = bodyUniqueId;
|
||||
//todo: clear all other remaining data...
|
||||
m_data->m_dynamicsWorld->removeRigidBody(bodyHandle->m_rigidBody);
|
||||
|
||||
@@ -972,6 +972,24 @@ void TinyRendererVisualShapeConverter::copyCameraImageData(unsigned char* pixels
|
||||
}
|
||||
}
|
||||
|
||||
void TinyRendererVisualShapeConverter::removeVisualShape(class btCollisionObject* colObj)
|
||||
{
|
||||
TinyRendererObjectArray** ptrptr = m_data->m_swRenderInstances[colObj];
|
||||
if (ptrptr && *ptrptr)
|
||||
{
|
||||
TinyRendererObjectArray* ptr = *ptrptr;
|
||||
if (ptr)
|
||||
{
|
||||
for (int o=0;o<ptr->m_renderObjects.size();o++)
|
||||
{
|
||||
delete ptr->m_renderObjects[o];
|
||||
}
|
||||
}
|
||||
delete ptr;
|
||||
m_data->m_swRenderInstances.remove(colObj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TinyRendererVisualShapeConverter::resetAll()
|
||||
{
|
||||
|
||||
@@ -22,6 +22,8 @@ struct TinyRendererVisualShapeConverter : public LinkVisualShapesConverter
|
||||
|
||||
virtual int getVisualShapesData(int bodyUniqueId, int shapeIndex, struct b3VisualShapeData* shapeData);
|
||||
|
||||
virtual void removeVisualShape(class btCollisionObject* colObj);
|
||||
|
||||
void setUpAxis(int axis);
|
||||
|
||||
void resetCamera(float camDist, float pitch, float yaw, float camPosX,float camPosY, float camPosZ);
|
||||
|
||||
Reference in New Issue
Block a user