예제 #1
0
	def _subdivide( self ):
		faces = []
		mesh = Module()
		for face in self.polygons:
			
			a = self._getMidpoint( face[0], face[1])
			b = self._getMidpoint( face[1], face[2] )
			c = self._getMidpoint( face[0], face[2] )
			
			faces.append( [face[0],a,c] )
			faces.append( [face[1],b,a] )
			faces.append( [face[2],c,b] )
			faces.append( [a,b,c])

		self.polygons = faces
		for face in faces:
			mesh.add_shape(self._gen_poly(face,face))

		self.mesh =  mesh
예제 #2
0
	def __create_cylinder( width=1, height=1, sides=50, x0=0, y0=0, z0=0,
			color = [0,0,200,0] ):
		""" Returns a cylinder shape.
			
			The class of the cylinder will be "Module", and will be treated
			as a module generated through manual module construction.
		"""
		cylinder = Module()
		
		mx = 255 // sides
				
		for i in range(sides):
			part1 = i * pi * 2 / sides
			part2 = (i+1)%sides * pi * 2 / sides
			x1 = cos(part1) * width
			z1 = sin(part1) * height
			x2 = cos(part2) * width
			z2 = sin(part2) * height
			x1a = cos(part1) * 120 + 120
			z1a = sin(part1) * 120 + 120
			x2a = cos(part2) * 120 + 120
			z2a = sin(part2) * 120 + 120			
			
			cylinder.add_shape(Polygon(nparray([ [x1,1,z1,1], [x2,1,z2,1],
				[0,1,0,1] ] ),color=color,normals=nparray([[0,1,0,1]for i in range(4)]),
				anchor=nparray([[0,i*mx,-1,-1],[0,(i+1)*mx,-1,-1],
				[255,i*mx,-1,-1],[255,(i+1)*255,-1,-1]]).flatten().astype(int))) 
					
			cylinder.add_shape(Polygon(nparray([ [x1,0,z1,1], [x2,0,z2,1],
				[0,0,0,1]] ),color=color,normals=nparray([[0,-1,0,1]for i in range(4)]),
				anchor=nparray([[0,i*mx,-1,-1],[0,(i+1)*mx,-1,-1],
				[255,i*mx,-1,-1],[255,(i+1)*255,-1,-1]]).flatten().astype(int))) 

			cylinder.add_shape( Polygon(nparray(\
			[	[x1,0,z1,1], [x2,0,z2,1], [x2,1,z2,1], [x1,1,z1,1]  ] ),
			color=color,normals=nparray([[x1,0,z1,1],[x2,0,z1,1],[x2,0,z1,1],[x1,0,z1,1]]),
				anchor=nparray([[i*mx,0,-1,-1],[(i+1)*mx,0,-1,-1],
				[i*mx,255,-1,-1],[(i+1)*mx,255,-1,-1]]).flatten().astype(int))) 
		
		cylinder.id[0] = 'Cylinder'
		return cylinder
