Пример #1
0
class Leg():

    def __init__(self,x,y,name,world,worldNP,body,front):
        self.hip1 = 0;
        self.hip2 = 0;
        self.uLeg1 = Vec3(0, 0, 0)
        self.lLeg1 = Vec3(0, 0, 0)
        self.uLeg2 = Vec3(0, 0, 0)
        self.lLeg2 = Vec3(0, 0, 0)
        self.kneeJoint1 = 0
        self.kneeJoint2 = 0
        self.footJoint = 0

        # upper leg1
        shape = BulletBoxShape(Vec3(0.1, 0.1, 5))

        self.hLeg1 = BulletRigidBodyNode(name+'Up')
        bodyNP = worldNP.attachNewNode(self.hLeg1)
        bodyNP.node().addShape(shape)
        bodyNP.node().setMass(1.0)
        bodyNP.node().setDeactivationEnabled(False)
        bodyNP.setCollideMask(BitMask32.allOn())
        bodyNP.setPos(x, y-1, 5.1)

        visNP = loader.loadModel('models/box.egg')
        visNP.clearModelNodes()
        visNP.setScale(Vec3(0.2, 0.2, 10))
        visNP.reparentTo(bodyNP)

        world.attachRigidBody(self.hLeg1)

        # upper leg2
        shape = BulletBoxShape(Vec3(0.1, 0.1, 5))

        self.hLeg2 = BulletRigidBodyNode(name+'Up')
        bodyNP = worldNP.attachNewNode(self.hLeg2)
        bodyNP.node().addShape(shape)
        bodyNP.node().setMass(1.0)
        bodyNP.node().setDeactivationEnabled(False)
        bodyNP.setCollideMask(BitMask32.allOn())
        bodyNP.setPos(x, y+1, 5.1)

        visNP = loader.loadModel('models/box.egg')
        visNP.clearModelNodes()
        visNP.setScale(Vec3(0.2, 0.2, 10))
        visNP.reparentTo(bodyNP)

        world.attachRigidBody(self.hLeg2)

        # lower leg1
        shape = BulletBoxShape(Vec3(0.1, 0.1, 5))

        self.lLeg1 = BulletRigidBodyNode(name+'Down')
        bodyNP = worldNP.attachNewNode(self.lLeg1)
        bodyNP.node().addShape(shape)
        bodyNP.node().setMass(1.0)
        bodyNP.node().setDeactivationEnabled(False)
        bodyNP.setCollideMask(BitMask32.allOn())
        bodyNP.setPos(x, y-1, -5.1)  
              
        visNP = loader.loadModel('models/box.egg')
        visNP.clearModelNodes()
        visNP.setScale(Vec3(0.2, 0.2, 10))
        visNP.reparentTo(bodyNP)

        world.attachRigidBody(self.lLeg1)

        # lower leg2
        shape = BulletBoxShape(Vec3(0.1, 0.1, 5))

        self.lLeg2 = BulletRigidBodyNode(name+'Down')
        bodyNP = worldNP.attachNewNode(self.lLeg2)
        bodyNP.node().addShape(shape)
        bodyNP.node().setMass(1.0)
        bodyNP.node().setDeactivationEnabled(False)
        bodyNP.setCollideMask(BitMask32.allOn())
        bodyNP.setPos(x, y+1, -5.1)  
              
        visNP = loader.loadModel('models/box.egg')
        visNP.clearModelNodes()
        visNP.setScale(Vec3(0.2, 0.2, 10))
        visNP.reparentTo(bodyNP)

        world.attachRigidBody(self.lLeg2)
        # attachment to hip
        # Hinge01
        pivotA = Point3(x, y-0.5, -2.0)
        pivotB = Point3(0, 0, 5.1)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.hipJoint1 = BulletHingeConstraint(body, self.hLeg1, pivotA, pivotB, axisA, axisB, False)
        self.hipJoint1.setDebugDrawSize(2.0)
        self.hipJoint1.setLimit(-91, 91, softness=0.1, bias=0.3, relaxation=0.1)
        self.hipJoint1.enableAngularMotor(True,0,0)
        world.attachConstraint(self.hipJoint1)
        # attachment to hip
        # Hinge02
        pivotA = Point3(x+1, y+0.5, -2.0)
        pivotB = Point3(0, 0, 5.1)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.hipJoint2 = BulletHingeConstraint(body, self.hLeg2, pivotA, pivotB, axisA, axisB, False)
        self.hipJoint2.setDebugDrawSize(2.0)
        self.hipJoint2.setLimit(-91, 91, softness=0.1, bias=0.3, relaxation=0.1)
        self.hipJoint2.enableAngularMotor(True,0,0)
        world.attachConstraint(self.hipJoint2)
        # Hinge1
        pivotA = Point3(0, 0, -5.3)
        pivotB = Point3(0, 0, 5.3)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.kneeJoint1 = BulletHingeConstraint(self.hLeg1, self.lLeg1, pivotA, pivotB, axisA, axisB, True)
        self.kneeJoint1.enableAngularMotor(True,0,0)
        self.kneeJoint1.setDebugDrawSize(2.0)
        self.kneeJoint1.setLimit(-90, 90, softness=0.0, bias=0.0, relaxation=0.0)
        world.attachConstraint(self.kneeJoint1)

        # Hinge2
        pivotA = Point3(0, 0, -5.3)
        pivotB = Point3(0, 0, 5.3)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.kneeJoint2 = BulletHingeConstraint(self.hLeg2, self.lLeg2, pivotA, pivotB, axisA, axisB, True)
        self.kneeJoint2.enableAngularMotor(True,0,0)
        #self.kneeJoin2.setMaxMotorImpulse(5000)
        self.kneeJoint2.setDebugDrawSize(2.0)
        self.kneeJoint2.setLimit(-90, 90, softness=0.0, bias=0.0, relaxation=0.0)
        world.attachConstraint(self.kneeJoint2)

                # Hinge3
        pivotA = Point3(1, 0, -5.3)
        pivotB = Point3(0, 0, -5.3)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.footJoint = BulletHingeConstraint(self.lLeg1, self.lLeg2, pivotA, pivotB, axisA, axisB, True)
        self.footJoint.enableAngularMotor(True,0,0)
        #self.kneeJoin2.setMaxMotorImpulse(5000)
        self.footJoint.setDebugDrawSize(2.0)
        self.footJoint.setLimit(-90, 90, softness=0.0, bias=0.0, relaxation=0.0)
        world.attachConstraint(self.footJoint)

    def setHipMax(self):
        self.hipJoint1.enableAngularMotor(True,-1,3)
    def setHipMin(self):
        self.hipJoint1.enableAngularMotor(True,1,3)
    def setKneeMax(self):
        self.kneeJoint1.enableAngularMotor(True,-1,3)
    def setKneeMin(self):
        self.kneeJoint1.enableAngularMotor(True,1,3)
