예제 #1
0
    def Step(self, settings) :
        x1=box2d.b2Vec2()
        x2=box2d.b2Vec2()
        distance = box2d.b2Distance(x1, x2, self.m_shape1, self.m_body1.GetXForm(), self.m_shape2, self.m_body2.GetXForm())

        self.DrawString(5, self.textLine, "distance = %g" % distance)
        self.textLine += 15

          # ?
          #g_GJK_Iterations = 5
          #self.DrawString(5, self.textLine, "iterations = %d" % g_GJK_Iterations)
          #self.textLine += 15
          
#          glPointSize(4.0)
#          glColor3(1.0, 0.0, 0.0)
#          glBegin(GL_POINTS)
#          glVertex2(x1.x, x1.y)
#          glVertex2(x2.x, x2.y)
#          glEnd()
#          glPointSize(1.0)
#          
#          glColor3(1.0, 1.0, 0.0)
#          glBegin(GL_LINES)
#          glVertex2(x1.x, x1.y)
#          glVertex2(x2.x, x2.y)
#          glEnd()

        settings.pause = True
        super(DistanceTest, self).Step(settings)
        settings.pause = False
예제 #2
0
    def __init__(self):
        super(Pyramid, self).__init__()
        sd=box2d.b2PolygonDef()
        sd.SetAsBox(50.0, 10.0)

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, -10.0)
        ground = self.world.CreateBody(bd) 
        ground.CreateShape(sd)

        sd=box2d.b2PolygonDef() 
        a = 0.5
        sd.SetAsBox(a, a)
        sd.density = 5.0

        x=box2d.b2Vec2(-10.0, 0.75)
        y=box2d.b2Vec2() 
        deltaX=box2d.b2Vec2(0.5625, 2.0)
        deltaY=box2d.b2Vec2(1.125, 0.0)

        for i in range(25):
            y = x.copy()

            for j in range(i, 25):
                bd=box2d.b2BodyDef() 
                bd.position = y
                body = self.world.CreateBody(bd) 
                body.CreateShape(sd)
                body.SetMassFromShapes()
                y += deltaY

            x += deltaX
예제 #3
0
 def Keyboard(self, key) :
     if key==K_w:
         f = self.m_body.GetWorldVector(box2d.b2Vec2(0.0, -200.0))
         p = self.m_body.GetWorldPoint(box2d.b2Vec2(0.0, 2.0))
         self.m_body.ApplyForce(f, p)
     elif key==K_a:
         self.m_body.ApplyTorque(20.0)
     elif key==K_d:
         self.m_body.ApplyTorque(-20.0)
예제 #4
0
    def __init__(self):
        super(Chain, self).__init__()
        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, -10.0)
        ground = self.world.CreateBody(bd)

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(50.0, 10.0)
        ground.CreateShape(sd)

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.6, 0.125)
        sd.density = 20.0
        sd.friction = 0.2

        jd=box2d.b2RevoluteJointDef() 
        jd.collideConnected = False

        y = 25.0
        prevBody=ground
        for i in range(30):
            bd=box2d.b2BodyDef() 
            bd.position.Set(0.5 + i, y)
            body = self.world.CreateBody(bd) 
            body.CreateShape(sd)
            body.SetMassFromShapes()
            
            anchor=box2d.b2Vec2(i, y)
            jd.Initialize(prevBody, body, anchor)
            self.world.CreateJoint(jd).getAsType()
            
            prevBody = body
예제 #5
0
    def __init__(self):
        super(DistanceTest, self).__init__()
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(1.0, 1.0)
        sd.density = 0.0

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, 10.0)
        self.m_body1 = self.world.CreateBody(bd)
        self.m_shape1 = self.m_body1.CreateShape(sd)

        sd=box2d.b2PolygonDef() 
        sd.vertexCount = 3
        sd.setVertex(0,-1.0, 0.0)
        sd.setVertex(1,1.0, 0.0)
        sd.setVertex(2,0.0, 15.0)
        sd.density = 1.0
        bd=box2d.b2BodyDef() 
        #bd.position.Set(-48.377853, 0.49244255)
        #bd.rotation = 90.475891
        bd.position.Set(0.0, 10.0)
        self.m_body2 = self.world.CreateBody(bd)
        self.m_shape2 = self.m_body2.CreateShape(sd)
        self.m_body2.SetMassFromShapes()

        self.world.SetGravity(box2d.b2Vec2(0.0, 0.0))
        self.world.SetPositionCorrection(False)
예제 #6
0
    def __init__(self):
        super(Pulleys, self).__init__()
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(50.0, 10.0)

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, -10.0)
        ground = self.world.CreateBody(bd)
        ground.CreateShape(sd)

        a = 2.0
        b = 4.0
        y = 16.0
        L = 12.0

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(a, b)
        sd.density = 5.0

        bd=box2d.b2BodyDef() 

        bd.position.Set(-10.0, y)
        body1 = self.world.CreateBody(bd) 
        body1.CreateShape(sd)
        body1.SetMassFromShapes()

        bd.position.Set(10.0, y)
        body2 = self.world.CreateBody(bd) 
        body2.CreateShape(sd)
        body2.SetMassFromShapes()

        pulleyDef=box2d.b2PulleyJointDef() 

        anchor1=box2d.b2Vec2(-10.0, y + b)

        anchor2=box2d.b2Vec2(10.0, y + b)

        groundAnchor1=box2d.b2Vec2(-10.0, y + b + L)

        groundAnchor2=box2d.b2Vec2(10.0, y + b + L)
        pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0)

        self.m_joint1 = self.world.CreateJoint(pulleyDef).getAsType() 
예제 #7
0
    def __init__(self):
        super(VerticalStack, self).__init__()
        sd=box2d.b2PolygonDef()
        sd.SetAsBox(50.0, 10.0, box2d.b2Vec2(0.0, -10.0), 0.0)

        bd=box2d.b2BodyDef()
        bd.position.Set(0.0, 0.0)
        ground = self.world.CreateBody(bd) 
        ground.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(20.0, 10.0), 0.0)
        ground.CreateShape(sd)

        xs = [0.0, -10.0, -5.0, 5.0, 10.0]

        for j in range(5):
            sd=box2d.b2PolygonDef()
            sd.SetAsBox(0.5, 0.5)
            sd.density = 1.0
            sd.friction = 0.3

            for i in range(12):
                bd=box2d.b2BodyDef()

                # For this test we are using continuous physics for all boxes.
                # This is a stress test, you normally wouldn't do this for
                # performance reasons.
                #bd.isBullet = True
                bd.allowSleep = True

                #x = b2Random(-0.1, 0.1)
                #x = i % 2 == 0 ? -0.025 : 0.025
                bd.position.Set(xs[j], 0.752 + 1.54 * i)
                #bd.position.Set(xs[j], 2.51 + 4.02 * i)
                body = self.world.CreateBody(bd) #

                body.CreateShape(sd)
                body.SetMassFromShapes()

        self.m_bullet = None 
예제 #8
0
    def Keyboard(self, key) :
        p = self.m_body2.GetPosition=box2d.b2Vec2()
        a = self.m_body2.GetAngle()

        if key==K_a:
           p.x -= 0.1
        elif key==K_d:
           p.x += 0.1
        elif key==K_s:
           p.y -= 0.1
        elif key==K_w:
           p.y += 0.1
        elif key==K_q:
           a += 0.1 * box2d.b2_pi
        elif key==K_e:
           a -= 0.1 * box2d.b2_pi
        self.m_body2.SetXForm(p, a)
예제 #9
0
    def Step(self, settings) :
        sweep1=box2d.b2Sweep()
        sweep1.c0.Set(0.0, 20.0)
        sweep1.a0 = 0.0
        sweep1.c = sweep1.c0
        sweep1.a = sweep1.a0
        sweep1.t0 = 0.0
        sweep1.localCenter = self.m_body1.GetLocalCenter()

        sweep2=box2d.b2Sweep()
        sweep2.c0.Set(9.6363468, 28.050615)
        sweep2.a0 = 1.6408679
        sweep2.c = sweep2.c0 + box2d.b2Vec2(-0.075121880, 0.27358246)
        sweep2.a = sweep2.a0 - 10.434675
        sweep2.t0 = 0.0
        sweep2.localCenter = self.m_body2.GetLocalCenter()

        toi = box2d.b2TimeOfImpact(self.m_shape1, sweep1, self.m_shape2, sweep2)

        self.DrawString(5, self.textLine, "toi = %g" % (toi))
        self.textLine += 15

        xf2=box2d.b2XForm ()
        sweep2.GetXForm(xf2, toi)
        vertexCount = self.m_shape2.GetVertexCount()
        vertices = []

        localVertices = self.m_shape2.getVertices_b2Vec2()
        for vertex in localVertices:
            vertices.append( box2d.b2Mul(xf2, vertex).tuple() )

        self.debugDraw.DrawPolygon(vertices, vertexCount, box2d.b2Color(0.5, 0.7, 0.9))

        localVertices = self.m_shape2.getCoreVertices_b2Vec2()
        for vertex in localVertices:
            vertices.append( box2d.b2Mul(xf2, vertex).tuple() )
        self.debugDraw.DrawPolygon(vertices, vertexCount, box2d.b2Color(0.5, 0.7, 0.9))
     
        settings.pause = True
        super(TimeOfImpact, self).Step(settings)
        settings.pause = False
