Revision: 17002
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17002
Author: erwin
Date: 2008-10-10 07:12:57 +0200 (Fri, 10 Oct 2008)
Log Message:
-----------
Fix bug in rigid body constraint buttons drawing, and while we are at it, add
'Collision' button to disable collisions between bodies, linked between
constraint.
Modified Paths:
--------------
trunk/blender/source/blender/makesdna/DNA_constraint_types.h
trunk/blender/source/blender/src/buttons_object.c
trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
trunk/blender/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
Modified: trunk/blender/source/blender/makesdna/DNA_constraint_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_constraint_types.h
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/blender/makesdna/DNA_constraint_types.h
2008-10-10 05:12:57 UTC (rev 17002)
@@ -520,6 +520,7 @@
/* Rigid-Body Constraint */
#define CONSTRAINT_DRAW_PIVOT 0x40
+#define CONSTRAINT_DISABLE_LINKED_COLLISION 0x80
/* important: these defines need to match up with PHY_DynamicTypes headerfile
*/
#define CONSTRAINT_RB_BALL 1
Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c 2008-10-10 02:59:09 UTC
(rev 17001)
+++ trunk/blender/source/blender/src/buttons_object.c 2008-10-10 05:12:57 UTC
(rev 17002)
@@ -1497,16 +1497,20 @@
int offsetY = 150;
int textButWidth = ((width/2)-togButWidth);
- uiDefButI(block, MENU, B_CONSTRAINT_TEST,
"Joint Types%t|Ball%x1|Hinge%x2|Cone Twist%x4|Generic
(experimental)%x12",//|Extra Force%x6",
-
*xco, *yco-25, 150, 18, &data->type, 0, 0, 0, 0, "Choose the
joint type");
height = 140;
if (data->type==CONSTRAINT_RB_GENERIC6DOF)
height = 270;
if (data->type==CONSTRAINT_RB_CONETWIST)
height = 200;
- uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height,
width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, "");
-
+ uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10,
*yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, "");
+
+ uiDefButI(block, MENU, B_CONSTRAINT_TEST,
"Joint Types%t|Ball%x1|Hinge%x2|Cone Twist%x4|Generic
(experimental)%x12",//|Extra Force%x6",
+
*xco, *yco-25, 150, 18, &data->type, 0, 0, 0, 0, "Choose the
joint type");
+
+ uiDefButBitS(block, TOG,
CONSTRAINT_DISABLE_LINKED_COLLISION, B_CONSTRAINT_TEST, "Collision", *xco+155,
*yco-25, 111, 18, &data->flag, 0, 24, 0, 0, "Enable Collision Between Linked
Bodies");
+
+
uiDefIDPoinBut(block, test_obpoin_but, ID_OB,
B_CONSTRAINT_CHANGETARGET, "toObject:", *xco, *yco-50, 130, 18, &data->tar,
"Child Object");
uiDefButBitS(block, TOG, CONSTRAINT_DRAW_PIVOT,
B_CONSTRAINT_TEST, "ShowPivot", *xco+135, *yco-50, 130, 18, &data->flag, 0, 24,
0, 0, "Show pivot position and rotation");
@@ -1586,6 +1590,7 @@
uiDefButF(block, NUM,
B_CONSTRAINT_TEST, "", *xco+(width-textButWidth-5), *yco-offsetY,
(textButWidth), 18, &(data->maxLimit[5]), -extremeAngZ, extremeAngZ,
0.1,0.5,"max z limit");
uiBlockEndAlign(block);
}
+
}
break;
case CONSTRAINT_TYPE_CLAMPTO:
Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
2008-10-10 05:12:57 UTC (rev 17002)
@@ -2478,7 +2478,7 @@
(float)dat->pivY,(float)dat->pivZ,
(float)axis0.x(),(float)axis0.y(),(float)axis0.z(),
(float)axis1.x(),(float)axis1.y(),(float)axis1.z(),
-
(float)axis2.x(),(float)axis2.y(),(float)axis2.z());
+
(float)axis2.x(),(float)axis2.y(),(float)axis2.z(),dat->flag);
if (constraintId)
{
//if it is a
generic 6DOF constraint, set all the limits accordingly
Modified: trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
2008-10-10 05:12:57 UTC (rev 17002)
@@ -435,7 +435,7 @@
PHY_IPhysicsController* physctrl2 =
(PHY_IPhysicsController*) physicsid2;
if (physctrl) //TODO:check for existance of this
pointer!
{
- int constraintid =
PHY_GetActiveEnvironment()->createConstraint(physctrl,physctrl2,(enum
PHY_ConstraintType)constrainttype,pivotX,pivotY,pivotZ,axisX,axisY,axisZ);
+ int constraintid =
PHY_GetActiveEnvironment()->createConstraint(physctrl,physctrl2,(enum
PHY_ConstraintType)constrainttype,pivotX,pivotY,pivotZ,axisX,axisY,axisZ,0);
KX_ConstraintWrapper* wrap = new
KX_ConstraintWrapper((enum
PHY_ConstraintType)constrainttype,constraintid,PHY_GetActiveEnvironment());
Modified:
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
2008-10-10 05:12:57 UTC (rev 17002)
@@ -33,6 +33,7 @@
#include "PHY_IMotionState.h"
+#define CCD_CONSTRAINT_DISABLE_LINKED_COLLISION 0x80
bool useIslands = true;
@@ -882,13 +883,16 @@
const btVector3&
linearMinLimits,
const btVector3&
linearMaxLimits,
const btVector3&
angularMinLimits,
- const btVector3&
angularMaxLimits
+ const btVector3&
angularMaxLimits,int flags
)
{
+ bool disableCollisionBetweenLinkedBodies = (0==(flags &
CCD_CONSTRAINT_DISABLE_LINKED_COLLISION));
+
//we could either add some logic to recognize ball-socket and hinge, or
let that up to the user
//perhaps some warning or hint that hinge/ball-socket is more efficient?
+
btGeneric6DofConstraint* genericConstraint = 0;
CcdPhysicsController* ctrl0 = (CcdPhysicsController*) ctrlRef;
CcdPhysicsController* ctrl1 = (CcdPhysicsController*) ctrlOther;
@@ -918,7 +922,7 @@
if (genericConstraint)
{
// m_constraints.push_back(genericConstraint);
- m_dynamicsWorld->addConstraint(genericConstraint);
+
m_dynamicsWorld->addConstraint(genericConstraint,disableCollisionBetweenLinkedBodies);
genericConstraint->setUserConstraintId(gConstraintUid++);
genericConstraint->setUserConstraintType(PHY_GENERIC_6DOF_CONSTRAINT);
@@ -1488,11 +1492,14 @@
float pivotX,float pivotY,float pivotZ,
float axisX,float axisY,float axisZ,
float axis1X,float axis1Y,float axis1Z,
-
float axis2X,float axis2Y,float axis2Z
+
float axis2X,float axis2Y,float axis2Z,int flags
)
{
+ bool disableCollisionBetweenLinkedBodies = (0==(flags &
CCD_CONSTRAINT_DISABLE_LINKED_COLLISION));
+
+
CcdPhysicsController* c0 = (CcdPhysicsController*)ctrl0;
CcdPhysicsController* c1 = (CcdPhysicsController*)ctrl1;
@@ -1683,7 +1690,7 @@
pivotInA);
}
- m_dynamicsWorld->addConstraint(p2p);
+
m_dynamicsWorld->addConstraint(p2p,disableCollisionBetweenLinkedBodies);
// m_constraints.push_back(p2p);
p2p->setUserConstraintId(gConstraintUid++);
@@ -1753,7 +1760,7 @@
if (genericConstraint)
{
//m_constraints.push_back(genericConstraint);
-
m_dynamicsWorld->addConstraint(genericConstraint);
+
m_dynamicsWorld->addConstraint(genericConstraint,disableCollisionBetweenLinkedBodies);
genericConstraint->setUserConstraintId(gConstraintUid++);
genericConstraint->setUserConstraintType(type);
//64 bit systems can't cast pointer to int.
could use size_t instead.
@@ -1819,7 +1826,7 @@
if (coneTwistContraint)
{
//m_constraints.push_back(genericConstraint);
-
m_dynamicsWorld->addConstraint(coneTwistContraint);
+
m_dynamicsWorld->addConstraint(coneTwistContraint,disableCollisionBetweenLinkedBodies);
coneTwistContraint->setUserConstraintId(gConstraintUid++);
coneTwistContraint->setUserConstraintType(type);
//64 bit systems can't cast pointer to int.
could use size_t instead.
@@ -1858,7 +1865,7 @@
hinge->setAngularOnly(angularOnly);
//m_constraints.push_back(hinge);
- m_dynamicsWorld->addConstraint(hinge);
+
m_dynamicsWorld->addConstraint(hinge,disableCollisionBetweenLinkedBodies);
hinge->setUserConstraintId(gConstraintUid++);
hinge->setUserConstraintType(type);
//64 bit systems can't cast pointer to int. could use
size_t instead.
Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
2008-10-10 05:12:57 UTC (rev 17002)
@@ -127,7 +127,7 @@
float pivotX,float pivotY,float pivotZ,
float axisX,float axisY,float axisZ,
float axis1X=0,float axis1Y=0,float axis1Z=0,
- float axis2X=0,float axis2Y=0,float axis2Z=0
+ float axis2X=0,float axis2Y=0,float axis2Z=0,int flag=0
);
@@ -139,7 +139,7 @@
const btVector3& linearMinLimits,
const btVector3& linearMaxLimits,
const btVector3& angularMinLimits,
- const btVector3& angularMaxLimits
+ const btVector3& angularMaxLimits,int flags
);
virtual void setConstraintParam(int constraintId,int
param,float value,float value1);
Modified:
trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
2008-10-10 05:12:57 UTC (rev 17002)
@@ -92,8 +92,7 @@
int DummyPhysicsEnvironment::createConstraint(class
PHY_IPhysicsController* ctrl,class PHY_IPhysicsController*
ctrl2,PHY_ConstraintType type,
float pivotX,float pivotY,float pivotZ,float axisX,float
axisY,float axisZ,
float axis1X,float axis1Y,float axis1Z,
- float axis2X,float axis2Y,float axis2Z
-
+ float axis2X,float axis2Y,float axis2Z,int flag
)
{
Modified:
trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
2008-10-10 02:59:09 UTC (rev 17001)
+++ trunk/blender/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
2008-10-10 05:12:57 UTC (rev 17002)
@@ -58,7 +58,7 @@
float pivotX,float pivotY,float pivotZ,
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs