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
|
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 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
|
#endif //LINK_VISUAL_SHAPES_CONVERTER_H
|
||||||
|
|||||||
@@ -5101,6 +5101,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
if (bodyHandle->m_multiBody->getBaseCollider())
|
if (bodyHandle->m_multiBody->getBaseCollider())
|
||||||
{
|
{
|
||||||
|
m_data->m_visualConverter.removeVisualShape(bodyHandle->m_multiBody->getBaseCollider());
|
||||||
m_data->m_dynamicsWorld->removeCollisionObject(bodyHandle->m_multiBody->getBaseCollider());
|
m_data->m_dynamicsWorld->removeCollisionObject(bodyHandle->m_multiBody->getBaseCollider());
|
||||||
int graphicsIndex = bodyHandle->m_multiBody->getBaseCollider()->getUserIndex();
|
int graphicsIndex = bodyHandle->m_multiBody->getBaseCollider()->getUserIndex();
|
||||||
m_data->m_guiHelper->removeGraphicsInstance(graphicsIndex);
|
m_data->m_guiHelper->removeGraphicsInstance(graphicsIndex);
|
||||||
@@ -5110,6 +5111,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
if (bodyHandle->m_multiBody->getLink(link).m_collider)
|
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);
|
m_data->m_dynamicsWorld->removeCollisionObject(bodyHandle->m_multiBody->getLink(link).m_collider);
|
||||||
int graphicsIndex = bodyHandle->m_multiBody->getLink(link).m_collider->getUserIndex();
|
int graphicsIndex = bodyHandle->m_multiBody->getLink(link).m_collider->getUserIndex();
|
||||||
m_data->m_guiHelper->removeGraphicsInstance(graphicsIndex);
|
m_data->m_guiHelper->removeGraphicsInstance(graphicsIndex);
|
||||||
@@ -5126,6 +5128,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
if (bodyHandle->m_rigidBody)
|
if (bodyHandle->m_rigidBody)
|
||||||
{
|
{
|
||||||
|
m_data->m_visualConverter.removeVisualShape(bodyHandle->m_rigidBody);
|
||||||
serverCmd.m_removeObjectArgs.m_bodyUniqueIds[serverCmd.m_removeObjectArgs.m_numBodies++] = bodyUniqueId;
|
serverCmd.m_removeObjectArgs.m_bodyUniqueIds[serverCmd.m_removeObjectArgs.m_numBodies++] = bodyUniqueId;
|
||||||
//todo: clear all other remaining data...
|
//todo: clear all other remaining data...
|
||||||
m_data->m_dynamicsWorld->removeRigidBody(bodyHandle->m_rigidBody);
|
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()
|
void TinyRendererVisualShapeConverter::resetAll()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,11 +17,13 @@ struct TinyRendererVisualShapeConverter : public LinkVisualShapesConverter
|
|||||||
virtual ~TinyRendererVisualShapeConverter();
|
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 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 getNumVisualShapes(int bodyUniqueId);
|
||||||
|
|
||||||
virtual int getVisualShapesData(int bodyUniqueId, int shapeIndex, struct b3VisualShapeData* shapeData);
|
virtual int getVisualShapesData(int bodyUniqueId, int shapeIndex, struct b3VisualShapeData* shapeData);
|
||||||
|
|
||||||
|
virtual void removeVisualShape(class btCollisionObject* colObj);
|
||||||
|
|
||||||
void setUpAxis(int axis);
|
void setUpAxis(int axis);
|
||||||
|
|
||||||
void resetCamera(float camDist, float pitch, float yaw, float camPosX,float camPosY, float camPosZ);
|
void resetCamera(float camDist, float pitch, float yaw, float camPosX,float camPosY, float camPosZ);
|
||||||
|
|||||||
Reference in New Issue
Block a user