예제 #10
0
    def Keyboard(self, key) :
        if key == K_COMMA:
            if self.m_bullet:
                self.world.DestroyBody(self.m_bullet)
                self.m_bullet = None

            sd=box2d.b2CircleDef()
            sd.density = 20.0
            sd.radius = 0.25
            sd.restitution = 0.05

            bd=box2d.b2BodyDef()
            bd.isBullet = True
            bd.allowSleep = False
            bd.position.Set(-31.0, 5.0)

            self.m_bullet = self.world.CreateBody(bd)
            self.m_bullet.CreateShape(sd)
            self.m_bullet.SetMassFromShapes()

            self.m_bullet.SetLinearVelocity(box2d.b2Vec2(400.0, 0.0))
예제 #11
0
    def __init__(self):
        super(ShapeEditing, self).__init__()
        sd=box2d.b2PolygonDef()
        sd.SetAsBox(50.0, 10.0)

        bd=box2d.b2BodyDef()
        bd.position.Set(0.0, -10.0)

        ground = self.world.CreateBody(bd) #
        ground.CreateShape(sd)

        bodydef=box2d.b2BodyDef()
        bodydef.position.Set(0.0, 10.0)
        self.m_body = self.world.CreateBody(bodydef)

        sd=box2d.b2PolygonDef()
        sd.SetAsBox(4.0, 4.0, box2d.b2Vec2(0.0, 0.0), 0.0)
        sd.density = 10.0
        self.m_shape1 = self.m_body.CreateShape(sd)
        self.m_body.SetMassFromShapes()

        self.m_shape2 = None
예제 #12
0
    def __init__(self):
        super(TimeOfImpact, self).__init__()
        sd=box2d.b2PolygonDef() 
        sd.density = 0.0

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(10.0, 0.0), 0.0)

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, 20.0)
        bd.angle = 0.0
        self.m_body1 = self.world.CreateBody(bd)
        self.m_shape1 = self.m_body1.CreateShape(sd)

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.25, 0.25)
        sd.density = 1.0

        bd=box2d.b2BodyDef() 
        bd.position.Set(9.6363468, 28.050615)
        bd.angle = 1.6408679
        self.m_body2 = self.world.CreateBody(bd)
        self.m_shape2 = self.m_body2.CreateShape(sd).getAsType()
        self.m_body2.SetMassFromShapes()
예제 #13
0
    def __init__(self):
        super(Test_Biped, self).__init__()
        k_restitution = 1.4

        bd=box2d.b2BodyDef()
        bd.position.Set(0.0, 20.0)
        body = self.world.CreateBody(bd)

        sd=box2d.b2PolygonDef()
        sd.density = 0.0
        sd.restitution = k_restitution

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(-10.0, 0.0), 0.0)
        body.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(10.0, 0.0), 0.0)
        body.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(0.0, -10.0), 0.5 * box2d.b2_pi)
        body.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(0.0, 10.0), -0.5 * box2d.b2_pi)
        body.CreateShape(sd)

        self.m_biped = Biped(self.world, box2d.b2Vec2(0.0, 20.0))

        for i in range(8):
            bd=box2d.b2BodyDef()
            bd.position.Set(5.0, 20.0 + i)
            bd.isBullet = True
            body = self.world.CreateBody(bd) 
            body.SetLinearVelocity(box2d.b2Vec2(0.0, -100.0))
            body.SetAngularVelocity(box2d.b2Random(-50.0, 50.0))

            sd=box2d.b2CircleDef()
            sd.radius = 0.25
            sd.density = 15.0
            sd.restitution = k_restitution
            body.CreateShape(sd)
            body.SetMassFromShapes()
예제 #14
0
    def __init__(self):
        super(Bridge, self).__init__()
        
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(50.0, 10.0)

        bd = box2d.b2BodyDef()
        bd.position.Set(0.0, -10.0)
        ground = self.world.CreateBody(bd)
        ground.CreateShape(sd)

        sd = box2d.b2PolygonDef()        
        sd.SetAsBox(0.5, 0.125)
        sd.density = 20.0
        sd.friction = 0.2

        jd = box2d.b2RevoluteJointDef()
        numPlanks = 30

        prevBody = ground
        for i in range(numPlanks):
            bd = box2d.b2BodyDef()
            bd.position.Set(-14.5 + 1.0 * i, 5.0)

            body = self.world.CreateBody(bd)
            body.CreateShape(sd)
            body.SetMassFromShapes()

            anchor=box2d.b2Vec2(-15.0 + 1.0 * i, 5.0)
            jd.Initialize(prevBody, body, anchor)
            self.world.CreateJoint(jd)

            prevBody = body

        anchor = box2d.b2Vec2(-15.0 + 1.0 * numPlanks, 5.0)
        jd.Initialize(prevBody, ground, anchor)
        self.world.CreateJoint(jd)

        for i in range(2):
            sd=box2d.b2PolygonDef()
            sd.vertexCount = 3
            sd.setVertex(0,-0.5, 0.0)
            sd.setVertex(1,0.5, 0.0)
            sd.setVertex(2,0.0, 1.5)
            sd.density = 1.0

            bd=box2d.b2BodyDef()
            bd.position.Set(-8.0 + 8.0 * i, 12.0)
            body = self.world.CreateBody(bd)
            body.CreateShape(sd)
            body.SetMassFromShapes()

        for i in range(3):
            sd=box2d.b2CircleDef()
            sd.radius = 0.5
            sd.density = 1.0

            bd=box2d.b2BodyDef()
            bd.position.Set(-6.0 + 6.0 * i, 10.0)
            body = self.world.CreateBody(bd)
            body.CreateShape(sd)
            body.SetMassFromShapes()
예제 #15
0
    def __init__(self):
        super(Dominos, self).__init__()
        sd=box2d.b2PolygonDef()
        sd.SetAsBox(50.0, 10.0)

        bd=box2d.b2BodyDef()
        bd.position.Set(0.0, -10.0)
        b1 = self.world.CreateBody(bd)
        b1.CreateShape(sd)

        sd=box2d.b2PolygonDef()
        sd.SetAsBox(6.0, 0.25)

        bd=box2d.b2BodyDef()
        bd.position.Set(-1.5, 10.0)
        ground = self.world.CreateBody(bd) 
        ground.CreateShape(sd)

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.1, 1.0)
        sd.density = 20.0
        sd.friction = 0.1

        
        for i in range(10):
            bd=box2d.b2BodyDef() 
            bd.position.Set(-6.0 + 1.0 * i, 11.25)
            body = self.world.CreateBody(bd) 
            body.CreateShape(sd)
            body.SetMassFromShapes()

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(7.0, 0.25, box2d.b2Vec2_zero, 0.3)

        bd=box2d.b2BodyDef() 
        bd.position.Set(1.0, 6.0)
        ground = self.world.CreateBody(bd) 
        ground.CreateShape(sd)

        
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.25, 1.5)

        bd=box2d.b2BodyDef() 
        bd.position.Set(-7.0, 4.0)
        b2 = self.world.CreateBody(bd)
        b2.CreateShape(sd)

        
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(6.0, 0.125)
        sd.density = 10.0

        bd=box2d.b2BodyDef() 
        bd.position.Set(-0.9, 1.0)
        bd.angle = -0.15

        b3 = self.world.CreateBody(bd)
        b3.CreateShape(sd)
        b3.SetMassFromShapes()

        jd=box2d.b2RevoluteJointDef() 
        anchor=box2d.b2Vec2() 

        anchor.Set(-2.0, 1.0)
        jd.Initialize(b1, b3, anchor)
        jd.collideConnected = True
        self.world.CreateJoint(jd).getAsType() 

        
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.25, 0.25)
        sd.density = 10.0

        bd=box2d.b2BodyDef() 
        bd.position.Set(-10.0, 15.0)
        b4 = self.world.CreateBody(bd)
        b4.CreateShape(sd)
        b4.SetMassFromShapes()

        anchor.Set(-7.0, 15.0)
        jd.Initialize(b2, b4, anchor)
        self.world.CreateJoint(jd).getAsType() 

        
        bd=box2d.b2BodyDef() 
        bd.position.Set(6.5, 3.0)
        b5 = self.world.CreateBody(bd)

        sd=box2d.b2PolygonDef() 
        sd.density = 10.0
        sd.friction = 0.1

        sd.SetAsBox(1.0, 0.1, box2d.b2Vec2(0.0, -0.9), 0.0)
        b5.CreateShape(sd)

        sd.SetAsBox(0.1, 1.0, box2d.b2Vec2(-0.9, 0.0), 0.0)
        b5.CreateShape(sd)

        sd.SetAsBox(0.1, 1.0, box2d.b2Vec2(0.9, 0.0), 0.0)
        b5.CreateShape(sd)

        b5.SetMassFromShapes()

        anchor.Set(6.0, 2.0)
        jd.Initialize(b1, b5, anchor)
        self.world.CreateJoint(jd).getAsType() 

        
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(1.0, 0.1)
        sd.density = 30.0
        sd.friction = 0.2

        bd=box2d.b2BodyDef() 
        bd.position.Set(6.5, 4.1)
        b6 = self.world.CreateBody(bd)
        b6.CreateShape(sd)
        b6.SetMassFromShapes()

        anchor.Set(7.5, 4.0)
        jd.Initialize(b5, b6, anchor)
        self.world.CreateJoint(jd).getAsType() 

        
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.1, 1.0)
        sd.density = 10.0

        bd=box2d.b2BodyDef() 
        bd.position.Set(7.4, 1.0)

        b7 = self.world.CreateBody(bd)
        b7.CreateShape(sd)
        b7.SetMassFromShapes()

        djd=box2d.b2DistanceJointDef() 
        djd.body1 = b3
        djd.body2 = b7
        djd.localAnchor1.Set(6.0, 0.0)
        djd.localAnchor2.Set(0.0, -1.0)
        d = djd.body2.GetWorldPoint(djd.localAnchor2) - djd.body1.GetWorldPoint(djd.localAnchor1)
        djd.length = d.Length()
        self.world.CreateJoint(djd).getAsType() 

        sd=box2d.b2CircleDef() 
        sd.radius = 0.2
        sd.density = 10.0

        
        for i in range(4):
            bd=box2d.b2BodyDef() 
            bd.position.Set(5.9 + 2.0 * sd.radius * i, 2.4)
            body = self.world.CreateBody(bd) 
            body.CreateShape(sd)
            body.SetMassFromShapes()
