Пример #1
0
 def __init__(self, parent = None):
     super().__init__(parent)
     self.box = CParallelepiped(QtGui.QVector3D(40,40,40))
     self.box.include(QtGui.QVector3D(40,40,40))
     self.box.include(-QtGui.QVector3D(40,40,40))
     self.setMinimumWidth(200)
     self.t = 0.0
Пример #2
0
class Display(CGLWidget):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.box = CParallelepiped(QtGui.QVector3D(40,40,40))
        self.box.include(QtGui.QVector3D(40,40,40))
        self.box.include(-QtGui.QVector3D(40,40,40))
        self.setMinimumWidth(200)
        self.t = 0.0

    def setData(self, data, enable_opengl_transformation):
        self.data = data
        self.gl_t = enable_opengl_transformation
        self.repaint()

    def initializeGL(self):
        super().initializeGL()
        glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE)
        glEnable(GL_NORMALIZE)
        glEnable (GL_COLOR_MATERIAL)
        glEnable(GL_LIGHT0)
        glEnable(GL_LIGHTING)
        light1_diffuse = (GLfloat * 4)(14/255, 88/255, 228/255)
        light1_position = (GLfloat * 4)(0.0, 0.0, 1.0, 1.0)
        glLightfv(GL_LIGHT0, GL_DIFFUSE, light1_diffuse)
        glLightfv(GL_LIGHT0, GL_POSITION, light1_position)

    def set_t(self, val):
        self.t = val
        self.repaint()

    def paintGL(self):
        super().paintGL()


        material_diffuse = (GLfloat * 4)(1.0, 0.5, 1.0, 1.0)
        glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material_diffuse)

        def rrange(a,b,s):
            while(a <= b):
                yield a
                a += s

        glColor3ub(0xFF,0x00,0x00)
        if self.gl_t:
            for t in rrange(0,1,0.005):
                for i in self.data:
                    glPushMatrix()
                    i.apply_transformation(t)
                    glTranslatef(0.0,0.0,10.0)
                glBegin(GL_POINTS)
                glVertex3f(0.0,0.0,0.0)
                glEnd()
                for i in self.data:
                    glPopMatrix()
        else:
            glBegin(GL_LINE_STRIP)
            for t in rrange(0,1,0.005):
                m = QtGui.QMatrix4x4()
                for i in self.data:
                    m *= i.get_transform_matrix(t)
                    m.translate(0.0,0.0,10.0)
                v = m * QtGui.QVector3D(0,0,0)
                glVertex3f(v.x(),v.y(),v.z())
            glEnd()

        glColor3ub(0xFF,0x80,0x80)

        for i in self.data:
            glPushMatrix()
            i.apply_transformation(self.t)
            i.draw()
            glTranslatef(0.0,0.0,i.p2.z())
        for i in self.data:
            glPopMatrix()