def __init__(self):
     """Constructor"""
     self.forklift = Forklift()
     self.surround = Surround()
     self.init_stacks()
Example #2
0
	def __init__(self):
		"""Constructor"""
		self.forklift = Forklift()
		self.surround = Surround()
		
		self.init_stacks()
class Scene(object):
    """Adegan untuk ditampilkan lewat OpenGL."""
    def __init__(self):
        """Constructor"""
        self.forklift = Forklift()
        self.surround = Surround()
        self.init_stacks()

    def init_stacks(self):
        """Atur kondisi awal tumpukan peti."""
        objects = [
            (lambda: glutSolidSphere(0.4, 20, 10), True),
            (lambda: glutSolidTorus(0.15, 0.3, 20, 20), True),
            (self.dodecahedron, True),
            (self.octahedron, True),
            (self.tetrahedron, True),
            (self.icosahedron, True),
            (self.mini_forklift, False),
            (self.mini_robot, False),
        ]

        self.stack1 = CrateStack(5, 4, 90)
        self.stack2 = CrateStack(5, 4, 90)
        self.stack3 = CrateStack(5, 4, -90)
        self.stack4 = CrateStack(5, 4, -90)

        for i in range(4):
            for j in range(4):
                (obj, canRot) = objects[randint(0, len(objects) - 1)]
                self.stack1.insert(Crate(obj, canRot), i, j)
                (obj, canRot) = objects[randint(0, len(objects) - 1)]
                self.stack2.insert(Crate(obj, canRot), i, j)

    def glInit(self):
        """View diharapkan untuk memanggil ini selama inisialisasi pipa OpenGL. 
		Ini mengatur setiap saluran pipa hanya menyatakan 
		bahwa model ingin menggunakan"""

        glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
        glEnable(GL_COLOR_MATERIAL)

        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

        self.surround.glInit()

    def glDisplay(self):
        """Mengeluarkan seluruh adegan ke pipa/saluran OpenGL."""

        glLightfv(GL_LIGHT0, GL_POSITION, (-20, 10, -19, 0))

        self.surround.glDisplay()

        glPushMatrix()
        glTranslatef(6, 0, 0)
        self.stack1.display()
        glPopMatrix()

        glPushMatrix()
        glTranslatef(5, 0, 0)
        self.stack2.display()
        glPopMatrix()

        glPushMatrix()
        glTranslatef(-5, 0, 0)
        self.stack3.display()
        glPopMatrix()

        glPushMatrix()
        glTranslatef(-6, 0, 0)
        self.stack4.display()
        glPopMatrix()

        self.forklift.display()

    def mini_forklift(self):
        """
			Draw a miniature forklift (sized to fit in a crate).
			Menggambarkan forklift miniatur (ukurannya pas dengan peti)
		"""
        glPushMatrix()
        glTranslatef(0, -0.45, 0)
        glScalef(0.25, 0.25, 0.25)
        glRotate(90, 0, 1, 0)
        glTranslatef(0, 0, -0.6)
        Forklift().display()
        glPopMatrix()

    def mini_robot(self):
        glPushMatrix()
        glTranslate(0, 0, -0.1)
        glScalef(0.3, 0.3, 0.3)
        Robot().display()
        glPopMatrix()

    def dodecahedron(self):
        """
			Draw a dodecahedron (sized to fit in a crate).
			Menggambarkan dodecahedron (ukurannya pas di peti)
		"""
        glPushMatrix()
        glScalef(0.25, 0.25, 0.25)
        glutSolidDodecahedron()
        glPopMatrix()

    def octahedron(self):
        """
			Draw an octahedron (sized to fit in a crate).
			Menggambarkan octahedron (ukurannya pas di peti)
		"""
        glPushMatrix()
        glScalef(0.4, 0.4, 0.4)
        glutSolidOctahedron()
        glPopMatrix()

    def tetrahedron(self):
        """
			Draw a tetrahedron (sized to fit in a crate).
			Menggambar tetrahedron (ukurannya pas dengan peti).	
		"""
        glPushMatrix()
        glScalef(0.4, 0.4, 0.4)
        glutSolidTetrahedron()
        glPopMatrix()

    def icosahedron(self):
        """
			Draw an icosahedron (sized to fit in a crate).
			Menggambarkan icosahedron (ukurannya pas di peti)
		"""
        glPushMatrix()
        glScalef(0.4, 0.4, 0.4)
        glutSolidIcosahedron()
        glPopMatrix()