예제 #16
0
    def CreateLeg(self, s, wheelAnchor) :
        p1=box2d.b2Vec2(5.4 * s, -6.1)
        p2=box2d.b2Vec2(7.2 * s, -1.2)
        p3=box2d.b2Vec2(4.3 * s, -1.9)
        p4=box2d.b2Vec2(3.1 * s, 0.8)
        p5=box2d.b2Vec2(6.0 * s, 1.5)
        p6=box2d.b2Vec2(2.5 * s, 3.7)
        
        sd1=box2d.b2PolygonDef()
        sd2=box2d.b2PolygonDef()
        sd1.vertexCount = 3
        sd2.vertexCount = 3
        sd1.filter.groupIndex = -1
        sd2.filter.groupIndex = -1
        sd1.density = 1.0
        sd2.density = 1.0
        
        if s > 0.0:
            sd1.setVertex(0, p1)
            sd1.setVertex(1, p2)
            sd1.setVertex(2, p3)
            
            sd2.setVertex(0, box2d.b2Vec2_zero)
            sd2.setVertex(1, p5 - p4)
            sd2.setVertex(2, p6 - p4)
        else:
            sd1.setVertex(0, p1)
            sd1.setVertex(1, p3)
            sd1.setVertex(2, p2)
            
            sd2.setVertex(0, box2d.b2Vec2_zero)
            sd2.setVertex(1, p6 - p4)
            sd2.setVertex(2, p5 - p4)

        bd1=box2d.b2BodyDef()
        bd2=box2d.b2BodyDef()
        bd1.position = self.m_offset
        bd2.position = p4 + self.m_offset
        
        bd1.angularDamping = 10.0
        bd2.angularDamping = 10.0
        
        body1 = self.world.CreateBody(bd1) 
        body2 = self.world.CreateBody(bd2) 
        
        body1.CreateShape(sd1)
        body2.CreateShape(sd2)
        
        body1.SetMassFromShapes()
        body2.SetMassFromShapes()
        
        djd=box2d.b2DistanceJointDef()
        
        # Using a soft distance constraint can reduce some jitter.
        # It also makes the structure seem a bit more fluid by
        # acting like a suspension system.
        #djd.dampingRatio = 0.5
        #djd.frequencyHz = 10.0
        # svn r149, not usable yet
        
        djd.Initialize(body1, body2, p2 + self.m_offset, p5 + self.m_offset)
        self.world.CreateJoint(djd).getAsType() 
        
        djd.Initialize(body1, body2, p3 + self.m_offset, p4 + self.m_offset)
        self.world.CreateJoint(djd).getAsType() 
        
        djd.Initialize(body1, self.m_wheel, p3 + self.m_offset, wheelAnchor + self.m_offset)
        self.world.CreateJoint(djd).getAsType() 
        
        djd.Initialize(body2, self.m_wheel, p6 + self.m_offset, wheelAnchor + self.m_offset)
        self.world.CreateJoint(djd).getAsType() 
        
        rjd=box2d.b2RevoluteJointDef() 
        
        rjd.Initialize(body2, self.m_chassis, p4 + self.m_offset)
        self.world.CreateJoint(rjd).getAsType() 
예제 #17
0
 def __init__(self):
     super(TheoJansen, self).__init__()
     self.m_offset.Set(0.0, 8.0)
     self.m_motorSpeed = 2.0
     self.m_motorOn = True
     pivot=box2d.b2Vec2(0.0, 0.8)
     
     sd=box2d.b2PolygonDef() 
     sd.SetAsBox(50.0, 10.0)
     
     bd=box2d.b2BodyDef() 
     bd.position.Set(0.0, -10.0)
     ground = self.world.CreateBody(bd) 
     ground.CreateShape(sd)
     
     sd.SetAsBox(0.5, 5.0, box2d.b2Vec2(-50.0, 15.0), 0.0)
     ground.CreateShape(sd)
     
     sd.SetAsBox(0.5, 5.0, box2d.b2Vec2(50.0, 15.0), 0.0)
     ground.CreateShape(sd)
     
     for i in range(40):
         sd = box2d.b2CircleDef()
         sd.density = 1.0
         sd.radius = 0.25
         
         bd=box2d.b2BodyDef() 
         bd.position.Set(-40.0 + 2.0 * i, 0.5)
         
         body = self.world.CreateBody(bd) 
         body.CreateShape(sd)
         body.SetMassFromShapes()
     
     sd=box2d.b2PolygonDef() 
     sd.density = 1.0
     sd.SetAsBox(2.5, 1.0)
     sd.filter.groupIndex = -1
     bd=box2d.b2BodyDef() 
     bd.position = pivot + self.m_offset
     self.m_chassis = self.world.CreateBody(bd)
     self.m_chassis.CreateShape(sd)
     self.m_chassis.SetMassFromShapes()
     
     sd = box2d.b2CircleDef()
     sd.density = 1.0
     sd.radius = 1.6
     sd.filter.groupIndex = -1
     bd=box2d.b2BodyDef() 
     bd.position = pivot + self.m_offset
     self.m_wheel = self.world.CreateBody(bd)
     self.m_wheel.CreateShape(sd)
     self.m_wheel.SetMassFromShapes()
 
     jd=box2d.b2RevoluteJointDef() 
     jd.Initialize(self.m_wheel, self.m_chassis, pivot + self.m_offset)
     jd.collideConnected = False
     jd.motorSpeed = self.m_motorSpeed
     jd.maxMotorTorque = 400.0
     jd.enableMotor = self.m_motorOn
     self.m_motorJoint = self.world.CreateJoint(jd).getAsType()
 
     wheelAnchor = pivot + box2d.b2Vec2(0.0, -0.8)
     
     self.CreateLeg(-1.0, wheelAnchor)
     self.CreateLeg(1.0, wheelAnchor)
     
     self.m_wheel.SetXForm(self.m_wheel.GetPosition(), 120.0 * box2d.b2_pi / 180.0)
     self.CreateLeg(-1.0, wheelAnchor)
     self.CreateLeg(1.0, wheelAnchor)
     
     self.m_wheel.SetXForm(self.m_wheel.GetPosition(), -120.0 * box2d.b2_pi / 180.0)
     self.CreateLeg(-1.0, wheelAnchor)
     self.CreateLeg(1.0, wheelAnchor)
예제 #18
0
    def Step(self, settings):
        bodies = self.bodies
        for i in range(8):
            for j in range(8):
                zero = box2d.b2Vec2(0.0, 0.0)
                down = box2d.b2Vec2(0.0, -0.5)
                up = box2d.b2Vec2(0.0, 0.5)
                right = box2d.b2Vec2(0.5, 0.0)
                left = box2d.b2Vec2(-0.5, 0.0)
                ind = i * 8 + j
                indr = ind + 1
                indd = ind + 8
                spring = 500.0
                damp = 5.0
                if j < 7:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[indr]), zero, spring, damp, 1.0)
                    self.AddSpringForce((bodies[ind]), right, (bodies[indr]), left, 0.5 * spring, damp, 0.0)
                if i < 7:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[indd]), zero, spring, damp, 1.0)
                    self.AddSpringForce((bodies[ind]), up, (bodies[indd]), down, 0.5 * spring, damp, 0.0)
                inddr = indd + 1
                inddl = indd - 1
                drdist = math.sqrt(2.0)
                if i < 7 and j < 7:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[inddr]), zero, spring, damp, drdist)
                if i < 7 and j > 0:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[inddl]), zero, spring, damp, drdist)

                indr = ind + 2
                indd = ind + 8 * 2
                if j < 6:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[indr]), zero, spring, damp, 2.0)
                if i < 6:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[indd]), zero, spring, damp, 2.0)

                inddr = indd + 2
                inddl = indd - 2
                drdist = math.sqrt(2.0) * 2.0
                if i < 6 and j < 6:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[inddr]), zero, spring, damp, drdist)
                if i < 6 and j > 1:
                    self.AddSpringForce((bodies[ind]), zero, (bodies[inddl]), zero, spring, damp, drdist)

        # Check if bodies are near elevator
        #  Look if the body to lift is near the elevator
        p1 = bodies[0].GetWorldCenter()
        p2 = bodies[63].GetWorldCenter()
        #    self.m_elev:   elevator prism. joint
        e = self.m_elev.GetWorldCenter() + box2d.b2Vec2(0, 7)

        # maybe not the best way to do it...
        # Bodies reached the elevator side
        if p1.x > e.x or p2.x > e.x:
            # go up
            if (p1.y < e.y or p2.y < e.y) and (
                self.m_joint_elev.GetJointTranslation() <= self.m_joint_elev.GetLowerLimit() + 1
            ):
                self.m_joint_elev.SetMotorSpeed(20)
                # print "lift goes up trans: %G" % self.m_joint_elev.GetJointTranslation()

        # go down
        if self.m_joint_elev.GetJointTranslation() >= self.m_joint_elev.GetUpperLimit() - 2:
            self.m_joint_elev.SetMotorSpeed(-15)
            # printf("lift goes down: %G\n",self.m_joint_elev.GetJointTranslation())

        super(ElasticBody, self).Step(settings)
