diff --git a/examples/Importers/ImportURDFDemo/LinkVisualShapesConverter.h b/examples/Importers/ImportURDFDemo/LinkVisualShapesConverter.h index 8f3d3c411..edc7559ba 100644 --- a/examples/Importers/ImportURDFDemo/LinkVisualShapesConverter.h +++ b/examples/Importers/ImportURDFDemo/LinkVisualShapesConverter.h @@ -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 diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 578086f54..4162cab19 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -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); diff --git a/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp b/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp index 5e9579c08..c892884d2 100644 --- a/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp +++ b/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp @@ -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;om_renderObjects.size();o++) + { + delete ptr->m_renderObjects[o]; + } + } + delete ptr; + m_data->m_swRenderInstances.remove(colObj); + } +} + void TinyRendererVisualShapeConverter::resetAll() { diff --git a/examples/SharedMemory/TinyRendererVisualShapeConverter.h b/examples/SharedMemory/TinyRendererVisualShapeConverter.h index e9e60948f..6771dc624 100644 --- a/examples/SharedMemory/TinyRendererVisualShapeConverter.h +++ b/examples/SharedMemory/TinyRendererVisualShapeConverter.h @@ -17,11 +17,13 @@ struct TinyRendererVisualShapeConverter : public LinkVisualShapesConverter virtual ~TinyRendererVisualShapeConverter(); virtual void convertVisualShapes(int linkIndex, const char* pathPrefix, const btTransform& localInertiaFrame, const UrdfLink* linkPtr, const UrdfModel* model, class btCollisionObject* colShape, int objectIndex); - + virtual int getNumVisualShapes(int bodyUniqueId); 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);