From 6bf3988837e9ae0570b389a7e2f6208e56427cfe Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Fri, 18 Dec 2009 01:13:33 +0000 Subject: [PATCH] SetLocalScaling propagates to btCompoundShape children now. Note that this issue might affect shared child shapes. See also Issue 96 http://code.google.com/p/bullet/issues/detail?id=96 Thanks chucksspencer for the patch --- .../CollisionShapes/btCompoundShape.cpp | 16 ++++++++++++++++ .../CollisionShapes/btCompoundShape.h | 6 ++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/BulletCollision/CollisionShapes/btCompoundShape.cpp b/src/BulletCollision/CollisionShapes/btCompoundShape.cpp index d77193874..292dbbfbf 100644 --- a/src/BulletCollision/CollisionShapes/btCompoundShape.cpp +++ b/src/BulletCollision/CollisionShapes/btCompoundShape.cpp @@ -264,3 +264,19 @@ void btCompoundShape::calculatePrincipalAxisTransform(btScalar* masses, btTransf +void btCompoundShape::setLocalScaling(const btVector3& scaling) +{ + m_localScaling = scaling; + + for(int i = 0; i < m_children.size(); i++) + { + btTransform childTrans = getChildTransform(i); + btVector3 childScale = m_children[i].m_childShape->getLocalScaling(); + childScale = childScale * (childTrans.getBasis() * scaling); + m_children[i].m_childShape->setLocalScaling(childScale); + childTrans.setOrigin((childTrans.getOrigin())*scaling); + updateChildTransform(i, childTrans); + recalculateLocalAabb(); + } + +} diff --git a/src/BulletCollision/CollisionShapes/btCompoundShape.h b/src/BulletCollision/CollisionShapes/btCompoundShape.h index 577ef9513..eea1cac39 100644 --- a/src/BulletCollision/CollisionShapes/btCompoundShape.h +++ b/src/BulletCollision/CollisionShapes/btCompoundShape.h @@ -116,10 +116,8 @@ public: Use this yourself if you modify the children or their transforms. */ virtual void recalculateLocalAabb(); - virtual void setLocalScaling(const btVector3& scaling) - { - m_localScaling = scaling; - } + virtual void setLocalScaling(const btVector3& scaling); + virtual const btVector3& getLocalScaling() const { return m_localScaling;