예제 #19
0
    def __init__(self):
        super(ElasticBody, self).__init__()

        bodies = self.bodies
        for i in range(64):
            bodies.append(None)
        # Bottom static body
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(50.0, 2.0)
        sd.friction = 0.1
        sd.restitution = 0.1
        bd = box2d.b2BodyDef()
        bd.position.Set(-1.0, -7.5)
        self.m_ground = self.world.CreateBody(bd)
        self.m_ground.CreateShape(sd)
        # Upper static body
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(20.0, 0.50, box2d.b2Vec2(0, 0), 0.047 * box2d.b2_pi)
        sd.friction = 0.01
        sd.restitution = 0.001
        bd = box2d.b2BodyDef()
        bd.position.Set(-20, 93.0)
        g = self.world.CreateBody(bd)
        g.CreateShape(sd)
        sd.SetAsBox(15, 0.50, box2d.b2Vec2(-15.0, 12.5), 0.0)
        g.CreateShape(sd)

        sd.SetAsBox(20, 0.5, box2d.b2Vec2(0.0, -25.0), -0.5)
        g.CreateShape(sd)
        # Left channel left wall
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(0.7, 55.0)
        sd.friction = 0.1
        sd.restitution = 0.1
        bd = box2d.b2BodyDef()
        bd.position.Set(-49.3, 50.0)
        g = self.world.CreateBody(bd)
        g.CreateShape(sd)
        # Right wall
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(0.7, 55.0)
        sd.friction = 0.1
        sd.restitution = 0.1
        bd = box2d.b2BodyDef()
        bd.position.Set(45, 50.0)
        g = self.world.CreateBody(bd)
        g.CreateShape(sd)
        # Left channel right upper wall
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(0.5, 20.0)
        sd.friction = 0.05
        sd.restitution = 0.01
        bd = box2d.b2BodyDef()
        bd.position.Set(-42.0, 70.0)
        bd.angle = -0.03 * box2d.b2_pi
        g = self.world.CreateBody(bd)
        g.CreateShape(sd)
        # Left channel right lower wall
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(0.50, 23.0)
        sd.friction = 0.05
        sd.restitution = 0.01
        bd = box2d.b2BodyDef()
        bd.position.Set(-44.0, 27.0)
        g = self.world.CreateBody(bd)
        g.CreateShape(sd)
        # Bottom motors
        cd = box2d.b2CircleDef()
        cd.radius = 3.0
        cd.density = 15.0
        cd.friction = 1
        cd.restitution = 0.2
        # 1.
        bd.position.Set(-40.0, 2.5)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr = box2d.b2RevoluteJointDef()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        jr.maxMotorTorque = 30000
        jr.enableMotor = True
        jr.motorSpeed = 20
        self.world.CreateJoint(jr).getAsType()
        # 1. left down
        bd.position.Set(-46.0, -2.5)
        cd.radius = 1.5
        jr.motorSpeed = -20
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        sd.SetAsBox(2.0, 0.50)
        body.CreateShape(sd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter())
        self.world.CreateJoint(jr).getAsType()
        # 2.
        cd.radius = 3.0
        jr.motorSpeed = 20
        bd.position.Set(-32.0, 2.5)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        self.world.CreateJoint(jr).getAsType()
        # 3.
        jr.motorSpeed = 20
        bd.position.Set(-24.0, 1.5)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        self.world.CreateJoint(jr).getAsType()
        # 4.
        bd.position.Set(-16.0, 0.8)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        self.world.CreateJoint(jr).getAsType()
        # 5.
        bd.position.Set(-8.0, 0.5)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        self.world.CreateJoint(jr).getAsType()
        # 6.
        bd.position.Set(0.0, 0.1)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        self.world.CreateJoint(jr).getAsType()
        # 7.
        bd.position.Set(8.0, -0.5)
        body = self.world.CreateBody(bd)
        body.CreateShape(cd)
        sd.SetAsBox(3.7, 0.5)
        body.CreateShape(sd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter() + box2d.b2Vec2(0, 1))
        self.world.CreateJoint(jr).getAsType()
        # 8. right rotator
        sd.SetAsBox(5, 0.5)
        sd.density = 2.0
        bd.position.Set(18.0, 1)
        rightmotor = self.world.CreateBody(bd)  #
        rightmotor.CreateShape(sd)
        sd.SetAsBox(4.5, 0.5, box2d.b2Vec2(0, 0), box2d.b2_pi / 3)
        rightmotor.CreateShape(sd)
        sd.SetAsBox(4.5, 0.5, box2d.b2Vec2(0, 0), box2d.b2_pi * 2 / 3)
        rightmotor.CreateShape(sd)
        cd.radius = 4.2
        rightmotor.CreateShape(cd)
        rightmotor.SetMassFromShapes()
        jr.Initialize(g, rightmotor, rightmotor.GetWorldCenter())
        jr.maxMotorTorque = 70000
        jr.motorSpeed = -4
        self.world.CreateJoint(jr).getAsType()
        # 9. left rotator
        sd.SetAsBox(8.5, 0.5)
        sd.density = 2.0
        bd.position.Set(-34.0, 17)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        sd.SetAsBox(8.5, 0.5, box2d.b2Vec2(0, 0), box2d.b2_pi * 0.5)
        body.CreateShape(sd)
        cd.radius = 7
        cd.friction = 0.9
        body.CreateShape(cd)
        body.SetMassFromShapes()
        jr.Initialize(g, body, body.GetWorldCenter())
        jr.maxMotorTorque = 100000
        jr.motorSpeed = -5
        self.world.CreateJoint(jr).getAsType()
        # big compressor
        sd.SetAsBox(3.0, 4)
        sd.density = 10.0
        bd.position.Set(-16.0, 17)
        hammerleft = self.world.CreateBody(bd)
        hammerleft.CreateShape(sd)
        hammerleft.SetMassFromShapes()
        jd = box2d.b2DistanceJointDef()
        jd.Initialize(body, hammerleft, body.GetWorldCenter() + box2d.b2Vec2(0, 6), hammerleft.GetWorldCenter())
        self.world.CreateJoint(jd).getAsType()

        bd.position.Set(4.0, 17)
        hammerright = self.world.CreateBody(bd)
        hammerright.CreateShape(sd)
        hammerright.SetMassFromShapes()
        jd.Initialize(body, hammerright, body.GetWorldCenter() - box2d.b2Vec2(0, 6), hammerright.GetWorldCenter())
        self.world.CreateJoint(jd).getAsType()
        # pusher
        sd.SetAsBox(6, 0.75)
        bd.position.Set(-21.0, 9)
        pusher = self.world.CreateBody(bd)  #
        pusher.CreateShape(sd)
        sd.SetAsBox(2, 1.5, box2d.b2Vec2(-5, 0), 0)
        pusher.SetMassFromShapes()
        pusher.CreateShape(sd)
        jd.Initialize(
            rightmotor,
            pusher,
            rightmotor.GetWorldCenter() + box2d.b2Vec2(-8.0, 0),
            pusher.GetWorldCenter() + box2d.b2Vec2(5.0, 0),
        )
        self.world.CreateJoint(jd).getAsType()
        # Static bodies above motors
        sd = box2d.b2PolygonDef()
        cd = box2d.b2CircleDef()
        sd.SetAsBox(9.0, 0.5)
        sd.friction = 0.05
        sd.restitution = 0.01
        bd = box2d.b2BodyDef()
        bd.position.Set(-15.5, 12)
        bd.angle = 0.0
        g = self.world.CreateBody(bd)
        g.CreateShape(sd)

        sd.SetAsBox(8, 0.5, box2d.b2Vec2(23, 0), 0)
        g.CreateShape(sd)
        # compressor statics
        sd.SetAsBox(7.0, 0.5, box2d.b2Vec2(-2, 9), 0)
        g.CreateShape(sd)
        sd.SetAsBox(9.0, 0.5, box2d.b2Vec2(22, 9), 0)
        g.CreateShape(sd)

        sd.SetAsBox(19.0, 0.5, box2d.b2Vec2(-9, 15), -0.05)
        g.CreateShape(sd)
        sd.SetAsBox(4.7, 0.5, box2d.b2Vec2(15, 11.5), -0.5)
        g.CreateShape(sd)
        # below compressor
        sd.SetAsBox(26.0, 0.3, box2d.b2Vec2(17, -4.4), -0.02)
        g.CreateShape(sd)
        cd.radius = 1.0
        cd.friction = 1.0
        cd.localPosition = box2d.b2Vec2(29, -6)
        g.CreateShape(cd)
        cd.radius = 0.7
        cd.localPosition = box2d.b2Vec2(-2, -4.5)
        g.CreateShape(cd)
        # Elevator
        bd = box2d.b2BodyDef()
        cd = box2d.b2CircleDef()
        sd = box2d.b2PolygonDef()

        bd.position.Set(40.0, 4.0)
        self.m_elev = self.world.CreateBody(bd)

        sd.SetAsBox(0.5, 2.5, box2d.b2Vec2(3.0, -3.0), 0)
        sd.density = 1
        sd.friction = 0.01
        self.m_elev.CreateShape(sd)
        sd.SetAsBox(7.0, 0.5, box2d.b2Vec2(-3.5, -5.5), 0)
        self.m_elev.CreateShape(sd)
        sd.SetAsBox(0.5, 2.5, box2d.b2Vec2(-11, -3.5), 0)
        self.m_elev.CreateShape(sd)
        self.m_elev.SetMassFromShapes()

        jp = box2d.b2PrismaticJointDef()
        jp.Initialize(self.m_ground, self.m_elev, bd.position, box2d.b2Vec2(0.0, 1.0))
        jp.lowerTranslation = 0.0
        jp.upperTranslation = 100.0
        jp.enableLimit = True
        jp.enableMotor = True
        jp.maxMotorForce = 10000
        jp.motorSpeed = 0
        self.m_joint_elev = self.world.CreateJoint(jp).getAsType()

        # Korb
        sd.SetAsBox(2.3, 0.5, box2d.b2Vec2(1, 0.0), 0.0)
        sd.density = 0.5
        bd.position.Set(29.0, 6.5)
        body = self.world.CreateBody(bd)  #
        body.CreateShape(sd)
        sd.SetAsBox(2.5, 0.5, box2d.b2Vec2(3.0, -2), box2d.b2_pi / 2)
        body.CreateShape(sd)
        sd.SetAsBox(4.6, 0.5, box2d.b2Vec2(7.8, -4.0), 0)
        body.CreateShape(sd)
        sd.SetAsBox(0.5, 4.5, box2d.b2Vec2(12, 0.0), 0)
        body.CreateShape(sd)

        sd.SetAsBox(0.5, 0.5, box2d.b2Vec2(13, 4.0), 0)
        body.CreateShape(sd)

        cd.radius = 0.7
        cd.density = 1
        cd.friction = 0.01
        cd.localPosition = box2d.b2Vec2(0, 0)
        body.CreateShape(cd)
        body.SetMassFromShapes()

        jr = box2d.b2RevoluteJointDef()
        jr.Initialize(self.m_elev, body, bd.position)
        jr.enableLimit = True
        jr.lowerAngle = -0.2
        jr.upperAngle = box2d.b2_pi * 1.1
        jr.collideConnected = True
        self.world.CreateJoint(jr).getAsType()
        # upper body exit
        sd.SetAsBox(14.0, 0.5, box2d.b2Vec2(-3.5, -10.0), 0.0)
        bd.position.Set(17.5, 96.0)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        # "Elastic body" 64 bodies - something like a lin. elastic compound
        # connected via dynamic forces (springs)
        sd = box2d.b2PolygonDef()
        sd.SetAsBox(0.55, 0.55)
        sd.density = 1.5
        sd.friction = 0.01
        sd.filter.groupIndex = -1
        startpoint = box2d.b2Vec2(30, 20)
        bd = box2d.b2BodyDef()
        bd.isBullet = False
        bd.allowSleep = False
        for i in range(8):
            for j in range(8):
                bd.position.Set(j * 1.02, 2.51 + 1.02 * i)
                bd.position += startpoint
                body = self.world.CreateBody(bd)  #
                bodies[8 * i + j] = body
                body.CreateShape(sd)
                body.SetMassFromShapes()