예제 #3
0
	def build_mesh(self):
		""" Builds the xwing mesh """
		cylinder = lambda sides : ShapeFactory().gen_shape('cylinder')
		box = lambda : ShapeFactory().gen_shape('box')
		
		# engine
		engine = Module()
		engine.scale( 1.3, 6, 1.3 )
		engine.rotate( 0, 1, 'x' )
		engine.add_element( cylinder(sides=10) )
		engine.scale(.8,.8,1.1)
		engine.body_color(Colors.FLAME)
		# engine.body_color(Colors.WHITE)
		engine.add_element( cylinder(sides=10) )
		
		# laser
		laser = Module()
		laser.scale(.5,5,.5)
		laser.rotate(0,1,'x')
		laser.add_element( cylinder(sides=6) )
		laser.scale(0.4,0.4,1)
		laser.translate(0,0,4.5)
		laser.body_color(Colors.OFF_RED)
		# laser.body_color(Colors.WHITE)
		laser.add_element( cylinder(sides=10) )
		
		# wing
		wing = Module()
		poly = Polygon( nparray( [[0,0,0,1],[0,0,5,1],[15,0,3,1],[15,0,0,1]] ),
			normals=nparray([[0,-1,0,1]for i in range(4)]))
		wing.add_shape( poly )
		wing.translate(0,.5,0)
		Polygon( nparray( [[0,0,0,1],[0,0,5,1],[15,0,3,1],[15,0,0,1]] ),
			normals=nparray([[0,1,0,1]for i in range(4)]))
		wing.add_shape( poly )
		wing.identity()
		wing.translate( 3, 1.6, -1 )
		wing.add_element( engine )
		wing.identity()
		
		poly = Polygon( nparray( [[15,0,3,1],[15,0,0,1],[15,.5,0,1],[15,.5,3,1]] ),
			normals= nparray([[1,0,0,1]for i in range(4)]))
		wing.add_shape( poly )
		poly = Polygon( nparray( [[15,0,0,1],[0,0,0,1],[0,.5,0,1],[15,.5,0,1]] ),
			normals= nparray([[0,0,-1,1]for i in range(4)]))
		wing.add_shape( poly )
		poly = Polygon( nparray( [[15,0,3,1],[15,0.5,3,1],[0,.5,5,1],[0,0,5,1]] ),
			normals= nparray([[2,0,15,1]for i in range(4)]))
		wing.add_shape( poly )
		
		wing.translate( 15, .25, 0 )
		wing.add_element( laser )
		
		# 4 Wings
		wings = Module()
		wings.body_color( Colors.GREY )
		# wings.body_color(Colors.WHITE)
		wings.rotate( cos(.3),sin(.3), 'z' )
		wings.translate( body_width, 0, 0 )
		wings.add_element(wing)
		
		wings.identity()
		wings.scale(1,-1,1)
		wings.rotate(cos(-.3),sin(-.3),'z')
		wings.translate(body_width,0,0)
		wings.add_element(wing)
		
		wings.identity()
		wings.scale(-1,1,1)
		wings.rotate(cos(-.3),sin(-.3),'z')
		wings.translate(-body_width,0,0)
		wings.add_element(wing)
		
		wings.identity()
		wings.scale(-1,-1,1)
		wings.rotate(cos(.3),sin(.3),'z')
		wings.translate(-body_width,0,0)
		wings.add_element(wing)
		
		# body
		body = Module()
		body.surface_color(Colors.DARK)
		body.body_color(Colors.GRAY)
		# body.body_color(Colors.FLAME)
		# body.body_color(Colors.WHITE)
		body.add_element(wings)
		body.scale(body_width,body_width,8)
		body.translate(0,0,4)
		body.add_element( box() )
		
		body.identity()
		# body.body_color(Colors.FLAME)
		body.body_color(Colors.GRAY)
		poly = Polygon( nparray([
			[body_width,body_width,12,1],
			[body_width,-body_width,12,1],
			[body_width*.5,-body_width*.3,35,1],
			[body_width*.5,body_width*.3,35,1]]),
			normals= nparray([[23,0,.5*body_width,1]for i in range(4)]))
		body.add_shape( poly )
		
		poly = Polygon( nparray([
			[-body_width,body_width,12,1],
			[-body_width,-body_width,12,1],
			[-body_width*.5,-body_width*.3,35,1],
			[-body_width*.5,body_width*.3,35,1]]),
			normals= nparray([[-23,0,.5*body_width,1]for i in range(4)]))
		body.add_shape(poly)
		
		poly = Polygon( nparray([
			[-body_width,body_width,12,1],
			[body_width,body_width,12,1],
			[body_width*.5,body_width*.3,35,1],
			[-body_width*.5,body_width*.3,35,1]]),
			normals= nparray([[0,23,.5*body_width,1]for i in range(4)]))
		body.add_shape(poly)
			
		poly = Polygon( nparray([
			[-body_width,-body_width,12,1],
			[body_width,-body_width,12,1],
			[body_width*.5,-body_width*.3,35,1],
			[-body_width*.5,-body_width*.3,35,1]]),
			normals= nparray([[0,-23,.5*body_width,1]for i in range(4)]))
		body.add_shape(poly)
		
		poly = Polygon( nparray([
			[-body_width*.5, body_width*.3,35,1],
			[ body_width*.5, body_width*.3,35,1],
			[ body_width*.5,-body_width*.3,35,1],
			[-body_width*.5,-body_width*.3,35,1]]),
			normals= nparray([[0,0,1,1]for i in range(4)]))
		body.add_shape(poly)

		body.id[0] = 'Xwing'
		self.mesh = body
