add starting point for btGeneric6DofSpring2ConstraintData import, not all parameters are deserialized though
restore activation state after picking add .bullet file import (only tested/available on Windows)
This commit is contained in:
@@ -953,6 +953,64 @@ void btWorldImporter::convertConstraintFloat(btTypedConstraintFloatData* constra
|
||||
constraint = gear;
|
||||
break;
|
||||
}
|
||||
case D6_SPRING_2_CONSTRAINT_TYPE:
|
||||
{
|
||||
|
||||
btGeneric6DofSpring2ConstraintData* dofData = (btGeneric6DofSpring2ConstraintData*)constraintData;
|
||||
|
||||
btGeneric6DofSpring2Constraint* dof = 0;
|
||||
|
||||
if (rbA && rbB)
|
||||
{
|
||||
btTransform rbAFrame,rbBFrame;
|
||||
rbAFrame.deSerializeFloat(dofData->m_rbAFrame);
|
||||
rbBFrame.deSerializeFloat(dofData->m_rbBFrame);
|
||||
dof = createGeneric6DofSpring2Constraint(*rbA,*rbB,rbAFrame,rbBFrame, dofData->m_rotateOrder);
|
||||
} else
|
||||
{
|
||||
printf("Error in btWorldImporter::createGeneric6DofSpring2Constraint: requires rbA && rbB\n");
|
||||
}
|
||||
|
||||
if (dof)
|
||||
{
|
||||
btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit;
|
||||
angLowerLimit.deSerializeFloat(dofData->m_angularLowerLimit);
|
||||
angUpperLimit.deSerializeFloat(dofData->m_angularUpperLimit);
|
||||
linLowerLimit.deSerializeFloat(dofData->m_linearLowerLimit);
|
||||
linUpperlimit.deSerializeFloat(dofData->m_linearUpperLimit);
|
||||
|
||||
angLowerLimit.setW(0.f);
|
||||
dof->setAngularLowerLimit(angLowerLimit);
|
||||
dof->setAngularUpperLimit(angUpperLimit);
|
||||
dof->setLinearLowerLimit(linLowerLimit);
|
||||
dof->setLinearUpperLimit(linUpperlimit);
|
||||
|
||||
int i;
|
||||
if (fileVersion>280)
|
||||
{
|
||||
//6-dof: 3 linear followed by 3 angular
|
||||
for (i=0;i<3;i++)
|
||||
{
|
||||
dof->setStiffness(i,dofData->m_linearSpringStiffness.m_floats[i]);
|
||||
dof->setEquilibriumPoint(i,dofData->m_linearEquilibriumPoint.m_floats[i]);
|
||||
dof->enableSpring(i,dofData->m_linearEnableSpring[i]!=0);
|
||||
dof->setDamping(i,dofData->m_linearSpringDamping.m_floats[i]);
|
||||
}
|
||||
for (i=0;i<3;i++)
|
||||
{
|
||||
dof->setStiffness(i+3,dofData->m_angularSpringStiffness.m_floats[i]);
|
||||
dof->setEquilibriumPoint(i+3,dofData->m_angularEquilibriumPoint.m_floats[i]);
|
||||
dof->enableSpring(i+3,dofData->m_angularEnableSpring[i]!=0);
|
||||
dof->setDamping(i+3,dofData->m_angularSpringDamping.m_floats[i]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
constraint = dof;
|
||||
break;
|
||||
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("unknown constraint type\n");
|
||||
@@ -1193,6 +1251,65 @@ void btWorldImporter::convertConstraintDouble(btTypedConstraintDoubleData* const
|
||||
constraint = gear;
|
||||
break;
|
||||
}
|
||||
|
||||
case D6_SPRING_2_CONSTRAINT_TYPE:
|
||||
{
|
||||
|
||||
btGeneric6DofSpring2ConstraintDoubleData2* dofData = (btGeneric6DofSpring2ConstraintDoubleData2*)constraintData;
|
||||
|
||||
btGeneric6DofSpring2Constraint* dof = 0;
|
||||
|
||||
if (rbA && rbB)
|
||||
{
|
||||
btTransform rbAFrame,rbBFrame;
|
||||
rbAFrame.deSerializeDouble(dofData->m_rbAFrame);
|
||||
rbBFrame.deSerializeDouble(dofData->m_rbBFrame);
|
||||
dof = createGeneric6DofSpring2Constraint(*rbA,*rbB,rbAFrame,rbBFrame, dofData->m_rotateOrder);
|
||||
} else
|
||||
{
|
||||
printf("Error in btWorldImporter::createGeneric6DofSpring2Constraint: requires rbA && rbB\n");
|
||||
}
|
||||
|
||||
if (dof)
|
||||
{
|
||||
btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit;
|
||||
angLowerLimit.deSerializeDouble(dofData->m_angularLowerLimit);
|
||||
angUpperLimit.deSerializeDouble(dofData->m_angularUpperLimit);
|
||||
linLowerLimit.deSerializeDouble(dofData->m_linearLowerLimit);
|
||||
linUpperlimit.deSerializeDouble(dofData->m_linearUpperLimit);
|
||||
|
||||
angLowerLimit.setW(0.f);
|
||||
dof->setAngularLowerLimit(angLowerLimit);
|
||||
dof->setAngularUpperLimit(angUpperLimit);
|
||||
dof->setLinearLowerLimit(linLowerLimit);
|
||||
dof->setLinearUpperLimit(linUpperlimit);
|
||||
|
||||
int i;
|
||||
if (fileVersion>280)
|
||||
{
|
||||
//6-dof: 3 linear followed by 3 angular
|
||||
for (i=0;i<3;i++)
|
||||
{
|
||||
dof->setStiffness(i,dofData->m_linearSpringStiffness.m_floats[i]);
|
||||
dof->setEquilibriumPoint(i,dofData->m_linearEquilibriumPoint.m_floats[i]);
|
||||
dof->enableSpring(i,dofData->m_linearEnableSpring[i]!=0);
|
||||
dof->setDamping(i,dofData->m_linearSpringDamping.m_floats[i]);
|
||||
}
|
||||
for (i=0;i<3;i++)
|
||||
{
|
||||
dof->setStiffness(i+3,dofData->m_angularSpringStiffness.m_floats[i]);
|
||||
dof->setEquilibriumPoint(i+3,dofData->m_angularEquilibriumPoint.m_floats[i]);
|
||||
dof->enableSpring(i+3,dofData->m_angularEnableSpring[i]!=0);
|
||||
dof->setDamping(i+3,dofData->m_angularSpringDamping.m_floats[i]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
constraint = dof;
|
||||
break;
|
||||
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("unknown constraint type\n");
|
||||
@@ -1711,6 +1828,15 @@ btGeneric6DofConstraint* btWorldImporter::createGeneric6DofConstraint(btRigidBod
|
||||
return dof;
|
||||
}
|
||||
|
||||
btGeneric6DofSpring2Constraint* btWorldImporter::createGeneric6DofSpring2Constraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, int rotateOrder)
|
||||
{
|
||||
btGeneric6DofSpring2Constraint* dof = new btGeneric6DofSpring2Constraint(rbA,rbB,frameInA,frameInB, (RotateOrder)rotateOrder);
|
||||
m_allocatedConstraints.push_back(dof);
|
||||
return dof;
|
||||
}
|
||||
|
||||
|
||||
|
||||
btGeneric6DofSpringConstraint* btWorldImporter::createGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA)
|
||||
{
|
||||
btGeneric6DofSpringConstraint* dof = new btGeneric6DofSpringConstraint(rbA,rbB,frameInA,frameInB,useLinearReferenceFrameA);
|
||||
|
||||
@@ -42,6 +42,7 @@ class btHingeConstraint;
|
||||
class btConeTwistConstraint;
|
||||
class btGeneric6DofConstraint;
|
||||
class btGeneric6DofSpringConstraint;
|
||||
class btGeneric6DofSpring2Constraint;
|
||||
class btSliderConstraint;
|
||||
class btGearConstraint;
|
||||
struct btContactSolverInfo;
|
||||
@@ -199,6 +200,8 @@ public:
|
||||
virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
|
||||
virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB);
|
||||
virtual btGeneric6DofSpringConstraint* createGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
|
||||
virtual btGeneric6DofSpring2Constraint* createGeneric6DofSpring2Constraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, int rotateOrder );
|
||||
|
||||
virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
|
||||
virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA);
|
||||
virtual btGearConstraint* createGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio);
|
||||
|
||||
Reference in New Issue
Block a user