예제 #20
0
    def __init__(self):
        super(ContactCallbackTest, self).__init__()

        sd=box2d.b2PolygonDef() 
        sd.friction = 0
        sd.vertexCount = 3
        sd.setVertex(0,10,10)
        sd.setVertex(1,9,7)
        sd.setVertex(2,10,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,9,7)
        sd.setVertex(1,8,0)
        sd.setVertex(2,10,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,9,7)
        sd.setVertex(1,8,5)
        sd.setVertex(2,8,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,8,5)
        sd.setVertex(1,7,4)
        sd.setVertex(2,8,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,7,4)
        sd.setVertex(1,5,0)
        sd.setVertex(2,8,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,7,4)
        sd.setVertex(1,5,3)
        sd.setVertex(2,5,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,5,3)
        sd.setVertex(1,2,2)
        sd.setVertex(2,5,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,2,2)
        sd.setVertex(1,0,0)
        sd.setVertex(2,5,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(0,2,2)
        sd.setVertex(1,-2,2)
        sd.setVertex(2,0,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-2,2)
        sd.setVertex(1,0,0)
        sd.setVertex(0,-5,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-5,3)
        sd.setVertex(1,-2,2)
        sd.setVertex(0,-5,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-7,4)
        sd.setVertex(1,-5,3)
        sd.setVertex(0,-5,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-7,4)
        sd.setVertex(1,-5,0)
        sd.setVertex(0,-8,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-8,5)
        sd.setVertex(1,-7,4)
        sd.setVertex(0,-8,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-9,7)
        sd.setVertex(1,-8,5)
        sd.setVertex(0,-8,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-9,7)
        sd.setVertex(1,-8,0)
        sd.setVertex(0,-10,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.setVertex(2,-10,10)
        sd.setVertex(1,-9,7)
        sd.setVertex(0,-10,0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.SetAsBox(.5,6,box2d.b2Vec2(10.5,6),0)
        self.world.GetGroundBody().CreateShape(sd)

        sd.SetAsBox(.5,6,box2d.b2Vec2(-10.5,6),0)
        self.world.GetGroundBody().CreateShape(sd)

        bd=box2d.b2BodyDef() 
        bd.position.Set(9.5,60)
        self.m_ball = self.world.CreateBody( bd ) 

        cd=box2d.b2PolygonDef() 
        cd.vertexCount = 8
        w = 1.0
        b = w / (2.0 + math.sqrt(2.0))
        s = math.sqrt(2.0) * b
        cd.setVertex(0,0.5 * s, 0.0)
        cd.setVertex(1,0.5 * w, b)
        cd.setVertex(2,0.5 * w, b + s)
        cd.setVertex(3,0.5 * s, w)
        cd.setVertex(4,-0.5 * s, w)
        cd.setVertex(5,-0.5 * w, b + s)
        cd.setVertex(6,-0.5 * w, b)
        cd.setVertex(7,-0.5 * s, 0.0)
        cd.density = 1.0

        self.m_ball_shape = self.m_ball.CreateShape(cd)
        self.m_ball.SetMassFromShapes()
예제 #21
0
    def __init__(self):
        super(CompoundShapes, self).__init__()
        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, -10.0)
        body = self.world.CreateBody(bd) 

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(50.0, 10.0)
        body.CreateShape(sd)

        sd1=box2d.b2CircleDef() 
        sd1.radius = 0.5
        sd1.localPosition.Set(-0.5, 0.5)
        sd1.density = 2.0

        sd2=box2d.b2CircleDef() 
        sd2.radius = 0.5
        sd2.localPosition.Set(0.5, 0.5)
        sd2.density = 0.0 

        for i in range(10):
            x = box2d.b2Random(-0.1, 0.1)
            bd=box2d.b2BodyDef() 
            bd.position.Set(x + 5.0, 1.05 + 2.5 * i)
            bd.angle = box2d.b2Random(-box2d.b2_pi, box2d.b2_pi)
            body = self.world.CreateBody(bd) 
            body.CreateShape(sd1)
            body.CreateShape(sd2)
            body.SetMassFromShapes()

        sd1=box2d.b2PolygonDef() 
        sd1.SetAsBox(0.25, 0.5)
        sd1.density = 2.0

        sd2=box2d.b2PolygonDef() 
        sd2.SetAsBox(0.25, 0.5, box2d.b2Vec2(0.0, -0.5), 0.5 * box2d.b2_pi)
        sd2.density = 2.0

        for i in range(10):
            x = box2d.b2Random(-0.1, 0.1)
            bd=box2d.b2BodyDef() 
            bd.position.Set(x - 5.0, 1.05 + 2.5 * i)
            bd.angle = box2d.b2Random(-box2d.b2_pi, box2d.b2_pi)
            body = self.world.CreateBody(bd) 
            body.CreateShape(sd1)
            body.CreateShape(sd2)
            body.SetMassFromShapes()

        xf1 = box2d.b2XForm()
        xf1.R.Set(0.3524 * box2d.b2_pi)
        xf1.position = box2d.b2Mul(xf1.R, box2d.b2Vec2(1.0, 0.0))

        sd1=box2d.b2PolygonDef() 
        sd1.vertexCount = 3
        sd1.setVertex(0, box2d.b2Mul(xf1, box2d.b2Vec2(-1.0, 0.0)))
        sd1.setVertex(1, box2d.b2Mul(xf1, box2d.b2Vec2(1.0, 0.0)))
        sd1.setVertex(2, box2d.b2Mul(xf1, box2d.b2Vec2(0.0, 0.5)))
        sd1.density = 2.0

        xf2 = box2d.b2XForm()
        xf2.R.Set(-0.3524 * box2d.b2_pi)
        xf2.position = box2d.b2Mul(xf2.R, box2d.b2Vec2(-1.0, 0.0))

        sd2=box2d.b2PolygonDef() 
        sd2.vertexCount = 3
        sd2.setVertex(0, box2d.b2Mul(xf2, box2d.b2Vec2(-1.0, 0.0)))
        sd2.setVertex(1, box2d.b2Mul(xf2, box2d.b2Vec2(1.0, 0.0)))
        sd2.setVertex(2, box2d.b2Mul(xf2, box2d.b2Vec2(0.0, 0.5)))
        sd2.density = 2.0

        for i in range(10):
            x = box2d.b2Random(-0.1, 0.1)
            bd=box2d.b2BodyDef() 
            bd.position.Set(x, 2.05 + 2.5 * i)
            bd.angle = 0.0
            body = self.world.CreateBody(bd) 
            body.CreateShape(sd1)
            body.CreateShape(sd2)
            body.SetMassFromShapes()

        sd_bottom=box2d.b2PolygonDef() 
        sd_bottom.SetAsBox( 1.5, 0.15 )
        sd_bottom.density = 4.0

        sd_left=box2d.b2PolygonDef() 
        sd_left.SetAsBox(0.15, 2.7, box2d.b2Vec2(-1.45, 2.35), 0.2)
        sd_left.density = 4.0

        sd_right=box2d.b2PolygonDef() 
        sd_right.SetAsBox(0.15, 2.7, box2d.b2Vec2(1.45, 2.35), -0.2)
        sd_right.density = 4.0

        bd=box2d.b2BodyDef() 
        bd.position.Set( 0.0, 2.0 )
        body = self.world.CreateBody(bd) 
        body.CreateShape(sd_bottom)
        body.CreateShape(sd_left)
        body.CreateShape(sd_right)
        body.SetMassFromShapes()
예제 #22
0
 def DefaultVertices(self) :
     global k_scale
     # feet
     for poly in (self.LFootPoly, self.RFootPoly):
         poly.vertexCount = 5
         poly.setVertex(0, k_scale * box2d.b2Vec2(.033,.143))
         poly.setVertex(1, k_scale * box2d.b2Vec2(.023,.033))
         poly.setVertex(2, k_scale * box2d.b2Vec2(.267,.035))
         poly.setVertex(3, k_scale * box2d.b2Vec2(.265,.065))
         poly.setVertex(4, k_scale * box2d.b2Vec2(.117,.143))
     # calves
     for poly in (self.LCalfPoly, self.RCalfPoly):
         poly.vertexCount = 4
         poly.setVertex(0, k_scale * box2d.b2Vec2(.089,.016))
         poly.setVertex(1, k_scale * box2d.b2Vec2(.178,.016))
         poly.setVertex(2, k_scale * box2d.b2Vec2(.205,.417))
         poly.setVertex(3, k_scale * box2d.b2Vec2(.095,.417))
     # thighs
     for poly in (self.LThighPoly, self.RThighPoly):
         poly.vertexCount = 4
         poly.setVertex(0, k_scale * box2d.b2Vec2(.137,.032))
         poly.setVertex(1, k_scale * box2d.b2Vec2(.243,.032))
         poly.setVertex(2, k_scale * box2d.b2Vec2(.318,.343))
         poly.setVertex(3, k_scale * box2d.b2Vec2(.142,.343))
     # pelvis
     self.PelvisPoly.vertexCount = 5
     self.PelvisPoly.setVertex(0, k_scale * box2d.b2Vec2(.105,.051))
     self.PelvisPoly.setVertex(1, k_scale * box2d.b2Vec2(.277,.053))
     self.PelvisPoly.setVertex(2, k_scale * box2d.b2Vec2(.320,.233))
     self.PelvisPoly.setVertex(3, k_scale * box2d.b2Vec2(.112,.233))
     self.PelvisPoly.setVertex(4, k_scale * box2d.b2Vec2(.067,.152))
     # stomach
     self.StomachPoly.vertexCount = 4
     self.StomachPoly.setVertex(0, k_scale * box2d.b2Vec2(.088,.043))
     self.StomachPoly.setVertex(1, k_scale * box2d.b2Vec2(.284,.043))
     self.StomachPoly.setVertex(2, k_scale * box2d.b2Vec2(.295,.231))
     self.StomachPoly.setVertex(3, k_scale * box2d.b2Vec2(.100,.231))
     # chest
     self.ChestPoly.vertexCount = 4
     self.ChestPoly.setVertex(0, k_scale * box2d.b2Vec2(.091,.042))
     self.ChestPoly.setVertex(1, k_scale * box2d.b2Vec2(.283,.042))
     self.ChestPoly.setVertex(2, k_scale * box2d.b2Vec2(.177,.289))
     self.ChestPoly.setVertex(3, k_scale * box2d.b2Vec2(.065,.289))
     # head
     self.HeadCirc.radius = k_scale * .115
     # neck
     self.NeckPoly.vertexCount = 4
     self.NeckPoly.setVertex(0, k_scale * box2d.b2Vec2(.038,.054))
     self.NeckPoly.setVertex(1, k_scale * box2d.b2Vec2(.149,.054))
     self.NeckPoly.setVertex(2, k_scale * box2d.b2Vec2(.154,.102))
     self.NeckPoly.setVertex(3, k_scale * box2d.b2Vec2(.054,.113))
     # upper arms
     for poly in (self.LUpperArmPoly, self.RUpperArmPoly):
         poly.vertexCount = 5
         poly.setVertex(0, k_scale * box2d.b2Vec2(.092,.059))
         poly.setVertex(1, k_scale * box2d.b2Vec2(.159,.059))
         poly.setVertex(2, k_scale * box2d.b2Vec2(.169,.335))
         poly.setVertex(3, k_scale * box2d.b2Vec2(.078,.335))
         poly.setVertex(4, k_scale * box2d.b2Vec2(.064,.248))
     # forearms
     for poly in (self.LForearmPoly, self.RForearmPoly):
         poly.vertexCount = 4
         poly.setVertex(0, k_scale * box2d.b2Vec2(.082,.054))
         poly.setVertex(1, k_scale * box2d.b2Vec2(.138,.054))
         poly.setVertex(2, k_scale * box2d.b2Vec2(.149,.296))
         poly.setVertex(3, k_scale * box2d.b2Vec2(.088,.296))
     # hands
     for poly in (self.LHandPoly, self.RHandPoly):
         poly.vertexCount = 5
         poly.setVertex(0, k_scale * box2d.b2Vec2(.066,.031))
         poly.setVertex(1, k_scale * box2d.b2Vec2(.123,.020))
         poly.setVertex(2, k_scale * box2d.b2Vec2(.160,.127))
         poly.setVertex(3, k_scale * box2d.b2Vec2(.127,.178))
         poly.setVertex(4, k_scale * box2d.b2Vec2(.074,.178))
예제 #23
0
    def __init__(self):
        super(Car, self).__init__()
        # car body
        poly1=box2d.b2PolygonDef()
        poly2=box2d.b2PolygonDef()

        # bottom half
        poly1.vertexCount = 5
        poly1.setVertex(4,-2.2,-0.74)
        poly1.setVertex(3,-2.2,0)
        poly1.setVertex(2,1.0,0)
        poly1.setVertex(1,2.2,-0.2)
        poly1.setVertex(0,2.2,-0.74)
        poly1.filter.groupIndex = -1

        poly1.density		= 20.0
        poly1.friction		= 0.68
        poly1.filter.groupIndex	= -1

        # top half
        poly2.vertexCount = 4
        poly2.setVertex(3,-1.7,0)
        poly2.setVertex(2,-1.3,0.7)
        poly2.setVertex(1,0.5,0.74)
        poly2.setVertex(0,1.0,0)
        poly2.filter.groupIndex = -1

        poly2.density		= 5.0
        poly2.friction		= 0.68
        poly2.filter.groupIndex	= -1

        bd=box2d.b2BodyDef() 
        bd.position.Set(-35.0, 2.8)

        self.m_vehicle = self.world.CreateBody(bd)
        self.m_vehicle.CreateShape(poly1)
        self.m_vehicle.CreateShape(poly2)
        self.m_vehicle.SetMassFromShapes()

        # vehicle wheels
        circ = box2d.b2CircleDef()
        circ.density = 40.0
        circ.radius = 0.38608
        circ.friction = 0.8
        circ.filter.groupIndex = -1

        bd=box2d.b2BodyDef() 
        bd.allowSleep = False
        bd.position.Set(-33.8, 2.0)

        self.m_rightWheel = self.world.CreateBody(bd)
        self.m_rightWheel.CreateShape(circ)
        self.m_rightWheel.SetMassFromShapes()

        bd.position.Set(-36.2, 2.0)
        self.m_leftWheel = self.world.CreateBody(bd)
        self.m_leftWheel.CreateShape(circ)
        self.m_leftWheel.SetMassFromShapes()

        # join wheels to chassis
        anchor=box2d.b2Vec2() 
        jd=box2d.b2RevoluteJointDef() 
        jd.Initialize(self.m_vehicle, self.m_leftWheel, self.m_leftWheel.GetWorldCenter())
        jd.collideConnected = False
        jd.enableMotor = True
        jd.maxMotorTorque = 10.0
        jd.motorSpeed = 0.0
        self.m_leftJoint = self.world.CreateJoint(jd).getAsType() 

        jd.Initialize(self.m_vehicle, self.m_rightWheel, self.m_rightWheel.GetWorldCenter())
        jd.collideConnected = False
        self.m_rightJoint = self.world.CreateJoint(jd).getAsType() 

        # ground
        box=box2d.b2PolygonDef() 
        box.SetAsBox(19.5, 0.5)
        box.friction = 0.62

        bd=box2d.b2BodyDef() 
        bd.position.Set(-25.0, 1.0)

        ground = self.world.CreateBody(bd) 
        ground.CreateShape(box)

        # more ground
        box=box2d.b2PolygonDef() 
        bd=box2d.b2BodyDef() 

        box.SetAsBox(9.5, 0.5, box2d.b2Vec2_zero, 0.1 * box2d.b2_pi)
        box.friction = 0.62
        bd.position.Set(27.0 - 30.0, 3.1)

        ground = self.world.CreateBody(bd) 
        ground.CreateShape(box)

        # more ground
        box=box2d.b2PolygonDef() 
        bd=box2d.b2BodyDef() 

        box.SetAsBox(9.5, 0.5, box2d.b2Vec2_zero, -0.1 * box2d.b2_pi)
        box.friction = 0.62
        bd.position.Set(55.0 - 30.0, 3.1)

        ground = self.world.CreateBody(bd) 
        ground.CreateShape(box)

        # more ground
        box=box2d.b2PolygonDef() 
        bd=box2d.b2BodyDef() 

        box.SetAsBox(9.5, 0.5, box2d.b2Vec2_zero, 0.03 * box2d.b2_pi)
        box.friction = 0.62
        bd.position.Set(41.0, 2.0)

        ground = self.world.CreateBody(bd) 
        ground.CreateShape(box)

        # more ground
        box=box2d.b2PolygonDef() 
        bd=box2d.b2BodyDef() 

        box.SetAsBox(5.0, 0.5, box2d.b2Vec2_zero, 0.15 * box2d.b2_pi)
        box.friction = 0.62
        bd.position.Set(50.0, 4.0)

        ground = self.world.CreateBody(bd) 
        ground.CreateShape(box)

        # more ground
        box=box2d.b2PolygonDef() 
        bd=box2d.b2BodyDef() 

        box.SetAsBox(20.0, 0.5)
        box.friction = 0.62
        bd.position.Set(85.0, 2.0)

        ground = self.world.CreateBody(bd) 
        ground.CreateShape(box)
예제 #24
0
    def __init__(self):
        super(CCDTest, self).__init__()
        # Note that this test has a lot of commented-out versions that aren't implemented here.
        # See the original source code for more (Box2D/Examples/TestBed/Tests/CCDTest.h)
        k_restitution = 1.4

        bd=box2d.b2BodyDef()
        bd.position.Set(0.0, 20.0)
        body = self.world.CreateBody(bd) 

        sd=box2d.b2PolygonDef() 
        sd.density = 0.0
        sd.restitution = k_restitution

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(-10.0, 0.0), 0.0)
        body.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(10.0, 0.0), 0.0)
        body.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(0.0, -10.0), 0.5 * box2d.b2_pi)
        body.CreateShape(sd)

        sd.SetAsBox(0.1, 10.0, box2d.b2Vec2(0.0, 10.0), -0.5 * box2d.b2_pi)
        body.CreateShape(sd)

        sd_bottom=box2d.b2PolygonDef() 
        sd_bottom.SetAsBox( 1.5, 0.15 )
        sd_bottom.density = 4.0

        sd_left=box2d.b2PolygonDef() 
        sd_left.SetAsBox(0.15, 2.7, box2d.b2Vec2(-1.45, 2.35), 0.2)
        sd_left.density = 4.0

        sd_right=box2d.b2PolygonDef() 
        sd_right.SetAsBox(0.15, 2.7, box2d.b2Vec2(1.45, 2.35), -0.2)
        sd_right.density = 4.0

        bd=box2d.b2BodyDef() 
        bd.position.Set( 0.0, 15.0 )
        body = self.world.CreateBody(bd) 
        body.CreateShape(sd_bottom)
        body.CreateShape(sd_left)
        body.CreateShape(sd_right)
        body.SetMassFromShapes()
        
        return

        for i in range(0):
            bd=box2d.b2BodyDef() 
            bd.position.Set(0.0, 15.0 + i)
            bd.isBullet = True
            body = self.world.CreateBody(bd) 
            body.SetAngularVelocity(box2d.b2Random(-50.0, 50.0))

            sd=box2d.b2CircleDef() 
            sd.radius = 0.25
            sd.density = 1.0
            sd.restitution = 0.0
            body.CreateShape(sd)
            body.SetMassFromShapes()