예제 #4
0
	def __create_box( width=1, height=1, depth=1, x0=0, y0=0, z0=0,
			color = [[200,200,0,0] for i in range(6)] ):
		""" Returns a box shape.
			
			The class of the square will be "Module", and will be treated
			as a module generated through manual module construction.
		"""
		box = Module()
		(w,h,d) = (width,height,depth) # for conciseness
		
		# Back
		vertices = nparray([ [-w+x0,-h+y0,-d+z0,1],[-w+x0,h+y0,z0-d,1],[w+x0,h+y0,z0-d,1],
			[w+x0,-h+y0,z0-d,1] ] )
		box.add_shape( Polygon(vertices, color = color[0], normals=nparray([0,0,-1,0]),
			anchor=nparray([[0,255,-1,-1], [0,0,-1,-1], [255,0,-1,-1], [255,255,-1,-1]]).flatten().astype(int)) ) 
		
		# Front
		vertices = nparray([ [-w+x0,-h+y0,d+z0,1],[-w+x0,h+y0,z0+d,1],[w+x0,h+y0,z0+d,1],
			[w+x0,-h+y0,z0+d,1] ] )
		box.add_shape(Polygon( vertices, color = color[1], normals=nparray([0,0,1,0]),
			anchor=nparray([[0,255,-1,-1], [0,0,-1,-1], [255,0,-1,-1], [255,255,-1,-1]]).flatten().astype(int)) ) 

		
		# Left
		vertices = nparray([ [-w+x0,-h+y0,d+z0,1], 
			[-w+x0,-h+y0,z0-d,1], [-w+x0,h+y0,z0-d,1], [-w+x0,h+y0,z0+d,1] ] )
		box.add_shape( Polygon( vertices, color = color[2],normals=nparray([-1,0,0,0]),
			anchor=nparray([[0,0,-1,-1], [255,0,-1,-1], [255,255,-1,-1], [0,255,-1,-1]]).flatten().astype(int)) ) 
		
		# Right
		vertices = nparray([ [w+x0,-h+y0,d+z0,1], [w+x0,-h+y0,z0-d,1], [w+x0,h+y0,z0-d,1], 
			[w+x0,h+y0,z0+d,1] ] )
		box.add_shape( Polygon( vertices, color = color[3],normals=nparray([1,0,0,0]),
			anchor=nparray([[0,0,-1,-1], [255,0,-1,-1], [255,255,-1,-1], [0,255,-1,-1]]).flatten().astype(int)) )
		
		# Top
		vertices = nparray([ [-w+x0,h+y0,d+z0,1], [-w+x0,h+y0,z0-d,1], [w+x0,h+y0,z0-d,1],
			[w+x0,h+y0,z0+d,1] ] )
		box.add_shape( Polygon( vertices, color = color[4],normals=nparray([0,1,0,0]),
			anchor=nparray([ [0,0,-1,-1],[0,255,-1,-1], [255,255,-1,-1], [255,0,-1,-1]]).flatten().astype(int)) )
		
		# Bottom
		vertices = nparray([ [-w+x0,-h+y0,d+z0,1],[-w+x0,-h+y0,z0-d,1],[w+x0,-h+y0,z0-d,1],
			[w+x0,-h+y0,z0+d,1] ] )
		box.add_shape( Polygon( vertices, color = color[5],normals=nparray([0,-1,0,0]),
			anchor=nparray([ [0,0,-1,-1],[0,255,-1,-1], [255,255,-1,-1], [255,0,-1,-1]]).flatten().astype(int)) )
		box.id[0] = 'Box'
		return box
예제 #5
0
	def __create_bezier():
		
		curve = Module()
		points = normals = genCurve()
		curve.add_shape(Polygon(points,normals=points))
		return curve