Example #4
0
class Scene(object):
	"""A scene for display via OpenGL."""

	def __init__(self):
		"""Constructor"""
		self.forklift = Forklift()
		self.surround = Surround()
		
		self.init_stacks()

	def init_stacks(self):
		"""Setup the initial state of the crate stacks."""
		objects = [
			(lambda: glutSolidSphere(0.4,20,10), True),
			(lambda: glutSolidTorus(0.15,0.3,20,20), True),
			(self.dodecahedron, True),
			(self.octahedron, True),
			(self.tetrahedron, True),
			(self.icosahedron, True),
			(self.mini_forklift, False),
			(self.mini_robot, False),
		]
		
		self.stack1 = CrateStack(5,4, 90)
		self.stack2 = CrateStack(5,4, 90)
		self.stack3 = CrateStack(5,4, -90)
		self.stack4 = CrateStack(5,4, -90)
		
		for i in range(4):
			for j in range(4):
				(obj,canRot) = objects[randint(0, len(objects)-1)]
				self.stack1.insert(Crate(obj, canRot),i,j)
				(obj,canRot) = objects[randint(0, len(objects)-1)]
				self.stack2.insert(Crate(obj, canRot),i,j)
		

	def glInit(self):
		"""The View is expected to call this during OpenGL pipeline
		   initialisation. It sets up any once-only pipeline states that the
		   model wishes to use"""

		glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
		glEnable(GL_COLOR_MATERIAL)
		
		glEnable(GL_BLEND)
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
		
		self.surround.glInit()


	def glDisplay(self):
		"""Output the entire scene to the OpenGL pipeline."""
		
		glLightfv(GL_LIGHT0, GL_POSITION, (-20,10,-19,0))
		
		self.surround.glDisplay()
		
		glPushMatrix()
		glTranslatef(6,0,0)
		self.stack1.display()
		glPopMatrix()
		
		glPushMatrix()
		glTranslatef(5,0,0)
		self.stack2.display()
		glPopMatrix()
		
		glPushMatrix()
		glTranslatef(-5,0,0)
		self.stack3.display()
		glPopMatrix()
		
		glPushMatrix()
		glTranslatef(-6,0,0)
		self.stack4.display()
		glPopMatrix()
		
		self.forklift.display()

	def mini_forklift(self):
		"""Draw a miniature forklift (sized to fit in a crate)."""
		glPushMatrix()
		glTranslatef(0,-0.45,0)
		glScalef(0.25,0.25,0.25)
		glRotate(90, 0,1,0)
		glTranslatef(0,0,-0.6)
		Forklift().display()
		glPopMatrix()

	def mini_robot(self):
		glPushMatrix()
		glTranslate(0,0,-0.1)
		glScalef(0.3,0.3,0.3)
		Robot().display()
		glPopMatrix()

	def dodecahedron(self):
		"""Draw a dodecahedron (sized to fit in a crate)."""
		glPushMatrix()
		glScalef(0.25,0.25,0.25)
		glutSolidDodecahedron()
		glPopMatrix()

	def octahedron(self):
		"""Draw an octahedron (sized to fit in a crate)."""
		glPushMatrix()
		glScalef(0.4,0.4,0.4)
		glutSolidOctahedron()
		glPopMatrix()

	def tetrahedron(self):
		"""Draw a tetrahedron (sized to fit in a crate)."""
		glPushMatrix()
		glScalef(0.4,0.4,0.4)
		glutSolidTetrahedron()
		glPopMatrix()

	def icosahedron(self):
		"""Draw an icosahedron (sized to fit in a crate)."""
		glPushMatrix()
		glScalef(0.4,0.4,0.4)
		glutSolidIcosahedron()
		glPopMatrix()