예제 #25
0
# misrepresented as being the original software.
# 3. This notice may not be removed or altered from any source distribution.

import pygame
from pygame.locals import *
import test_main
from test_main import box2d

from foilsim import *
from foilsim.simutils import *

import math

from operator import add

velocity_20_mph = box2d.b2Vec2(-8.94, 0.0)
velocity_5_mph = velocity_20_mph / 4.0

class Masheet(test_main.Framework):
	"""You can use this class as an outline for your tests.

	"""		
	name = "Kite" # Name of the class to display
	def __init__(self):
		""" 
		Initialize all of your objects here.
		Be sure to call the Framework's initializer first.
		"""
		super(Masheet, self).__init__()

		#self.world.SetGravity(b2Vec2(0.0, 0.0))
예제 #26
0
    def __init__(self):
        super(MotorsAndLimits, self).__init__()
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(50.0, 10.0)

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, -10.0)
        ground = self.world.CreateBody(bd)
        ground.CreateShape(sd)

        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(2.0, 0.5)
        sd.density = 5.0
        sd.friction = 0.05

        bd=box2d.b2BodyDef() 

        rjd=box2d.b2RevoluteJointDef() 

        prevBody=ground
        y = 8.0

        bd.position.Set(3.0, y)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        body.SetMassFromShapes()

        rjd.Initialize(prevBody, body, box2d.b2Vec2(0.0, y))
        rjd.motorSpeed = 1.0 * box2d.b2_pi
        rjd.maxMotorTorque = 10000.0
        rjd.enableMotor = True

        self.m_joint1 = self.world.CreateJoint(rjd).getAsType()

        prevBody = body

        bd.position.Set(9.0, y)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        body.SetMassFromShapes()

        rjd.Initialize(prevBody, body, box2d.b2Vec2(6.0, y))
        rjd.motorSpeed = 0.5 * box2d.b2_pi
        rjd.maxMotorTorque = 2000.0
        rjd.enableMotor = True
        rjd.lowerAngle = - 0.5 * box2d.b2_pi
        rjd.upperAngle = 0.5 * box2d.b2_pi
        rjd.enableLimit = True

        self.m_joint2 = self.world.CreateJoint(rjd).getAsType()

        bd.position.Set(-10.0, 10.0)
        bd.angle = 0.5 * box2d.b2_pi
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        body.SetMassFromShapes()

        pjd=box2d.b2PrismaticJointDef() 
        pjd.Initialize(ground, body, box2d.b2Vec2(-10.0, 10.0), box2d.b2Vec2(1.0, 0.0))
        pjd.motorSpeed = 10.0
        pjd.maxMotorForce = 1000.0
        pjd.enableMotor = True
        pjd.lowerTranslation = 0.0
        pjd.upperTranslation = 20.0
        pjd.enableLimit = True

        self.m_joint3 = self.world.CreateJoint(pjd).getAsType()
