From c6524b3fb55ee1df0325a4c4915172d3a0e7f284 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Thu, 18 Nov 2010 01:03:42 +0000 Subject: [PATCH] fix for re-scaling a btConeShape Thanks to promyclon for the report and patch, see Issue 448 --- src/BulletCollision/CollisionShapes/btConeShape.cpp | 10 ++++++++++ src/BulletCollision/CollisionShapes/btConeShape.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/src/BulletCollision/CollisionShapes/btConeShape.cpp b/src/BulletCollision/CollisionShapes/btConeShape.cpp index dfa3f941e..5e83087b3 100644 --- a/src/BulletCollision/CollisionShapes/btConeShape.cpp +++ b/src/BulletCollision/CollisionShapes/btConeShape.cpp @@ -131,3 +131,13 @@ btVector3 btConeShape::localGetSupportingVertex(const btVector3& vec) const } +void btConeShape::setLocalScaling(const btVector3& scaling) +{ + int axis = m_coneIndices[1]; + int r1 = m_coneIndices[0]; + int r2 = m_coneIndices[2]; + m_height *= scaling[axis] / m_localScaling[axis]; + m_radius *= (scaling[r1] / m_localScaling[r1] + scaling[r2] / m_localScaling[r2]) / 2; + m_sinAngle = (m_radius / btSqrt(m_radius * m_radius + m_height * m_height)); + btConvexInternalShape::setLocalScaling(scaling); +} \ No newline at end of file diff --git a/src/BulletCollision/CollisionShapes/btConeShape.h b/src/BulletCollision/CollisionShapes/btConeShape.h index 9766c7ef2..bd7d1443a 100644 --- a/src/BulletCollision/CollisionShapes/btConeShape.h +++ b/src/BulletCollision/CollisionShapes/btConeShape.h @@ -81,6 +81,9 @@ public: { return m_coneIndices[1]; } + + virtual void setLocalScaling(const btVector3& scaling); + }; ///btConeShape implements a Cone shape, around the X axis