Example #1
0
def __DrawGUI(w,h,RotMatrix): #called directly by the display function after drawing the scene
    global pw,ph,lw,lh,layer
    #the GUI is drawn over the scene by clearing the depth buffer

    #using floats will cause a more accurate edge-blur between panels when the screen is resized
    pw,ph=1./w,1./h
    #using ints won't look as pretty, but you won't need the extra multiplication (TODO: add in options)

    global HitDefs
    HitDefs = {} #clear the hitdefs to avoid improper activation

    __GL.glMatrixMode(__GL.GL_PROJECTION)
    __GL.glLoadIdentity()
    __GL.glOrtho(0.0, 1.0, 1.0, 0.0, -100, 100)
    #__GLU.gluOrtho2D(0.0, 1.0, 1.0, 0.0)

    __GL.glMatrixMode(__GL.GL_MODELVIEW)

    __GL.glClear( __GL.GL_DEPTH_BUFFER_BIT )
    #__GL.glPolygonMode(__GL.GL_FRONT_AND_BACK,__GL.GL_FILL)

    __GL.glLoadIdentity()

    __GL.glBlendFunc(__GL.GL_SRC_ALPHA, __GL.GL_ONE_MINUS_SRC_ALPHA)
    __GL.glEnable(__GL.GL_BLEND)
    __GL.glEnable(__GL.GL_DEPTH_TEST)
    __GL.glDisable(__GL.GL_TEXTURE_2D)
    __GL.glDisable(__GL.GL_LIGHTING)

    #positioning precalculations
    pw211 = pw*211
    pw210 = pw*210
    pw105 = pw*105
    
    ph150 = ph*150
    ph21 = ph*21


    M,A,D,C=False,False,False,False
    if not __OprionsUpdatePanel(w,h):
        M = __ExPanel(0.,ph21,pw210,1.,1,'MODEL')
        if M: __ModelPanel()

        A = __ExPanel(1.-pw210,ph21,1.,1.,3,'ANIM')
        if A: __AnimPanel()

        D = __ExPanel(pw211 if M else 0.,ph21,1.-(pw211 if A else 0.),ph150,2,'DSPL',(0. if M else pw105)+(0. if A else -pw105))
        if D: __DisplayPanel(210 if M else 0,-210 if A else 0)

        C = __ExPanel(pw211 if M else 0.,1.-ph150,1.-(pw211 if A else 0.),1.,0,'CTRL',(0 if M else pw105)+(0 if A else -pw105))
        if C: __ControlPanel(210 if M else 0,-210 if A else 0)


        __GL.glDisable(__GL.GL_BLEND)
        #__GL.glEnable(__GL.GL_DEPTH_TEST)

        #axis
        __GL.glLineWidth(1.0)
        __GL.glPushMatrix()
        __GL.glTranslatef(pw*(228 if M else 17),ph*(h-(167 if C else 17)),0)
        __GL.glScalef(pw*600,ph*600,1)
        __GL.glMultMatrixf(RotMatrix)

        __GL.glColor3f(1.0,0.0,0.0)
        __GL.glBegin(__GL.GL_LINES); __GL.glVertex3f(0.0,0.0,0.0); __GL.glVertex3f(0.02,0.0,0.0); __GL.glEnd() #X
        __GL.glTranslatef(0.0145,0.0,0.0); __GL.glRotatef(90, 0.0, 1.0, 0.0)
        #__GLUT.glutSolidCone(0.003, 0.011, 8, 1)
        __GL.glRotatef(-90, 0.0, 1.0, 0.0); __GL.glTranslatef(-0.0145,0.0,0.0)
        __GL.glColor3f(0.0,1.0,0.0)
        __GL.glBegin(__GL.GL_LINES); __GL.glVertex3f(0.0,0.0,0.0); __GL.glVertex3f(0.0,-0.02,0.0); __GL.glEnd() #Y
        __GL.glTranslatef(0.0,-0.0145,0.0); __GL.glRotatef(90, 1.0, 0.0, 0.0)
        #__GLUT.glutSolidCone(0.003, 0.011, 8, 1)
        __GL.glRotatef(-90, 1.0, 0.0, 0.0); __GL.glTranslatef(0.0,0.0145,0.0)
        __GL.glColor3f(0.0,0.0,1.0)
        __GL.glBegin(__GL.GL_LINES); __GL.glVertex3f(0.0,0.0,0.0); __GL.glVertex3f(0.0,0.0,0.02); __GL.glEnd() #Z
        __GL.glTranslatef(0.0,0.0,0.0145)
        #__GLUT.glutSolidCone(0.003, 0.011, 8, 1)
        __GL.glTranslatef(0.0,0.0,-0.0145)
        __GL.glColor3f(0.5,0.5,0.5) ; #__GLUT.glutSolidSphere(0.003, 8, 4)
        __GL.glPopMatrix()

    for lid in layer: layer[lid].draw()

    global doFrameCheck
    if doFrameCheck: __FrameCheck(); doFrameCheck=False
    __GL.glBlendFunc(__GL.GL_SRC_ALPHA, __GL.GL_ONE_MINUS_SRC_ALPHA) #reset to mormal for anything else