예제 #27
0
    def __init__(self):
        super(ApplyForce, self).__init__()
        self.world.SetGravity(box2d.b2Vec2(0.0, 0.0))

        k_restitution = 0.4

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, 20.0)
        ground = self.world.CreateBody(bd) 

        sd=box2d.b2PolygonDef() 
        sd.density = 0.0
        sd.restitution = k_restitution

        sd.SetAsBox(0.2, 20.0, box2d.b2Vec2(-20.0, 0.0), 0.0)
        ground.CreateShape(sd)

        sd.SetAsBox(0.2, 20.0, box2d.b2Vec2(20.0, 0.0), 0.0)
        ground.CreateShape(sd)

        sd.SetAsBox(0.2, 20.0, box2d.b2Vec2(0.0, -20.0), 0.5 * box2d.b2_pi)
        ground.CreateShape(sd)

        sd.SetAsBox(0.2, 20.0, box2d.b2Vec2(0.0, 20.0), -0.5 * box2d.b2_pi)
        ground.CreateShape(sd)

        xf1 = box2d.b2XForm ()
        xf1.R.Set(0.3524 * box2d.b2_pi)
        xf1.position = box2d.b2Mul(xf1.R, box2d.b2Vec2(1.0, 0.0))

        sd1=box2d.b2PolygonDef() 
        sd1.vertexCount = 3
        sd1.setVertex(0, box2d.b2Mul(xf1, box2d.b2Vec2(-1.0, 0.0)))
        sd1.setVertex(1, box2d.b2Mul(xf1, box2d.b2Vec2(1.0, 0.0)))
        sd1.setVertex(2, box2d.b2Mul(xf1, box2d.b2Vec2(0.0, 0.5)))
        sd1.density = 2.0

        xf2 = box2d.b2XForm ()
        xf2.R.Set(-0.3524 * box2d.b2_pi)
        xf2.position = box2d.b2Mul(xf2.R, box2d.b2Vec2(-1.0, 0.0))

        sd2=box2d.b2PolygonDef() 
        sd2.vertexCount = 3
        sd2.setVertex(0, box2d.b2Mul(xf2, box2d.b2Vec2(-1.0, 0.0)))
        sd2.setVertex(1, box2d.b2Mul(xf2, box2d.b2Vec2(1.0, 0.0)))
        sd2.setVertex(2, box2d.b2Mul(xf2, box2d.b2Vec2(0.0, 0.5)))
        sd2.density = 2.0

        bd=box2d.b2BodyDef() 
        bd.angularDamping = 2.0
        bd.linearDamping = 0.1

        bd.position.Set(0.0, 1.05)
        bd.angle = box2d.b2_pi
        self.m_body = self.world.CreateBody(bd)
        self.m_body.CreateShape(sd1)
        self.m_body.CreateShape(sd2)
        self.m_body.SetMassFromShapes()
예제 #28
0
    def DefaultPositions(self) :
        global k_scale
        for foot in (self.LFootDef, self.RFootDef):
            foot.position		= k_scale * box2d.b2Vec2(-.122,-.901)
        for calf in (self.LCalfDef, self.RCalfDef):
            calf.position		= k_scale * box2d.b2Vec2(-.177,-.771)
        for thigh in (self.LThighDef, self.RThighDef):
            thigh.position		= k_scale * box2d.b2Vec2(-.217,-.391)
        for upperarm in (self.LUpperArmDef, self.RUpperArmDef):
            upperarm.position	= k_scale * box2d.b2Vec2(-.127,.228)
        for forearm in (self.LForearmDef, self.RForearmDef):
            forearm.position    = k_scale * box2d.b2Vec2(-.117,-.011)
        for hand in (self.LHandDef, self.RHandDef):
            hand.position		= k_scale * box2d.b2Vec2(-.112,-.136)

        self.PelvisDef.position	= k_scale * box2d.b2Vec2(-.177,-.101)
        self.StomachDef.position= k_scale * box2d.b2Vec2(-.142,.088)
        self.ChestDef.position	= k_scale * box2d.b2Vec2(-.132,.282)
        self.NeckDef.position	= k_scale * box2d.b2Vec2(-.102,.518)
        self.HeadDef.position	= k_scale * box2d.b2Vec2(.022,.738)
