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
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
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)
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
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)
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()
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
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)
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
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))
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
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()
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()
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()
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()
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()
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)
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)
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()
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()
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()
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))
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)
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()
# 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))
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()
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()
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)
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
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()