Example #2
0
def __DrawGUI(w, h, RotMatrix):  # called directly by the display function after drawing the scene
    global pw, ph
    # the GUI is drawn over the scene by clearing the depth buffer
    pw, ph = 1.0 / w, 1.0 / h

    global W_HitDefs
    W_HitDefs = {}  # clear the hitdefs to avoid improper activation

    __GL.glMatrixMode(__GL.GL_PROJECTION)
    __GL.glLoadIdentity()
    # glOrtho(-2*P, 2*P, -2, 2, -100, 100)
    __GLU.gluOrtho2D(0.0, 1.0, 1.0, 0.0)

    __GL.glMatrixMode(__GL.GL_MODELVIEW)

    __GL.glClear(__GL.GL_DEPTH_BUFFER_BIT)
    __GL.glPolygonMode(__GL.GL_FRONT_AND_BACK, __GL.GL_FILL)

    __GL.glLoadIdentity()

    __GL.glEnable(__GL.GL_BLEND)
    __GL.glDisable(__GL.GL_DEPTH_TEST)
    __GL.glDisable(__GL.GL_LIGHTING)

    __GL.glBegin(__GL.GL_QUADS)
    __GL.glColor4f(0.4, 0.4, 0.4, 0.8)  # options toggle
    __GL.glVertex2f(pw * 0, ph * 0)
    __GL.glVertex2f(pw * w, ph * 0)
    __GL.glVertex2f(pw * w, ph * 20)
    __GL.glVertex2f(pw * 0, ph * 20)
    __GL.glEnd()
    __GL.glColor4f(0.0, 0.0, 0.0, 0.2)
    __GL.glBegin(__GL.GL_TRIANGLES)
    __GL.glVertex2f(pw * ((w / 2) - 10), ph * 6)
    __GL.glVertex2f(pw * ((w / 2) + 10), ph * 6)
    __GL.glVertex2f(pw * (w / 2), ph * 15)
    __GL.glEnd()

    M = __ExPanel(pw * 0, ph * 21, pw * 210, ph * h, 1, "MODEL")
    if M:
        __BrowseBar(pw * 10, ph * 40, 180)

    A = __ExPanel(pw * (w - 210), ph * 21, pw * w, ph * h, 3, "ANIM")
    D = __ExPanel(
        pw * (211 if M else 1),
        ph * 21,
        pw * (w - (211 if A else 1)),
        ph * 150,
        2,
        "DSPL",
        (0 if M else pw * 105) + (0 if A else pw * -105),
    )
    if D:
        VIEWER.TOGGLE_LIGHTING = __TButton(pw * (221 if M else 11), ph * 31, "EnLight", True, "Lighting")
        VIEWER.TOGGLE_WIREFRAME = __TButton(pw * (221 if M else 11), ph * 56, "EnWire", False, "Wireframe")
        VIEWER.TOGGLE_BONES = __TButton(pw * (221 if M else 11), ph * 81, "EnBone", True, "Bones")

        global ORTHO
        if VIEWER.TOGGLE_ORTHO != ORTHO:
            W_States["EnOrtho"] = VIEWER.TOGGLE_ORTHO
            ORTHO = VIEWER.TOGGLE_ORTHO  # HACK
        ORTHO = __TButton(pw * (321 if M else 111), ph * 31, "EnOrtho", True, "Ortho")
        VIEWER.TOGGLE_ORTHO = ORTHO

        VIEWER.TOGGLE_3D = __TButton(pw * (321 if M else 111), ph * 56, "En3D", False, "3D Analglyph")
        VIEWER.TOGGLE_NORMALS = __TButton(pw * (321 if M else 111), ph * 81, "EnNrm", False, "Normals")

    C = __ExPanel(
        pw * (211 if M else 1),
        ph * (h - 150),
        pw * (w - (211 if A else 1)),
        ph * h,
        0,
        "CTRL",
        (0 if M else pw * 105) + (0 if A else pw * -105),
    )

    __GL.glDisable(__GL.GL_BLEND)
    __GL.glEnable(__GL.GL_DEPTH_TEST)

    # axis
    __GL.glLineWidth(1.0)
    __GL.glPushMatrix()
    __GL.glTranslatef(pw * (228 if M else 17), ph * (h - (167 if C else 17)), 0)
    __GL.glScalef(pw * 600, ph * 600, 1)
    __GL.glMultMatrixf(RotMatrix)

    __GL.glColor3f(1.0, 0.0, 0.0)
    __GL.glBegin(__GL.GL_LINES)
    __GL.glVertex3f(0.0, 0.0, 0.0)
    __GL.glVertex3f(0.02, 0.0, 0.0)
    __GL.glEnd()  # X
    __GL.glTranslatef(0.0145, 0.0, 0.0)
    __GL.glRotatef(90, 0.0, 1.0, 0.0)
    # __GLUT.glutSolidCone(0.003, 0.011, 8, 1)
    __GL.glRotatef(-90, 0.0, 1.0, 0.0)
    __GL.glTranslatef(-0.0145, 0.0, 0.0)
    __GL.glColor3f(0.0, 1.0, 0.0)
    __GL.glBegin(__GL.GL_LINES)
    __GL.glVertex3f(0.0, 0.0, 0.0)
    __GL.glVertex3f(0.0, -0.02, 0.0)
    __GL.glEnd()  # Y
    __GL.glTranslatef(0.0, -0.0145, 0.0)
    __GL.glRotatef(90, 1.0, 0.0, 0.0)
    # __GLUT.glutSolidCone(0.003, 0.011, 8, 1)
    __GL.glRotatef(-90, 1.0, 0.0, 0.0)
    __GL.glTranslatef(0.0, 0.0145, 0.0)
    __GL.glColor3f(0.0, 0.0, 1.0)
    __GL.glBegin(__GL.GL_LINES)
    __GL.glVertex3f(0.0, 0.0, 0.0)
    __GL.glVertex3f(0.0, 0.0, 0.02)
    __GL.glEnd()  # Z
    __GL.glTranslatef(0.0, 0.0, 0.0145)
    # __GLUT.glutSolidCone(0.003, 0.011, 8, 1)
    __GL.glTranslatef(0.0, 0.0, -0.0145)
    __GL.glColor3f(0.5, 0.5, 0.5)
    # __GLUT.glutSolidSphere(0.003, 8, 4)
    __GL.glPopMatrix()