예제 #29
0
    def DefaultJoints(self) :
        global k_scale
        #b.LAnkleDef.body1		= LFoot
        #b.LAnkleDef.body2		= LCalf
        #b.self.RAnkleDef.body1		= self.RFoot
        #b.self.RAnkleDef.body2		= self.RCalf
        # ankles
        anchor = k_scale * box2d.b2Vec2(-.045,-.75)
        self.LAnkleDef.localAnchor1		= self.RAnkleDef.localAnchor1	= anchor - self.LFootDef.position
        self.LAnkleDef.localAnchor2		= self.RAnkleDef.localAnchor2	= anchor - self.LCalfDef.position
        self.LAnkleDef.referenceAngle	= self.RAnkleDef.referenceAngle	= 0.0
        self.LAnkleDef.lowerAngle		= self.RAnkleDef.lowerAngle		= -0.523598776
        self.LAnkleDef.upperAngle		= self.RAnkleDef.upperAngle		= 0.523598776

        #b.self.LKneeDef.body1		= self.LCalf
        #b.self.LKneeDef.body2		= self.LThigh
        #b.self.RKneeDef.body1		= self.RCalf
        #b.self.RKneeDef.body2		= self.RThigh
        # knees
        anchor = k_scale * box2d.b2Vec2(-.030,-.355)
        self.LKneeDef.localAnchor1	= self.RKneeDef.localAnchor1		= anchor - self.LCalfDef.position
        self.LKneeDef.localAnchor2	= self.RKneeDef.localAnchor2		= anchor - self.LThighDef.position
        self.LKneeDef.referenceAngle	= self.RKneeDef.referenceAngle	= 0.0
        self.LKneeDef.lowerAngle		= self.RKneeDef.lowerAngle		= 0
        self.LKneeDef.upperAngle		= self.RKneeDef.upperAngle		= 2.61799388

        #b.self.LHipDef.body1			= self.LThigh
        #b.self.LHipDef.body2			= Pelvis
        #b.self.RHipDef.body1			= self.RThigh
        #b.self.RHipDef.body2			= Pelvis
        # hips
        anchor = k_scale * box2d.b2Vec2(.005,-.045)
        self.LHipDef.localAnchor1	= self.RHipDef.localAnchor1		= anchor - self.LThighDef.position
        self.LHipDef.localAnchor2	= self.RHipDef.localAnchor2		= anchor - self.PelvisDef.position
        self.LHipDef.referenceAngle	= self.RHipDef.referenceAngle	= 0.0
        self.LHipDef.lowerAngle		= self.RHipDef.lowerAngle		= -2.26892803
        self.LHipDef.upperAngle		= self.RHipDef.upperAngle		= 0

        #b.self.LowerAbsDef.body1		= Pelvis
        #b.self.LowerAbsDef.body2		= Stomach
        # lower abs
        anchor = k_scale * box2d.b2Vec2(.035,.135)
        self.LowerAbsDef.localAnchor1	= anchor - self.PelvisDef.position
        self.LowerAbsDef.localAnchor2	= anchor - self.StomachDef.position
        self.LowerAbsDef.referenceAngle	= 0.0
        self.LowerAbsDef.lowerAngle		= -0.523598776
        self.LowerAbsDef.upperAngle		= 0.523598776

        #b.UpperAbsDef.body1		= Stomach
        #b.UpperAbsDef.body2		= Chest
        # upper abs
        anchor = k_scale * box2d.b2Vec2(.045,.320)
        self.UpperAbsDef.localAnchor1	= anchor - self.StomachDef.position
        self.UpperAbsDef.localAnchor2	= anchor - self.ChestDef.position
        self.UpperAbsDef.referenceAngle	= 0.0
        self.UpperAbsDef.lowerAngle		= -0.523598776
        self.UpperAbsDef.upperAngle		= 0.174532925

        #b.self.LowerNeckDef.body1	= Chest
        #b.self.LowerNeckDef.body2	= Neck
        # lower neck
        anchor = k_scale * box2d.b2Vec2(-.015,.575)
        self.LowerNeckDef.localAnchor1	= anchor - self.ChestDef.position
        self.LowerNeckDef.localAnchor2	= anchor - self.NeckDef.position
        self.LowerNeckDef.referenceAngle	= 0.0
        self.LowerNeckDef.lowerAngle		= -0.174532925
        self.LowerNeckDef.upperAngle		= 0.174532925

        #b.self.UpperNeckDef.body1	= Chest
        #b.self.UpperNeckDef.body2	= Head
        # upper neck
        anchor = k_scale * box2d.b2Vec2(-.005,.630)
        self.UpperNeckDef.localAnchor1	= anchor - self.ChestDef.position
        self.UpperNeckDef.localAnchor2	= anchor - self.HeadDef.position
        self.UpperNeckDef.referenceAngle	= 0.0
        self.UpperNeckDef.lowerAngle		= -0.610865238
        self.UpperNeckDef.upperAngle		= 0.785398163

        #b.self.LShoulderDef.body1	= Chest
        #b.self.LShoulderDef.body2	= self.LUpperArm
        #b.self.RShoulderDef.body1	= Chest
        #b.self.RShoulderDef.body2	= self.RUpperArm
        # shoulders
        anchor = k_scale * box2d.b2Vec2(-.015,.545)
        self.LShoulderDef.localAnchor1	= self.RShoulderDef.localAnchor1		= anchor - self.ChestDef.position
        self.LShoulderDef.localAnchor2	= self.RShoulderDef.localAnchor2		= anchor - self.LUpperArmDef.position
        self.LShoulderDef.referenceAngle	= self.RShoulderDef.referenceAngle	= 0.0
        self.LShoulderDef.lowerAngle		= self.RShoulderDef.lowerAngle		= -1.04719755
        self.LShoulderDef.upperAngle		= self.RShoulderDef.upperAngle		= 3.14159265

        #b.self.LElbowDef.body1		= self.LForearm
        #b.self.LElbowDef.body2		= self.LUpperArm
        #b.self.RElbowDef.body1		= self.RForearm
        #b.self.RElbowDef.body2		= self.RUpperArm
        # elbows
        anchor = k_scale * box2d.b2Vec2(-.005,.290)
        self.LElbowDef.localAnchor1		= self.RElbowDef.localAnchor1	= anchor - self.LForearmDef.position
        self.LElbowDef.localAnchor2		= self.RElbowDef.localAnchor2	= anchor - self.LUpperArmDef.position
        self.LElbowDef.referenceAngle	= self.RElbowDef.referenceAngle	= 0.0
        self.LElbowDef.lowerAngle		= self.RElbowDef.lowerAngle		= -2.7925268
        self.LElbowDef.upperAngle		= self.RElbowDef.upperAngle		= 0

        #b.self.LWristDef.body1		= self.LHand
        #b.self.LWristDef.body2		= self.LForearm
        #b.self.RWristDef.body1		= self.RHand
        #b.self.RWristDef.body2		= self.RForearm
        # wrists
        anchor = k_scale * box2d.b2Vec2(-.010,.045)
        self.LWristDef.localAnchor1		= self.RWristDef.localAnchor1	= anchor - self.LHandDef.position
        self.LWristDef.localAnchor2		= self.RWristDef.localAnchor2	= anchor - self.LForearmDef.position
        self.LWristDef.referenceAngle	= self.RWristDef.referenceAngle	= 0.0
        self.LWristDef.lowerAngle		= self.RWristDef.lowerAngle		= -0.174532925
        self.LWristDef.upperAngle		= self.RWristDef.upperAngle		= 0.174532925
예제 #30
0
    def __init__(self):
        super(SliderCrank, self).__init__()
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(50.0, 10.0)

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, -10.0)
        ground = self.world.CreateBody(bd)
        ground.CreateShape(sd)

        # Define crank.
        sd=box2d.b2PolygonDef() 
        sd.SetAsBox(0.5, 2.0)
        sd.density = 1.0

        rjd=box2d.b2RevoluteJointDef() 

        prevBody=ground

        bd=box2d.b2BodyDef() 
        bd.position.Set(0.0, 7.0)
        body = self.world.CreateBody(bd) 
        body.CreateShape(sd)
        body.SetMassFromShapes()

        rjd.Initialize(prevBody, body, box2d.b2Vec2(0.0, 5.0))
        rjd.motorSpeed = 1.0 * box2d.b2_pi
        rjd.maxMotorTorque = 10000.0
        rjd.enableMotor = True
        self.m_joint1 = self.world.CreateJoint(rjd).getAsType()

        prevBody = body

        # Define follower.
        sd.SetAsBox(0.5, 4.0)
        bd.position.Set(0.0, 13.0)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        body.SetMassFromShapes()

        rjd.Initialize(prevBody, body, box2d.b2Vec2(0.0, 9.0))
        rjd.enableMotor = False
        self.world.CreateJoint(rjd).getAsType()

        prevBody = body

        # Define piston
        sd.SetAsBox(1.5, 1.5)
        bd.position.Set(0.0, 17.0)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        body.SetMassFromShapes()

        rjd.Initialize(prevBody, body, box2d.b2Vec2(0.0, 17.0))
        self.world.CreateJoint(rjd).getAsType()

        pjd=box2d.b2PrismaticJointDef() 
        pjd.Initialize(ground, body, box2d.b2Vec2(0.0, 17.0), box2d.b2Vec2(0.0, 1.0))

        pjd.maxMotorForce = 1000.0
        pjd.enableMotor = True

        self.m_joint2 = self.world.CreateJoint(pjd).getAsType()

        # Create a payload
        sd.density = 2.0
        bd.position.Set(0.0, 23.0)
        body = self.world.CreateBody(bd)
        body.CreateShape(sd)
        body.SetMassFromShapes()