Пример #2
0
class Leg():

    def __init__(self,x,y,name,world,worldNP,body,front):
        self.hipX = 0;
        self.hipY = 0;
        self.hipZ = 0;
        self.upperLeg = Vec3(0, 0, 0)
        self.lowerLeg = Vec3(0, 0, 0)
        self.kneeJointX = 0

        # upper leg
        shape = BulletBoxShape(Vec3(0.1, 0.1, 5))

        self.hLeg = BulletRigidBodyNode(name+'Up')
        bodyNP = worldNP.attachNewNode(self.hLeg)
        bodyNP.node().addShape(shape)
        bodyNP.node().setMass(1.0)
        bodyNP.node().setDeactivationEnabled(False)
        bodyNP.setCollideMask(BitMask32.allOn())
        bodyNP.setPos(x, y, 5.1)

        visNP = loader.loadModel('models/box.egg')
        visNP.clearModelNodes()
        visNP.setScale(Vec3(0.2, 0.2, 10))
        visNP.reparentTo(bodyNP)

        world.attachRigidBody(self.hLeg)

        # lower leg
        shape = BulletBoxShape(Vec3(0.1, 0.1, 5))

        self.lLeg = BulletRigidBodyNode(name+'Down')
        bodyNP = worldNP.attachNewNode(self.lLeg)
        bodyNP.node().addShape(shape)
        bodyNP.node().setMass(1.0)
        bodyNP.node().setDeactivationEnabled(False)
        bodyNP.setCollideMask(BitMask32.allOn())
        bodyNP.setPos(x, y, -5.1)  
              
        visNP = loader.loadModel('models/box.egg')
        visNP.clearModelNodes()
        visNP.setScale(Vec3(0.2, 0.2, 10))
        visNP.reparentTo(bodyNP)

        world.attachRigidBody(self.lLeg)

        # attachment to hip
        # Hinge01
        pivotA = Point3(x, y, -1.0)
        pivotB = Point3(0, 0, 5.1)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.hipJointY = BulletHingeConstraint(body, self.hLeg, pivotA, pivotB, axisA, axisB, False)
        self.hipJointY.setDebugDrawSize(2.0)
        self.hipJointY.setLimit(-91, 91, softness=0.1, bias=0.3, relaxation=0.1)
        self.hipJointY.enableAngularMotor(True,0,0)
        #self.hipJointY.setMaxMotorImpulse(5000)
        world.attachConstraint(self.hipJointY)

        # Hinge1
        pivotA = Point3(0, 0, -5.3)
        pivotB = Point3(0, 0, 5.3)
        axisA = Vec3(1, 0, 0)
        axisB = Vec3(1, 0, 0)
     
        self.kneeJoint = BulletHingeConstraint(self.hLeg, self.lLeg, pivotA, pivotB, axisA, axisB, True)
        self.kneeJoint.enableAngularMotor(True,0,0)
        #self.kneeJoint.setMaxMotorImpulse(5000)
        self.kneeJoint.setDebugDrawSize(2.0)
        self.front = front;
        if(front):
            self.maxAngle = 91;
            self.minAngle = -1;
        else:
            self.maxAngle = 1;
            self.minAngle = -91;

        self.kneeJoint.setLimit(self.minAngle, self.maxAngle, softness=0.1, bias=0.3, relaxation=0.1)

        world.attachConstraint(self.kneeJoint)
        self.force = 10

    def setHipMax(self):
        if(self.front):
            direction = 1
        else:
            direction = -1
        self.hipJointY.enableAngularMotor(True,direction,self.force)
        self.hipJointY.setMotorTarget(90*direction,1);
    def setHipMin(self):
        if(self.front):
            direction = -1
        else:
            direction = 1
        self.hipJointY.enableAngularMotor(True,direction,self.force)
        self.hipJointY.setMotorTarget(90*direction,1);
    def setKneeMax(self):
        if(self.front):
            direction = -1
        else:
            direction = 1
        self.kneeJoint.enableAngularMotor(True,direction,4)
    def setKneeMin(self):
        if(self.front):
            direction = 1
        else:
            direction = -1
        self.kneeJoint.enableAngularMotor(True,direction,4)