Example #3
0
def __ExPanel(X1,Y1,X2,Y2,EB,Na,MX=0,MY=0,St=True): #returns current state for other panels
    global Widgets,HitDefs,pw,ph
    global AllowHitUpdates
    
    #positioning precalculations
    pw35 = pw*35
    pw30 = pw*30
    pw25 = pw*25
    pw15 = pw*15
    pw10 = pw*10
    pw5 = pw*5
    
    ph35 = ph*35
    ph30 = ph*30
    ph25 = ph*25
    ph15 = ph*15
    ph10 = ph*10
    ph5 = ph*5

    sx=X2-X1
    sy=Y2-Y1
    hsx=sx/2
    hsy=sy/2


    #Widget init info
    if Na not in Widgets.keys():
        Widgets[Na]=__Widget()
        Widgets[Na].info=St #toggle state

    #Widget logic
    if Widgets[Na].event.releaseL: Widgets[Na].info=(False if Widgets[Na].info else True)

    State = Widgets[Na].info


    #60x15px rectangle
    if   EB==0: #top
        EBX1,EBY1,EBX2,EBY2=(X1+hsx-pw30),Y1,(X1+hsx+pw30),Y1+ph15
        TPX1,TPY1 = EBX1+pw25,EBY1+ph5; TPX2,TPY2 = EBX1+pw30,EBY1+ph10; TPX3,TPY3 = EBX1+pw35,EBY1+ph5
    elif EB==1: #right
        EBX1,EBY1,EBX2,EBY2=X2-pw15,hsy-ph30,X2,hsy+ph30
        TPX1,TPY1 = EBX1+pw10,EBY1+ph25; TPX2,TPY2 = EBX1+pw5,EBY1+ph30; TPX3,TPY3 = EBX1+pw10,EBY1+ph35
    elif EB==2: #bottom
        EBX1,EBY1,EBX2,EBY2=(X1+hsx-pw30),Y2-ph15,(X1+hsx+pw30),Y2
        TPX1,TPY1 = EBX1+pw25,EBY1+ph10; TPX2,TPY2 = EBX1+pw30,EBY1+ph5; TPX3,TPY3 = EBX1+pw35,EBY1+ph10
    elif EB==3: #left
        EBX1,EBY1,EBX2,EBY2=X1,hsy-ph30,X1+pw15,hsy+ph30
        TPX1,TPY1 = EBX1+pw5,EBY1+ph25; TPX2,TPY2 = EBX1+pw10,EBY1+ph30; TPX3,TPY3 = EBX1+pw5,EBY1+ph35

    #is the panel expanded?
    if not State:
        if   EB==0: #top
            Eq=sy-ph15; EBY1,EBY2=EBY1+Eq,EBY2+Eq
            TPY1,TPY2,TPY3=TPY1+(Eq+ph5),TPY2+(Eq-ph5),TPY3+(Eq+ph5)
        elif EB==1: #right
            Eq=sx-pw15; EBX1,EBX2=EBX1-Eq,EBX2-Eq
            TPX1,TPX2,TPX3=TPX1-(Eq+pw5),TPX2-(Eq-pw5),TPX3-(Eq+pw5)
        elif EB==2: #bottom
            Eq=sy-ph15; EBY1,EBY2=EBY1-Eq,EBY2-Eq
            TPY1,TPY2,TPY3=TPY1-(Eq+ph5),TPY2-(Eq-ph5),TPY3-(Eq+ph5)
        elif EB==3: #left
            Eq=sx-pw15; EBX1,EBX2=EBX1+Eq,EBX2+Eq
            TPX1,TPX2,TPX3=TPX1+(Eq+pw5),TPX2+(Eq-pw5),TPX3+(Eq+pw5)

        '''
        __GL.glColor4f(0.5,0.5,0.5,0.8)
        __GL.glBegin(__GL.GL_QUADS) #(just the BG color behind the toggle button)
        __GL.glVertex2f(EBX1+MX,EBY1+MY)
        __GL.glVertex2f(EBX1+MX,EBY2+MY)
        __GL.glVertex2f(EBX2+MX,EBY2+MY)
        __GL.glVertex2f(EBX2+MX,EBY1+MY)
        __GL.glEnd()
        '''
    if AllowHitUpdates: HitDefs.update({Na:[EBX1+MX,EBY1+MY,EBX2+MX,EBY2+MY]})

    __GL.glColor4f(0.0,0.0,0.0,0.175)
    __GL.glBegin(__GL.GL_TRIANGLES)
    __GL.glVertex3f(TPX1+MX,TPY1+MY,0.01)
    __GL.glVertex3f(TPX2+MX,TPY2+MY,0.01)
    __GL.glVertex3f(TPX3+MX,TPY3+MY,0.01)
    __GL.glEnd()
    __GL.glBegin(__GL.GL_QUADS)
    __GL.glVertex3f(EBX1+MX,EBY1+MY,0.01)
    __GL.glVertex3f(EBX1+MX,EBY2+MY,0.01)
    __GL.glVertex3f(EBX2+MX,EBY2+MY,0.01)
    __GL.glVertex3f(EBX2+MX,EBY1+MY,0.01)
    __GL.glEnd()

    if State:
        __GL.glBegin(__GL.GL_QUADS)
        __GL.glColor4f(0.5,0.5,0.5,0.8) #model (left) panel
        __GL.glVertex3f(X1,Y1,0.0)
        __GL.glVertex3f(X1,Y2,0.0)
        __GL.glVertex3f(X2,Y2,0.0)
        __GL.glVertex3f(X2,Y1,0.0)
        __GL.glEnd()

    return State
Example #4
0
def __DrawGUI(w,h,RotMatrix): #called directly by the display function after drawing the scene

    global pw,ph
    #the GUI is drawn over the scene by clearing the depth buffer
    pw,ph=1./w,1./h

    global W_HitDefs
    W_HitDefs = {} #clear the hitdefs to avoid improper activation

    __GL.glMatrixMode(__GL.GL_PROJECTION)
    __GL.glLoadIdentity()
    #glOrtho(-2*P, 2*P, -2, 2, -100, 100)
    __GLU.gluOrtho2D(0.0, 1.0, 1.0, 0.0) #TODO update the viewport with the pixel range instead of 1.0 (less GUI calculations will be needed)

    __GL.glMatrixMode(__GL.GL_MODELVIEW)

    __GL.glClear( __GL.GL_DEPTH_BUFFER_BIT )
    __GL.glPolygonMode(__GL.GL_FRONT_AND_BACK,__GL.GL_FILL)

    __GL.glLoadIdentity()

    __GL.glEnable(__GL.GL_BLEND)
    __GL.glDisable(__GL.GL_DEPTH_TEST)
    __GL.glDisable(__GL.GL_TEXTURE_2D)
    __GL.glDisable(__GL.GL_LIGHTING)

    __GL.glBegin(__GL.GL_QUADS)
    __GL.glColor4f(0.4,0.4,0.4,0.8) #options toggle
    __GL.glVertex2f(pw*0,ph*0)
    __GL.glVertex2f(pw*w,ph*0)
    __GL.glVertex2f(pw*w,ph*20)
    __GL.glVertex2f(pw*0,ph*20)
    __GL.glEnd()
    __GL.glColor4f(0.0,0.0,0.0,0.2)
    __GL.glBegin(__GL.GL_TRIANGLES)
    __GL.glVertex2f(pw*((w/2)-10),ph*6)
    __GL.glVertex2f(pw*((w/2)+10),ph*6)
    __GL.glVertex2f(pw*(w/2),ph*15)
    __GL.glEnd()

    M = __ExPanel(pw*0,ph*21,pw*210,ph*h,1,'MODEL')
    if M: __ModelPanel()

    A = __ExPanel(pw*(w-210),ph*21,pw*w,ph*h,3,'ANIM')
    if A: __AnimPanel()

    D = __ExPanel(pw*(211 if M else 1),ph*21,pw*(w-(211 if A else 1)),ph*150,2,'DSPL',(0 if M else pw*105)+(0 if A else pw*-105))
    if D: __DisplayPanel(210 if M else 0,-210 if A else 0)

    C = __ExPanel(pw*(211 if M else 1),ph*(h-150),pw*(w-(211 if A else 1)),ph*h,0,'CTRL',(0 if M else pw*105)+(0 if A else pw*-105))
    if C: __ControlPanel(210 if M else 0,-210 if A else 0)


    #__font(40,40,14,"testing",(128,0,0,100))


    __GL.glDisable(__GL.GL_BLEND)
    __GL.glEnable(__GL.GL_DEPTH_TEST)

    #axis
    __GL.glLineWidth(1.0)
    __GL.glPushMatrix()
    __GL.glTranslatef(pw*(228 if M else 17),ph*(h-(167 if C else 17)),0)
    __GL.glScalef(pw*600,ph*600,1)

    __GL.glMultMatrixf(RotMatrix)

    __GL.glColor3f(1.0,0.0,0.0)
    __GL.glBegin(__GL.GL_LINES); __GL.glVertex3f(0.0,0.0,0.0); __GL.glVertex3f(0.02,0.0,0.0); __GL.glEnd() #X
    __GL.glTranslatef(0.0145,0.0,0.0); __GL.glRotatef(90, 0.0, 1.0, 0.0)
    #__GLUT.glutSolidCone(0.003, 0.011, 8, 1)
    __GL.glRotatef(-90, 0.0, 1.0, 0.0); __GL.glTranslatef(-0.0145,0.0,0.0)

    __GL.glColor3f(0.0,1.0,0.0)
    __GL.glBegin(__GL.GL_LINES); __GL.glVertex3f(0.0,0.0,0.0); __GL.glVertex3f(0.0,-0.02,0.0); __GL.glEnd() #Y
    __GL.glTranslatef(0.0,-0.0145,0.0); __GL.glRotatef(90, 1.0, 0.0, 0.0)
    #__GLUT.glutSolidCone(0.003, 0.011, 8, 1)
    __GL.glRotatef(-90, 1.0, 0.0, 0.0); __GL.glTranslatef(0.0,0.0145,0.0)

    __GL.glColor3f(0.0,0.0,1.0)
    __GL.glBegin(__GL.GL_LINES); __GL.glVertex3f(0.0,0.0,0.0); __GL.glVertex3f(0.0,0.0,0.02); __GL.glEnd() #Z
    __GL.glTranslatef(0.0,0.0,0.0145)
    #__GLUT.glutSolidCone(0.003, 0.011, 8, 1)
    __GL.glTranslatef(0.0,0.0,-0.0145)

    __GL.glColor3f(0.5,0.5,0.5) ; #__GLUT.glutSolidSphere(0.003, 8, 4)
    __GL.glPopMatrix()