def gui(self): # the function to draw the screen BGL.glClearColor(0, 0, 0.5, 1) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) BGL.glColor3f(1, 1, 1) BGL.glRasterPos2i(20, 200) Draw.Text("Select the object to export:", "normal") self.objMenu = Draw.Menu(self.sObjSelection, 1, 20, 170, 200, 20, self.objSel, "Select the animated object.") BGL.glRasterPos2i(20, 150) Draw.Text("Select the armature to export:", "normal") self.armMenu = Draw.Menu(self.sArmSelection, 2, 20, 120, 200, 20, self.armSel, "Select the matching armature.") BGL.glRasterPos2i(20, 100) Draw.Text("Select the root bone of the armature:", "normal") self.boneMenu = Draw.Menu(self.sBoneSelection, 3, 20, 70, 200, 20, self.boneSel, "Select the Root Bone of the armature.") Draw.PushButton("Export", 4, 250, 150, 50, 20, "Export File") Draw.PushButton("Cancel", 5, 250, 110, 50, 20, "Cancel") BGL.glRasterPos2i(72, 16) string = "Selections: " + ("%s" % self.objSel) + " / " + ( "%s" % self.armSel) + " / " + ("%s" % self.boneSel) Draw.Text(string, "small")
def drawmanipulator(manipulators, indices, eventbase, boneno, x, y): # See Blender Python Docs # http://www.blender.org/documentation/248PythonDoc/Draw-module.html manipulator = manipulators[boneno] cursor = cursors[boneno] valid = True Draw.Menu('|'.join(manipulatorList), DONTCARE + eventbase, x + 4, y, CONTROLSIZE, CONTROLSIZE, -1, 'Pick the manipulator from a list', manipulatormenucallback) Draw.String('', DATAREF_B + eventbase, x + 4 + CONTROLSIZE, y, PANELWIDTH - 2 * PANELINDENT - CONTROLSIZE, CONTROLSIZE, manipulator, 100, 'Full name of the manipulator used to control this animation') y -= 30 event_id = 1000 sub_dict = sorted(manipulator_dict[manipulator].keys()) for field_id in sub_dict: field_name = field_id.split('@')[1] field_val = manipulator_dict[manipulator][field_id] if field_name == 'cursor': Draw.Label("Cursor Type:", x, y, 100, CONTROLSIZE) Draw.Menu('|'.join(cursorList), DONTCARE + eventbase, x + 4, y, CONTROLSIZE, CONTROLSIZE, -1, 'Pick the cursor type from a list', cursormenucallback) Draw.String( '', DATAREF_B + eventbase, x + 4 + CONTROLSIZE, y, PANELWIDTH - 2 * PANELINDENT - CONTROLSIZE, CONTROLSIZE, cursor, 100, 'Full name of the manipulator used to control this animation') y -= 30 event_id += 1 elif field_name != 'NULL': Draw.Label(field_name + ':', x, y, 120, CONTROLSIZE) if type(field_val).__name__ == 'str': Draw.String('', event_id, x + 100, y, 180, CONTROLSIZE, field_val, 100, '', manipulatordatacallback) if type(field_val).__name__ == 'float': Draw.Number('', event_id, x + 100, y, 80, CONTROLSIZE, field_val, -50000.0, 50000.0, '', manipulatordatacallback) if type(field_val).__name__ == 'int': Draw.Number('', event_id, x + 100, y, 80, CONTROLSIZE, int(field_val), -50000, 50000, '', manipulatordatacallback) y -= 20 event_id += 1 return valid
def drawAA(): global MINAA, MAXAA, AASAMPLES global IMGFILTERW, IMGFILTERH, IMGFILTER global EXP_ANIM ## aa settings col = 10 line = 200 BGL.glRasterPos2i(col, line) Draw.Text("AA:") col = 100 MINAA = Draw.Number("Min AA ", 2, col, line, 120, 18, MINAA.val, -4, 5) col = 230 MAXAA = Draw.Number("Max AA ", 2, col, line, 120, 18, MAXAA.val, -4, 5) col = 360 AASAMPLES = Draw.Number("Samples", 2, col, line, 120, 18, AASAMPLES.val, 0, 32) col = 10 line = 175 BGL.glRasterPos2i(col, line) Draw.Text("Image Filter:") col = 100 line = 173 IMGFILTER = Draw.Menu( "%tImage Filter|box|gaussian|mitchell|triangle|catmull-rom|blackman-harris|sinc|lanczos", FILTER_EVENT, col, line, 120, 18, IMGFILTER.val) col = 10 line = 120 EXP_ANIM = Draw.Toggle("Export As Animation", 2, col, line, 140, 18, EXP_ANIM.val) drawButtons()
def drawdataref(datarefs, indices, eventbase, boneno, x, y): dataref = datarefs[boneno] valid = True mbutton = Draw.Menu('sim/%t|' + '/...|'.join(firstlevel) + '/...', DONTCARE + eventbase, x + 4, y, CONTROLSIZE, CONTROLSIZE, -1, 'Pick the dataref from a list', datarefmenucallback) bbutton = Draw.String( '', DATAREF_B + eventbase, x + 4 + CONTROLSIZE, y, PANELWIDTH - 2 * PANELINDENT - CONTROLSIZE, CONTROLSIZE, dataref, 100, 'Full name of the dataref used to animate this object') ibutton = None tbutton = None ref = dataref.split('/') if len(ref) <= 1 or ref[0] == 'sim': if len(ref) == 1 and ref[0] in lookup and not lookup[ref[0]]: BGL.glRasterPos2d(x + 4, y - 21) Draw.Text('This dataref name is ambiguous') valid = False else: try: thing = hierarchy for i in range(len(ref)): thing = thing[ref[i]] n = thing + 0 # check is a leaf - ie numeric if not n: BGL.glRasterPos2d(x + 4, y - 21) Draw.Text("This dataref can't be used for animation") valid = False elif n == 1: indices[boneno] = None else: if indices[boneno] == None or indices[boneno] >= n: indices[boneno] = 0 Draw.Label("Part number:", x, y - 26, 120, CONTROLSIZE) ibutton = Draw.Number('', INDICES_B + eventbase, x + 108, y - 26, 50, CONTROLSIZE, indices[boneno], 0, n - 1, 'The part number / array index') except: BGL.glRasterPos2d(x + 4, y - 21) Draw.Text("This is not a valid dataref") valid = False else: if indices[boneno] != None: val = 1 else: val = 0 tbutton = Draw.Toggle('Part number', INDICES_T + eventbase, x + 4, y - 26, 104, CONTROLSIZE, val, 'Whether this is an array dataref') if val: ibutton = Draw.Number('', INDICES_B + eventbase, x + 108, y - 26, 50, CONTROLSIZE, indices[boneno], 0, 729, 'The part number / array index') return (valid, mbutton, bbutton, ibutton, tbutton)
def draw(): global as_package_name global fileButton, expFileName global engine_menu, engine_name global EVENT_NOEVENT, EVENT_DRAW, EVENT_EXIT, EVENT_EXPORT global export_all expFileName = "" ########## Titles glClear(GL_COLOR_BUFFER_BIT) glRasterPos2i(40, 240) logoImage = Image.Load(Get('scriptsdir') + sys.sep + 'AS3Export.png') Draw.Image(logoImage, 40, 155) as_package_name = Draw.String("Package name: ", EVENT_NOEVENT, 40, 130, 250, 20, as_package_name.val, 300) engine_name = "Away3D%x1|Away3D 2.1.0%x5|Away3D 2.2.0%x6|Papervision3D%x2|Papervision3D 2.0%x3|Sandy 3.0%x4" engine_menu = Draw.Menu(engine_name, EVENT_NOEVENT, 40, 100, 200, 20, engine_menu.val, "Choose your engine") fileButton = Draw.String('File location: ', EVENT_NOEVENT, 40, 70, 250, 20, fileButton.val, 255) Draw.PushButton('...', EVENT_BROWSEFILE, 300, 70, 30, 20, 'browse file') export_all = Draw.Toggle('Export ALL scene objects', EVENT_NOEVENT, 40, 45, 200, 20, 0) ######### Draw and Exit Buttons Draw.Button("Export", EVENT_EXPORT, 40, 20, 80, 18) Draw.Button("Exit", EVENT_EXIT, 140, 20, 80, 18)
def Display_Mesh_Bar(Y_POS, CONTROL_HEIGHT, CONTROL_WIDTH): """ Create the mesh setup box. """ Create_Tab(3, Y_POS, CONTROL_WIDTH, Y_POS - CONTROL_HEIGHT, "Mesh setup", 0) menuItems = "Mesh %t|Male %x1|Female %x2" global MESH_menu MESH_menu = Draw.Menu(menuItems, MESHMENU, 9, (Y_POS - 41), 130, 18, MESH_menu.val, 'Select mesh (.obj)') global OUTERJOINTS_toggle OUTERJOINTS_toggle = Draw.Toggle('Ignore outer joints', OUTERJOINTSBUTTON, ((CONTROL_WIDTH / 2) + 3), (Y_POS - 41), (CONTROL_WIDTH / 2) - 9, 18, OUTERJOINTS_toggle.val, 'Ignores the outer joints of the animation (fingers and toes)')
def draw_gui(): global host,port,Shapepreset,Geompreset,mesh,molname,stringName mols=self.Mols.full_name().split(',') tmp="Mols %t|" for i in range(len(mols)) : tmp+=mols[i]+'%x'+str(i)+'|' name = tmp[:-1] #print name #Draw.Toggle("Armature", EV_TG_ARMATURE, 5, line[1], 60, 25,ARMATURE, "Armature") BGL.glRasterPos2i(5,line[8]) Draw.Text("Options:") Draw.Toggle("Join geometry", EV_TG_JOIN, 5, line[7], 60, 25,JOIN, "Join") Draw.PushButton("Delete Mol", EV_TG_DEL, 5, line[6], 90, 25, "DeleteMol") Shapepreset=Draw.Menu(name,EV_ME_MOL, 100, line[6], 90, 25, Shapepreset.val,'ON') Draw.PushButton("Add Armature", EV_TG_ARMATURE, 5, line[5], 90, 25, "Armature") Shapepreset=Draw.Menu(name,EV_ME_MOL, 100, line[5], 90, 25, Shapepreset.val,'ON') #gname = "Geoms %t|none %x1|MSMS-MOL %x2 |cpk %x3|sticks %x4|secstruc %x5|coarseSurf %x6" #Geompreset=Draw.Menu(gname,EV_ME_GEO, 195, line[5], 90, 25, Geompreset.val,'ON') stringName = Draw.String("sel:", EV_ST_PDBNAME, 220, line[5], 235, 25,stringName.val, 100,"selection level") BGL.glRasterPos2i(5,line[4]) Draw.Text("Send Mesh to Server:") mesh = Draw.String("Mesh: ", EV_TX_SEND1, 5, line[3], 90, 25,mesh.val, 32, "Mesh") #molname= Draw.String("Mol: ", EV_TX_SEND2, 100, line[3], 90, 25,molname.val, 32, "Mol") Shapepreset=Draw.Menu(name,EV_ME_MOL, 100, line[3], 90, 25, Shapepreset.val,'ON') Draw.PushButton("SendToServer", EV_BT_SEND, 195, line[3], 90, 25, "SendGeom") BGL.glRasterPos2i(5,line[2]) Draw.Text("Server:") host = Draw.String("Host: ", EV_BT_HOST1, 5, line[1], 90, 25,host.val, 32, "Name") port = Draw.String("Port: ", EV_BT_HOST2, 100, line[1], 90, 25,port.val, 32, "Portid") Draw.PushButton("StartCom", EV_BT_OK, 5, line[0], 90, 25, "StartThread") Draw.PushButton("StopCom", EV_BT_CANCEL, 100, line[0], 90, 25, "StopThread") Draw.PushButton("Refresh", EV_BT_REFRESH, 195, line[0], 90, 25, "Refresh")
def gui(): global dataref_m, dataref_b, indices_b, indices_t, vals_b, clear_b, loops_b global hideshow_m, from_b, to_b, up_b, down_b, delete_b, addhs_b global cancel_b, apply_b global manipulator_m, manipulator_b, cursor_m, cursor_b dataref_m = [] dataref_b = [] indices_b = [] indices_t = [] vals_b = [] clear_b = None loops_b = [] hideshow_m = [] from_b = [] to_b = [] up_b = [] down_b = [] delete_b = [] addhs_b = None cancel_b = None apply_b = None # Default theme text = [0, 0, 0, 255] text_hi = [255, 255, 255, 255] header = [165, 165, 165, 255] panel = [255, 255, 255, 40] back = [180, 180, 180, 255] error = [255, 80, 80, 255] # where's the theme value for this? # Actual theme if Blender.Get('version') >= 235: theme = Blender.Window.Theme.Get() if theme: theme = theme[0] space = theme.get('buts') text = theme.get('ui').text text_hi = space.text_hi header = space.header header = [ max(header[0] - 30, 0), # 30 appears to be hard coded max(header[1] - 30, 0), max(header[2] - 30, 0), header[3] ] panel = space.panel back = space.back size = BGL.Buffer(BGL.GL_FLOAT, 4) BGL.glGetFloatv(BGL.GL_SCISSOR_BOX, size) size = size.list x = int(size[2]) y = int(size[3]) BGL.glEnable(BGL.GL_BLEND) BGL.glBlendFunc(BGL.GL_SRC_ALPHA, BGL.GL_ONE_MINUS_SRC_ALPHA) BGL.glClearColor( float(back[0]) / 255, float(back[1]) / 255, float(back[2]) / 255, 1) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) yoff = y - offset[1] if vertical: xoff = PANELPAD + PANELINDENT - offset[0] for boneno in range(bonecount): eventbase = boneno * EVENTMAX framecount = len(vals[boneno]) if not vertical: xoff = PANELPAD + boneno * (PANELWIDTH + PANELPAD) + PANELINDENT - offset[0] BGL.glColor4ub(*header) BGL.glRectd(xoff - PANELINDENT, yoff - PANELTOP, xoff - PANELINDENT + PANELWIDTH, yoff - PANELTOP - PANELHEAD) BGL.glColor4ub(*panel) BGL.glRectd(xoff - PANELINDENT, yoff - PANELTOP - PANELHEAD, xoff - PANELINDENT + PANELWIDTH, yoff - 170 - (CONTROLSIZE - 1) * framecount) txt = 'parent bone' if boneno: txt = 'grand' + txt txt = 'great-' * (boneno - 1) + txt txt = txt[0].upper() + txt[1:] BGL.glColor4ub(*text_hi) BGL.glRasterPos2d(xoff, yoff - 23) Draw.Text(txt) Draw.Label("Dataref:", xoff - 4, yoff - 54, 100, CONTROLSIZE) BGL.glColor4ub(*error) # For errors (valid, mbutton, bbutton, ibutton, tbutton) = drawdataref(datarefs, indices, eventbase, boneno, xoff - 4, yoff - 80) dataref_m.append(mbutton) dataref_b.append(bbutton) indices_b.append(ibutton) indices_t.append(tbutton) vals_b.append([]) if valid: # is a valid or custom dataref Draw.Label("Dataref values:", xoff - 4, yoff - 132, 150, CONTROLSIZE) for i in range(framecount): Draw.Label("Frame #%d:" % (i + 1), xoff - 4 + CONTROLSIZE, yoff - 152 - (CONTROLSIZE - 1) * i, 100, CONTROLSIZE) if i > 1: v9 = 'v9: ' else: v9 = '' vals_b[-1].append( Draw.Number( '', i + VALS_B + eventbase, xoff + 104, yoff - 152 - (CONTROLSIZE - 1) * i, 80, CONTROLSIZE, vals[boneno][i], -NUMBERMAX, NUMBERMAX, v9 + 'The dataref value that corresponds to the pose in frame %d' % (i + 1))) if framecount > 2: clear_b = Draw.Button( 'Delete', DELETE_B + eventbase, xoff + 208, yoff - 152 - (CONTROLSIZE - 1) * (framecount - 1), 80, CONTROLSIZE, 'Clear animation keys from this frame') Draw.Label("Loop:", xoff - 4 + CONTROLSIZE, yoff - 160 - (CONTROLSIZE - 1) * framecount, 100, CONTROLSIZE) loops_b.append( Draw.Number( '', LOOPS_B + eventbase, xoff + 104, yoff - 160 - (CONTROLSIZE - 1) * framecount, 80, CONTROLSIZE, loops[boneno], -NUMBERMAX, NUMBERMAX, 'v9: The animation will loop back to frame 1 when the dataref value exceeds this number. Enter 0 for no loop.' )) else: loops_b.append(None) if vertical: yoff -= (170 + (CONTROLSIZE - 1) * framecount) #Draw Manipulator GUI #This is broken #if valid: # Draw.Label("Manipulator:", xoff-4, yoff-220-(CONTROLSIZE-1)*i, 100, CONTROLSIZE) # drawmanipulator(manipulators, indices, eventbase, boneno, xoff-4, yoff-250-(CONTROLSIZE-1)*i) if not vertical: xoff = PANELPAD + bonecount * (PANELWIDTH + PANELPAD) + PANELINDENT - offset[0] BGL.glColor4ub(*header) BGL.glRectd(xoff - PANELINDENT, yoff - PANELTOP, xoff - PANELINDENT + PANELWIDTH, yoff - PANELTOP - PANELHEAD) BGL.glColor4ub(*panel) BGL.glRectd(xoff - PANELINDENT, yoff - PANELTOP - PANELHEAD, xoff - PANELINDENT + PANELWIDTH, yoff - 64 - len(hideshow) * 82) BGL.glColor4ub(*text_hi) BGL.glRasterPos2d(xoff, yoff - 23) Draw.Text("Hide/Show for all children of %s" % armature.name) for hs in range(len(hideshow)): eventbase = (bonecount + hs) * EVENTMAX BGL.glColor4ub(*panel) BGL.glRectd(xoff - 4, yoff - PANELTOP - PANELHEAD - 4 - hs * 82, xoff - 13 + PANELWIDTH, yoff - PANELTOP - 101 - hs * 82) BGL.glColor4ub(*error) # For errors (valid, mbutton, bbutton, ibutton, tbutton) = drawdataref(hideshow, hideshowindices, eventbase, hs, xoff - 4, yoff - 54 - hs * 82) dataref_m.append(mbutton) dataref_b.append(bbutton) indices_b.append(ibutton) indices_t.append(tbutton) if hs: up_b.append( Draw.Button('^', UP_B + eventbase, xoff + 217, yoff - 80 - hs * 82, CONTROLSIZE, CONTROLSIZE, 'Move this entry up')) else: up_b.append(None) if hs != len(hideshow) - 1: down_b.append( Draw.Button('v', DOWN_B + eventbase, xoff + 237, yoff - 80 - hs * 82, CONTROLSIZE, CONTROLSIZE, 'Move this entry down')) else: down_b.append(None) delete_b.append( Draw.Button('X', DELETE_B + eventbase, xoff + 267, yoff - 80 - hs * 82, CONTROLSIZE, CONTROLSIZE, 'Delete this entry')) if valid: # is a valid or custom dataref hideshow_m.append( Draw.Menu('Hide%x0|Show%x1', HIDEORSHOW_M + eventbase, xoff, yoff - 106 - hs * 82, 62, CONTROLSIZE, hideorshow[hs], 'Choose Hide or Show')) Draw.Label("when", xoff + 63, yoff - 106 - hs * 82, 60, CONTROLSIZE) from_b.append( Draw.Number( '', FROM_B + eventbase, xoff + 104, yoff - 106 - hs * 82, 80, CONTROLSIZE, hideshowfrom[hs], -NUMBERMAX, NUMBERMAX, 'The dataref value above which the animation will be hidden or shown' )) Draw.Label("to", xoff + 187, yoff - 106 - hs * 82, 60, CONTROLSIZE) to_b.append( Draw.Number( '', TO_B + eventbase, xoff + 207, yoff - 106 - hs * 82, 80, CONTROLSIZE, hideshowto[hs], -NUMBERMAX, NUMBERMAX, 'The dataref value below which the animation will be hidden or shown' )) else: hideshow_m.append(None) from_b.append(None) to_b.append(None) addhs_b = Draw.Button('Add New', ADD_B + bonecount * EVENTMAX, xoff + 217, yoff - 54 - len(hideshow) * 82, 70, CONTROLSIZE, 'Add a new Hide or Show entry') if vertical: xoff = PANELPAD - offset[0] yoff -= (64 + len(hideshow) * 82) else: xoff = PANELPAD + (bonecount + 1) * (PANELWIDTH + PANELPAD) - offset[0] apply_b = Draw.Button('Apply', APPLY_B + bonecount * EVENTMAX, xoff, yoff - PANELTOP - CONTROLSIZE * 2, 80, CONTROLSIZE * 2, 'Apply these settings', doapply) if vertical: cancel_b = Draw.Button('Cancel', CANCEL_B + bonecount * EVENTMAX, xoff + 80 + PANELPAD, yoff - PANELTOP - CONTROLSIZE * 2, 80, CONTROLSIZE * 2, 'Retain existing settings') else: cancel_b = Draw.Button('Cancel', CANCEL_B + bonecount * EVENTMAX, xoff, yoff - PANELTOP - CONTROLSIZE * 4 - PANELPAD, 80, CONTROLSIZE * 2, 'Retain existing settings')
def render(self): Draw.Menu(self.label, self.event, self.x, self.y, self.width, self.height, self.value, self.tooltip, self.update_value)
def gui(): # drawing the screen global SCREEN, START_SCREEN, SCRIPT_SCREEN global SCRIPT_INFO, AllGroups, GROUP_MENUS global BEVT_EMAIL, BEVT_LINK global BEVT_VIEWSOURCE, BEVT_EXIT, BEVT_BACK, BEVT_GMENU, BUT_GMENU, BEVT_EXEC global PADDING, WIN_W, WIN_H, SCROLL_DOWN, COLUMNS, FMODE theme = Theme.Get()[0] tui = theme.get('ui') ttxt = theme.get('text') COL_BG = float_colors(ttxt.back) COL_TXT = ttxt.text COL_TXTHI = ttxt.text_hi BGL.glClearColor(COL_BG[0], COL_BG[1], COL_BG[2], COL_BG[3]) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) BGL.glColor3ub(COL_TXT[0], COL_TXT[1], COL_TXT[2]) resize = screen_was_resized() if resize: fit_on_screen() if SCREEN == START_SCREEN: x = PADDING bw = 85 bh = 25 hincr = 50 butcolumns = (WIN_W - 2 * x) / bw if butcolumns < 2: butcolumns = 2 elif butcolumns > 7: butcolumns = 7 len_gm = len(GROUP_MENUS) butlines = len_gm / butcolumns if len_gm % butcolumns: butlines += 1 h = hincr * butlines + 20 y = h + bh BGL.glColor3ub(COL_TXTHI[0], COL_TXTHI[1], COL_TXTHI[2]) BGL.glRasterPos2i(x, y) Draw.Text('Scripts Help Browser') y -= bh BGL.glColor3ub(COL_TXT[0], COL_TXT[1], COL_TXT[2]) i = 0 j = 0 for group_menu in GROUP_MENUS: BGL.glRasterPos2i(x, y) Draw.Text(group_menu[0] + ':') BUT_GMENU[j] = Draw.Menu( group_menu[1], BEVT_GMENU[j], x, y - bh - 5, bw, bh, 0, 'Choose a script to read its help information') if i == butcolumns - 1: x = PADDING i = 0 y -= hincr else: i += 1 x += bw + 3 j += 1 x = PADDING y = 10 BGL.glRasterPos2i(x, y) Draw.Text('Select script for its help. Press Q or ESC to leave.') elif SCREEN == SCRIPT_SCREEN: if SCRIPT_INFO: if resize: SCRIPT_INFO.wrap_lines(1) SCROLL_DOWN = 0 h = 18 * SCRIPT_INFO.len_content + 12 * SCRIPT_INFO.spaces x = PADDING y = WIN_H bw = 38 bh = 16 BGL.glColor3ub(COL_TXTHI[0], COL_TXTHI[1], COL_TXTHI[2]) for line in SCRIPT_INFO.header: y -= 18 BGL.glRasterPos2i(x, y) size = Draw.Text(line) for line in text_wrap('Tooltip: %s' % SCRIPT_INFO.script.tip): y -= 18 BGL.glRasterPos2i(x, y) size = Draw.Text(line) i = 0 y -= 28 for data in SCRIPT_INFO.d['__url__']: Draw.PushButton('link %d' % (i + 1), BEVT_LINK[i], x + i * bw, y, bw, bh, data[0]) i += 1 y -= bh + 1 i = 0 for data in SCRIPT_INFO.d['__email__']: Draw.PushButton('email', BEVT_EMAIL[i], x + i * bw, y, bw, bh, data[0]) i += 1 y -= 18 y0 = y BGL.glColor3ub(COL_TXT[0], COL_TXT[1], COL_TXT[2]) for line in SCRIPT_INFO.content[SCROLL_DOWN:]: if line: line = line.replace('<br>', '') BGL.glRasterPos2i(x, y) Draw.Text(line) y -= 18 else: y -= 12 if y < PADDING + 20: # reached end, either stop or go to 2nd column if COLUMNS == 1: break elif x == PADDING: # make sure we're still in column 1 x = 6 * TEXT_WRAP + PADDING / 2 y = y0 x = PADDING Draw.PushButton( 'source', BEVT_VIEWSOURCE, x, 17, 45, bh, 'View this script\'s source code in the Text Editor (hotkey: S)' ) Draw.PushButton('exit', BEVT_EXIT, x + 45, 17, 45, bh, 'Exit from Scripts Help Browser (hotkey: Q)') if not FMODE: Draw.PushButton( 'back', BEVT_BACK, x + 2 * 45, 17, 45, bh, 'Back to scripts selection screen (hotkey: ESC)') Draw.PushButton('run script', BEVT_EXEC, x + 3 * 45, 17, 60, bh, 'Run this script') BGL.glColor3ub(COL_TXTHI[0], COL_TXTHI[1], COL_TXTHI[2]) BGL.glRasterPos2i(x, 5) Draw.Text('use the arrow keys or the mouse wheel to scroll text', 'small')
def GUI(): global GUIPARAMS, PARAMS BGL.glClearColor(*(ScreenColor + [1.0])) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) minx = 5 maxx = 500 miny = 5 maxy = 450 lineheight = 24 buPad = 5 # Generic Button Padding, most buttons should have 24-19 (or 5) px space around them lP = 5 # Left Padding rP = 5 # Right Padding # Draw Background Box BGL.glColor3f(*BackgroundColor) BGL.glRecti(minx, miny, maxx, maxy) # Draw Title BGL.glColor3f(*TitleBG) BGL.glRecti(minx, maxy - (lineheight), maxx, maxy) BGL.glColor3f(*TitleCol) title = "2D Cutout Image Importer v" + VERSIONSTRING BGL.glRasterPos2i(minx + lP, maxy - 15) Draw.Text(title, 'large') Draw.PushButton('Exit', EXIT, maxx-50-rP, maxy - lineheight + 2, 50, 19, "Exit Script") # Path Buttons if GUIPARAMS['Path'].val == '': Draw.PushButton('Single Image', SINGLE_IMG, minx + lP, maxy - (2*lineheight), 150, 19, "Select a Single Image to Import") Draw.PushButton('Directory', DIRECTORY_IMG, minx + lP + 150, maxy - (2*lineheight), 150, 19, "Select a Directory of Images to Import") else: Draw.PushButton('Clear', CLR_PATH, minx+lP, maxy - (2*lineheight), 50, 19, "Clear Path and Change Import Options") GUIPARAMS['Path'] = Draw.String('Path: ', NO_EVT, minx + lP, maxy - (3*lineheight), (maxx-minx-lP-rP), 19, GUIPARAMS['Path'].val, 399, 'Path to Import From') if PARAMS['ImportType'] == DIR: GUIPARAMS['ImageExt'] = Draw.String('Image Ext: ', CHG_EXT, minx + lP, maxy - (4*lineheight), 110, 19, GUIPARAMS['ImageExt'].val, 6, 'Image extension for batch directory importing (case insensitive)') GUIPARAMS['PackImage'] = Draw.Toggle('Pack', NO_EVT, maxx - rP - 50, maxy - (4*lineheight), 50, 19, GUIPARAMS['PackImage'].val, 'Pack Image(s) into .Blend File') # Geometry and Viewport Options BGL.glColor3f(*TextCol) BGL.glRecti(minx+lP, maxy - (5*lineheight), maxx-rP, maxy - (5*lineheight) + 1) BGL.glRasterPos2i(minx + lP, maxy-(5*lineheight) + 3) Draw.Text('Geometry and Display Options', 'small') GUIPARAMS['PPU'] = Draw.Slider('Pixels Per Unit: ', NO_EVT, minx + lP, maxy - (6*lineheight), (maxx-minx)/2 - lP, 19, GUIPARAMS['PPU'].val, 1, 5000, 0, 'Set the Number of Pixels Per Blender Unit to preserve Image Size Relations') GUIPARAMS['VPTransp'] = Draw.Toggle('Viewport Transparency', NO_EVT, minx + lP, maxy - (8*lineheight), (maxx-minx)/2 - lP, 2*lineheight - buPad, GUIPARAMS['VPTransp'].val, 'Display Alpha Transparency in the Viewport') GUIPARAMS['XOff'] = Draw.Slider('Offs X: ', NO_EVT, minx + lP + (maxx-minx)/2, maxy - (6*lineheight), (maxx-minx)/2 - lP - rP, 19, GUIPARAMS['XOff'].val, 0, 5.0, 0, 'Amount to Offset Each Imported in the X-Direction if Importing Multiple Images') GUIPARAMS['YOff'] = Draw.Slider('Offs Y: ', NO_EVT, minx + lP + (maxx-minx)/2, maxy - (7*lineheight), (maxx-minx)/2 - lP - rP, 19, GUIPARAMS['YOff'].val, 0, 5.0, 0, 'Amount to Offset Each Imported in the Y-Direction if Importing Multiple Images') GUIPARAMS['ZOff'] = Draw.Slider('Offs Z: ', NO_EVT, minx + lP + (maxx-minx)/2, maxy - (8*lineheight), (maxx-minx)/2 - lP - rP, 19, GUIPARAMS['ZOff'].val, 0, 5.0, 0, 'Amount to Offset Each Imported in the Z-Direction if Importing Multiple Images') # Material and Texture Options BGL.glColor3f(*TextCol) BGL.glRecti(minx+lP, maxy - (9*lineheight), maxx-rP, maxy - (9*lineheight) + 1) BGL.glRasterPos2i(minx + lP, maxy-(9*lineheight) + 3) Draw.Text('Material and Texture Options', 'small') half = (maxx-minx-lP-rP)/2 GUIPARAMS['CopyMat'] = Draw.Toggle('Copy Existing Material', NO_EVT, minx + lP, maxy-(10*lineheight), half, 19, GUIPARAMS['CopyMat'].val, 'Copy an Existing Material') if GUIPARAMS['CopyMat'].val: menStr = compileMaterialList() GUIPARAMS['MatId'] = Draw.Menu(menStr, NO_EVT, minx + lP, maxy - (11*lineheight), half, 19, GUIPARAMS['MatId'].val, 'Material to Copy Settings From') else: GUIPARAMS['MatCol'] = Draw.ColorPicker(NO_EVT, minx+lP, maxy - (13*lineheight), 40, (3*lineheight) - buPad, GUIPARAMS['MatCol'].val, 'Color of Newly Created Material') GUIPARAMS['Ref'] = Draw.Slider('Ref: ', NO_EVT, minx +lP+45, maxy - (11*lineheight), half-45, 19, GUIPARAMS['Ref'].val, 0.0, 1.0, 0, 'Set the Ref Value for Created Materials') GUIPARAMS['Spec'] = Draw.Slider('Spec: ', NO_EVT, minx +lP+45, maxy - (12*lineheight), half-45, 19, GUIPARAMS['Spec'].val, 0.0, 2.0, 0, 'Set the Spec Value for Created Materials') GUIPARAMS['Hard'] = Draw.Slider('Hard: ', NO_EVT, minx +lP+45, maxy - (13*lineheight), half-45, 19, GUIPARAMS['Hard'].val, 1, 500, 0, 'Set the Hardness Value for Created Materials') GUIPARAMS['Alpha'] = Draw.Slider('A: ', NO_EVT, minx +lP, maxy - (14*lineheight), half, 19, GUIPARAMS['Alpha'].val, 0.0, 1.0, 0, 'Set the Alpha Value for Created Materials') GUIPARAMS['ZTransp'] = Draw.Toggle('ZTransparency', NO_EVT, minx + lP, maxy - (15*lineheight), half, 19, GUIPARAMS['ZTransp'].val, 'Enable ZTransparency') GUIPARAMS['Shadeless'] = Draw.Toggle('Shadeless', NO_EVT, minx + lP, maxy - (16*lineheight), half, 19, GUIPARAMS['Shadeless'].val, 'Enable Shadeless') GUIPARAMS['TexChan'] = Draw.Number('Texture Channel: ', NO_EVT, minx + lP+ half + buPad, maxy - (10*lineheight), half-rP, 19, GUIPARAMS['TexChan'].val, 1, 10, 'Texture Channel for Image Texture') GUIPARAMS['MPTCol'] = Draw.Toggle('Color', NO_EVT, minx + lP + half + buPad, maxy - (11*lineheight), half/2, 19, GUIPARAMS['MPTCol'].val, 'Map To Color Channel') GUIPARAMS['MPTAlpha'] = Draw.Toggle('Alpha', NO_EVT, minx + lP + int((1.5)*half) + buPad, maxy - (11*lineheight), half/2 - rP, 19, GUIPARAMS['MPTAlpha'].val, 'Map To Alpha Channel') third = int((maxx-minx-lP-rP)/6) GUIPARAMS['UseAlpha'] = Draw.Toggle('Use Alpha', NO_EVT, minx + lP + half + buPad, maxy - (12*lineheight), third, 19, GUIPARAMS['UseAlpha'].val, "Use the Images' Alpha Values") GUIPARAMS['CalcAlpha'] = Draw.Toggle('Calc Alpha', NO_EVT, minx + lP + half + third + buPad, maxy - (12*lineheight), third, 19, GUIPARAMS['CalcAlpha'].val, "Calculate Images' Alpha Values") GUIPARAMS['ExtendMode'] = Draw.Toggle('Extend', NO_EVT, minx+lP+half+third+third+buPad, maxy - (12*lineheight), third-3, 19, GUIPARAMS['ExtendMode'].val, "Use Extend texture mode. If deselected, Repeat is used") GUIPARAMS['Seq'] = Draw.Toggle('Sequence', NO_EVT, minx + lP + half + buPad, maxy - (13*lineheight), half-rP, 19, GUIPARAMS['Seq'].val, 'Set the Image(s) to use a Sequence instead of a Still') if GUIPARAMS['Seq'].val and not PARAMS['ImportType'] == DIR: GUIPARAMS['AutoRefresh'] = Draw.Toggle('Auto Refresh', NO_EVT, minx + lP + half + buPad, maxy - (14*lineheight), half/2, 19, GUIPARAMS['AutoRefresh'].val, 'Use Auto Refresh') GUIPARAMS['Cyclic'] = Draw.Toggle('Cyclic', NO_EVT, minx + lP + half + buPad + half/2, maxy - (14*lineheight), half/2 - rP, 19, GUIPARAMS['Cyclic'].val, 'Repeat Frames Cyclically`') GUIPARAMS['Frames'] = Draw.Number('Frames: ', NO_EVT, minx +lP + half + buPad, maxy - (15*lineheight), half - rP, 19, GUIPARAMS['Frames'].val, 1, 30000, 'Sets the Number of Images of a Movie to Use') GUIPARAMS['Offs'] = Draw.Number('Offs: ', NO_EVT, minx +lP + half + buPad, maxy - (16*lineheight), half/2, 19, GUIPARAMS['Offs'].val, -30000, 30000, 'Offsets the Number of the Frame to use in the Animation') GUIPARAMS['StartFr'] = Draw.Number('StartFr: ', NO_EVT, minx +lP + half + buPad + half/2, maxy - (16*lineheight), half/2 - rP, 19, GUIPARAMS['StartFr'].val, 1, 30000, 'Sets the Global Starting Frame of the Movie') elif GUIPARAMS['Seq'].val and PARAMS['ImportType'] == DIR: BGL.glColor3f(*ErrCol) BGL.glRasterPos2i(minx + lP + half + buPad + 7, maxy-(14 * lineheight) + 5) Draw.Text('Sequence only available for Single Image Import', 'small') # Import Options BGL.glColor3f(*TextCol) BGL.glRecti(minx+lP, maxy - (17*lineheight), maxx-rP, maxy - (17*lineheight) + 1) BGL.glRasterPos2i(minx + lP, maxy-(17*lineheight) + 3) Draw.Text('Import', 'small') if GUIPARAMS['Path'].val and GUIPARAMS['ImageExt'].val or GUIPARAMS['Path'].val and PARAMS['ImportType'] == SINGLE: Draw.PushButton('Import', DO_SCRIPT, minx + lP, maxy - (18*lineheight), 75, 19, "Import Image(s)") else: BGL.glColor3f(*ErrCol) BGL.glRasterPos2i(minx+lP, maxy - (18*lineheight) + 5) Draw.Text('A path and image type must be specified to import images') GUIPARAMS['RedrawImp'] = Draw.Toggle('Redraw During Import', NO_EVT, maxx - rP - 150, maxy - (18*lineheight), 150, 19, GUIPARAMS['RedrawImp'].val, 'Redraw the View as Images Import')
def gui(): # drawing the screen global SCREEN, START_SCREEN, CONFIG_SCREEN, KEYMENUS, LABELS global BEVT_KEYMENU, BUT_KEYMENU, CFGKEY global BUT_TYPES, SCROLL_DOWN, VARS_NUM WIDTH, HEIGHT = Window.GetAreaSize() theme = Theme.Get()[0] tui = theme.get('ui') ttxt = theme.get('text') COL_BG = float_colors(ttxt.back) COL_TXT = ttxt.text COL_TXTHI = ttxt.text_hi BGL.glClearColor(COL_BG[0], COL_BG[1], COL_BG[2], COL_BG[3]) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) BGL.glColor3ub(COL_TXT[0], COL_TXT[1], COL_TXT[2]) if SCREEN == START_SCREEN: x = 10 y = 10 h = 20 w = 90 BGL.glRasterPos2i(x, y) Draw.Text( 'Select a configuration key to access it. Press Q or ESC to leave.' ) km_len = len(KEYMENUS) km_columns = (WIDTH - x) / w if km_columns == 0: km_rows = km_len else: km_rows = km_len / km_columns if (km_len % km_columns): km_rows += 1 if km_rows == 0: km_rows = 1 ystart = y + 2 * h * km_rows if ystart > (HEIGHT - 70): ystart = HEIGHT - 70 y = ystart column = 1 for i, km in enumerate(KEYMENUS): column += 1 BGL.glRasterPos2i(x + 2, y + h + 5) Draw.Text(LABELS[i]) BUT_KEYMENU[i] = Draw.Menu( km, BEVT_KEYMENU[i], x, y, w - 10, h, 0, 'Choose a key to access its configuration data') if column > km_columns: column = 1 y -= 2 * h if y < 35: break x = 10 else: x += w x = 10 y = 50 + ystart BGL.glColor3ub(COL_TXTHI[0], COL_TXTHI[1], COL_TXTHI[2]) BGL.glRasterPos2i(x, y) Draw.Text('Scripts Configuration Editor') Draw.PushButton('help', BEVT_HELP, x, 22, 45, 16, 'View help information about this script (hotkey: H)') elif SCREEN == CONFIG_SCREEN: x = y = 10 h = 18 data = CFGKEY.sorteddata tips = CFGKEY.tips fromdisk = CFGKEY.fromdisk limits = CFGKEY.limits VARS_NUM = 0 for k in data.keys(): VARS_NUM += len(data[k]) lines = VARS_NUM + 5 # to account for header and footer y = lines * h if y > HEIGHT - 20: y = HEIGHT - 20 BGL.glColor3ub(COL_TXTHI[0], COL_TXTHI[1], COL_TXTHI[2]) BGL.glRasterPos2i(x, y) Draw.Text('Scripts Configuration Editor') y -= 20 BGL.glColor3ub(COL_TXT[0], COL_TXT[1], COL_TXT[2]) txtsize = 10 if HEIGHT < lines * h: BGL.glRasterPos2i(10, 5) txtsize += Draw.Text('Arrow keys or mouse wheel to scroll, ') BGL.glRasterPos2i(txtsize, 5) Draw.Text('Q or ESC to return.') BGL.glRasterPos2i(x, y) Draw.Text('Key: "%s"' % CFGKEY.name) bh = 16 bw = 45 by = 16 i = -1 if CFGKEY.scriptname: i = 0 Draw.PushButton( 'help', BEVT_HELP, x, by, bw, bh, 'Show documentation for the script that owns this key (hotkey: H)' ) Draw.PushButton('back', BEVT_BACK, x + (1 + i) * bw, by, bw, bh, 'Back to config keys selection screen (hotkey: ESC)') Draw.PushButton('exit', BEVT_EXIT, x + (2 + i) * bw, by, bw, bh, 'Exit from Scripts Config Editor (hotkey: Q)') Draw.PushButton('revert', BEVT_CANCEL, x + (3 + i) * bw, by, bw, bh, 'Revert data to original values (hotkey: U)') Draw.PushButton('apply', BEVT_APPLY, x + (4 + i) * bw, by, bw, bh, 'Apply changes, if any (hotkey: ENTER)') delmsg = 'Delete this data key from memory' if fromdisk: delmsg = "%s and from disk" % delmsg Draw.PushButton('delete', BEVT_DEL, x + (5 + i) * bw, by, bw, bh, '%s (hotkey: DELETE)' % delmsg) if fromdisk: Draw.Toggle( "file", BEVT_DISK, x + 3 + (6 + i) * bw, by, bw, bh, DISK_UPDATE, 'Update also the file where this config key is stored') i = -1 top = -1 y -= 20 yend = 30 if data.has_key(bool) and y > 0: lst = data[bool] for l in lst: top += 1 i += 1 if top < SCROLL_DOWN: continue y -= h if y < yend: break w = 20 tog = data[bool][i][1] if tips and tips.has_key(l[0]): tooltip = tips[l[0]] else: tooltip = "click to toggle" BUT_TYPES[bool][i] = Draw.Toggle("", BEVT_BOOL + i, x, y, w, h, tog, tooltip) BGL.glRasterPos2i(x + w + 3, y + 5) Draw.Text(l[0].lower().replace('_', ' ')) i = -1 y -= 5 if data.has_key(int) and y > 0: lst = data[int] for l in lst: w = 70 top += 1 i += 1 if top < SCROLL_DOWN: continue y -= h if y < yend: break val = data[int][i][1] if limits: min, max = limits[l[0]] else: min, max = 0, 10 if tips and tips.has_key(l[0]): tooltip = tips[l[0]] else: tooltip = "click / drag to change" BUT_TYPES[int][i] = Draw.Number("", BEVT_INT + i, x, y, w, h, val, min, max, tooltip) BGL.glRasterPos2i(x + w + 3, y + 3) Draw.Text(l[0].lower().replace('_', ' ')) i = -1 y -= 5 if data.has_key(float) and y > 0: lst = data[float] for l in lst: w = 70 top += 1 i += 1 if top < SCROLL_DOWN: continue y -= h if y < yend: break val = data[float][i][1] if limits: min, max = limits[l[0]] else: min, max = 0.0, 1.0 if tips and tips.has_key(l[0]): tooltip = tips[l[0]] else: tooltip = "click and drag to change" BUT_TYPES[float][i] = Draw.Number("", BEVT_FLOAT + i, x, y, w, h, val, min, max, tooltip) BGL.glRasterPos2i(x + w + 3, y + 3) Draw.Text(l[0].lower().replace('_', ' ')) i = -1 y -= 5 if data.has_key(str) and y > 0: lst = data[str] for l in lst: top += 1 i += 1 if top < SCROLL_DOWN: continue y -= h if y < yend: break name = l[0].lower() is_dir = is_file = False if name.find('_dir', -4) > 0: is_dir = True elif name.find('_file', -5) > 0: is_file = True w = WIDTH - 20 wbrowse = 50 if is_dir and w > wbrowse: w -= wbrowse if tips and tips.has_key(l[0]): tooltip = tips[l[0]] else: tooltip = "click to write a new string" name = name.replace('_', ' ') + ': ' if len(l[1]) > MAX_STR_LEN: l[1] = l[1][:MAX_STR_LEN] BUT_TYPES[str][i] = Draw.String(name, BEVT_STR + i, x, y, w, h, l[1], MAX_STR_LEN, tooltip) if is_dir: Draw.PushButton( 'browse', BEVT_BROWSEDIR + i, x + w + 1, y, wbrowse, h, 'click to open a file selector (pick any file in the desired dir)' ) elif is_file: Draw.PushButton('browse', BEVT_BROWSEFILE + i, x + w + 1, y, 50, h, 'click to open a file selector')
def draw(): global mnu_persist_servers, mnu_mesh_formats, mnu_width, mnu_height, mnu_fullscreen, mnu_renderpath, mnu_group, mnu_filename, mnu_aa win_size = Window.GetAreaSize() left = 0 top = win_size[1] button_width = 130 button_height = 20 label_width = 105 pen_x = left + padding pen_y = win_size[1] - (button_height + padding) # Draw Label BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) text_width = Draw.Text('Persist Server') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 # Draw Persist Server Menu mnu_persist_servers = Draw.Menu(buildMenu(persist_servers), PERSIST_SERVER_CHANGED, pen_x, pen_y, button_width, button_height, persist_server, "Persist Server to use") # Move Pen Point pen_x = left + padding pen_y = pen_y - button_height - 5 button_width = 180 BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) Draw.Text('Mesh Format') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 button_width = 80 # Draw Mesh Format Menu mnu_mesh_formats = Draw.Menu(buildMenu(mesh_formats), MESH_FORMAT_CHANGED, pen_x, pen_y, button_width, button_height, mesh_format, "Mesh Format to use(ASCII/Binary)") # Move Pen Point pen_x = left + padding pen_y = pen_y - button_height - 5 button_width = 180 BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) text_width = Draw.Text('Preview Window') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 button_width = 100 mnu_width = Draw.Number("Width", WIDTH_CHANGED, pen_x, pen_y, button_width, button_height, window_width, 32, 2048, "Preview Window Width") # Move Pen Point pen_x = pen_x + button_width + padding mnu_height = Draw.Number("Height", HEIGHT_CHANGED, pen_x, pen_y, button_width, button_height, window_height, 32, 2048, "Preview Window Height") # Move Pen Point pen_x = left + padding pen_y = pen_y - button_height - 5 BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) text_width = Draw.Text('Preview Fullscreen') button_width = 20 # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 mnu_fullscreen = Draw.Toggle("X", FULLSCREEN_CHANGED, pen_x, pen_y, button_width, button_height, fullscreen, "Preview Fullscreen") # Move Pen Point pen_x = pen_x + button_width + padding pen_y = pen_y + 5 button_width = 180 BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) Draw.Text('Antialias Samples') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 button_width = 40 # Draw Mesh Format Menu mnu_aa = Draw.Menu(buildMenu(aasamples), AA_CHANGED, pen_x, pen_y, button_width, button_height, aa, "Antialias Samples") # Move Pen Point pen_x = left + padding pen_y = pen_y - button_height - 5 button_width = 180 BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) text_width = Draw.Text('Export Group / filename') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 button_width = 80 mnu_group = Draw.String("", GROUP_CHANGED, pen_x, pen_y, button_width, button_height, group, 255, "Export Group") # Move Pen Point pen_x = pen_x + button_width + padding mnu_filename = Draw.String("", FILENAME_CHANGED, pen_x, pen_y, button_width, button_height, filename, 255, "Export Filename") # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 button_width = 100 # Move Pen Point pen_x = left + padding pen_y = pen_y - button_height - 5 BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) Draw.Text('Preview Renderpath') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 button_width = 60 mnu_renderpath = Draw.Menu(buildMenu(renderpaths), RENDERPATH_CHANGED, pen_x, pen_y, button_width, button_height, renderpath, "Renderpath to use for preview") # Move Pen Point pen_x = left + padding pen_y = pen_y - button_height - 5 button_width = 80 Draw.PushButton("Close", CANCEL_CLICKED, pen_x, pen_y, button_width, button_height, "Close Exporter") pen_x = pen_x + button_width + padding Draw.PushButton("Export", OK_CLICKED, pen_x, pen_y, button_width, button_height, "Export Scene")
def draw(): global n2mat, bl_mats_menu, n2_shader_menu, shader_params_menu, texture_param_list win_size = Window.GetAreaSize() left = 0 top = win_size[1] button_width = 100 button_height = 17 pen_x = left + padding pen_y = win_size[1] - (button_height + padding) # TODO: get material for selected object if any if (n2mat): # Draw Label BGL.glColor3f(1.0, 1.0, 1.0) BGL.glRasterPos2i(pen_x, pen_y) text_width = Draw.Text('Blender Material') # Move Pen Point pen_x = pen_x + text_width + padding pen_y = pen_y - 5 # menu = buildMenu(bl_mats) bl_mats_menu = Draw.Menu(menu, BL_MAT_CHANGED, pen_x, pen_y, button_width, button_height, bl_mat_index, 'Blender Material') # Move Pen Point pen_x = pen_x + button_width + (padding * 2) pen_y = pen_y + 5 BGL.glRasterPos2i(pen_x, pen_y) # Draw Label text_width = Draw.Text('Nebula Shader') # Move Pen Point pen_x = pen_x + text_width + (padding) pen_y = pen_y - 5 button_width = 180 # menu = buildMenu(n2_shaders) n2_shader_menu = Draw.Menu(menu, NEBULA_SHADER_CHANGED, pen_x, pen_y, button_width, button_height, n2_shader_index, 'Nebula Shader') # Draw Params for current nebula shader shader = n2mat.GetShader() # Move Pen params_start_y = pen_y pen_x = left + padding params = shader.m_params label_width = 130 label_max_chars = 25 button_width_max = 80 name_max_chars = 10 column_size = label_width + (padding * 2) + button_width_max # Get Mesh object holding the shaders name and params texture_param_list = [] button_width = 120 #params = [] for key in params: param = params[key] if (not n2exporter.texture_param_types.has_key(param.m_type)): if ((pen_y - button_height - padding) < button_height): pen_x = pen_x + column_size #(win_size[0] / 2) pen_y = params_start_y pen_y = pen_y - button_height - padding BGL.glRasterPos2i(pen_x, pen_y) label = param.m_label name = param.m_name stored_value = n2mat.GetParamValue(param.m_name) if (len(label) > label_max_chars): label = label[0:label_max_chars] if (len(name) > name_max_chars): name = name[0:name_max_chars] Draw.Text(str(label)) if (param.m_type == "Int"): button_width = 50 pen_x = pen_x + label_width + padding pen_y = pen_y - 5 shader_params_menu[param.m_name] = Draw.Number( "", SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, int(stored_value), int(param.m_min), int(param.m_max), str(param.m_label)) pen_x = pen_x - label_width - padding pen_y = pen_y + 5 elif (param.m_type == "Bool"): button_width = 55 pen_x = pen_x + label_width + padding pen_y = pen_y - 5 menu = buildMenu(["False", "True"]) shader_params_menu[param.m_name] = Draw.Menu( menu, SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, int(stored_value), str(param.m_label)) pen_x = pen_x - label_width - padding pen_y = pen_y + 5 elif (param.m_type == "Float"): button_width = 60 pen_x = pen_x + label_width + padding pen_y = pen_y - 5 shader_params_menu[param.m_name] = Draw.Number( "", SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, float(stored_value), float(param.m_min), float(param.m_max), str(param.m_label)) pen_x = pen_x - label_width - padding pen_y = pen_y + 5 elif (param.m_type == "Enum"): button_width = 80 pen_x = pen_x + label_width + padding pen_y = pen_y - 5 menu = buildMenu(param.m_enum, param.m_default_enum) shader_params_menu[param.m_name] = Draw.Menu( menu, SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, int(stored_value), str(param.m_label)) pen_x = pen_x - label_width - padding pen_y = pen_y + 5 elif (param.m_type == "Vector"): button_width = 50 pen_y = pen_y - button_height - 5 v = n2exporter.StringToVector(stored_value) shader_params_menu[param.m_name + "_x"] = Draw.Number( "", SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, v.x, 0.0, 100.0, "x Component") pen_x = pen_x + button_width shader_params_menu[param.m_name + "_y"] = Draw.Number( "", SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, v.y, 0.0, 100.0, "y Component") pen_x = pen_x + button_width shader_params_menu[param.m_name + "_z"] = Draw.Number( "", SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, v.z, 0.0, 100.0, "z Component") pen_x = pen_x + button_width shader_params_menu[param.m_name + "_w"] = Draw.Number( "", SHADER_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, v.w, 0.0, 100.0, "w Component") pen_x = pen_x - ((button_width) * 3) elif (n2exporter.texture_param_types.has_key(param.m_type)): texture_param_list.append(param.m_name) # Build textures menu if (len(texture_param_list) > 0): if ((pen_y - button_height - padding) < button_height): pen_x = pen_x = pen_x + column_size pen_y = params_start_y button_width = 80 pen_y = pen_y - button_height - padding - 5 # texture_param_name = texture_param_list[texture_param_index] menu = buildMenu(texture_param_list) shader_params_menu["TextureParams"] = Draw.Menu( menu, TEXTURE_PARAM_CHANGED, pen_x, pen_y, button_width, button_height, texture_param_index, "Shader Textures") # Move Pen pen_x = pen_x + button_width + padding button_width = 160 default = n2mat.GetParamValue(texture_param_name) shader_params_menu[texture_param_name] = Draw.String( "", TEXTURE_PARAM_CLICKED, pen_x, pen_y, button_width, button_height, default, 255, "Texture Params") #Draw Browse button pen_x = pen_x + button_width button_width = 20 Draw.PushButton("...", TEXTURE_SELECT_CLICKED, pen_x, pen_y, button_width, button_height, "Select Texture") else: Draw.PupMenu("Error%t|You must have a blender material in the scene") Draw.Exit() return
def draw_gui(): global str_gmdc_filename, str_cres_filename, str_resource_name, btn_name_suffix, \ btn_export_tangents, btn_export_rigging, btn_export_bmesh, btn_save_log, \ menu_export_morphs, btn_use_obj_props, str_bmesh_name pos_y = 340 ; MAX_PATH = 200 # frame Blender.BGL.glColor3f(0.75, 0.75, 0.75) Blender.BGL.glRecti(10, 10, 430, pos_y) pos_y-= 30 # plugin's header s = "GMDC Exporter (TS2)" Blender.BGL.glColor3f(0.8, 0.8, 0.8) Blender.BGL.glRecti(10, pos_y, 430, pos_y+30) Draw.Label(s, 20, pos_y, 400, 30) pos_y-= 30 # GMDC file selector Draw.Label("GMDC file (output)", 20, pos_y, 200, 20) pos_y-= 20 Draw.BeginAlign() str_gmdc_filename = Draw.String("", 0x10, 20, pos_y, 300, 20, str_gmdc_filename.val, MAX_PATH, "Path to GMDC file") Draw.PushButton("Select file", 0x11, 320, pos_y, 100, 20, "Open file browser") Draw.EndAlign() pos_y-= 35 # geometry name Blender.BGL.glColor3f(0.7, 0.7, 0.7) Blender.BGL.glRecti(20, pos_y-60, 420, pos_y+20) Draw.Label("SGResource name (optional)", 25, pos_y, 400, 20) ; pos_y-= 20 Draw.Label("If not provided then GMDC filename is used", 25, pos_y, 400, 20) ; pos_y-= 30 Draw.BeginAlign() str_resource_name = Draw.String("", 0x50, 70, pos_y, 180, 20, str_resource_name.val, 50, "SGResource name of this geometry") btn_name_suffix = Draw.Toggle("_tslocator_gmdc", 0x51, 250, pos_y, 120, 20, btn_name_suffix.val, "Add default suffix") Draw.EndAlign() pos_y-= 45 # options Draw.BeginAlign() btn_export_rigging = Draw.Toggle("Rigging", 0x31, 20, pos_y, 100, 20, btn_export_rigging.val, "Export rigging data (bone indices, weights)") btn_export_tangents = Draw.Toggle("Tangents", 0x32, 120, pos_y, 100, 20, btn_export_tangents.val, "Export tangents (required for bump mapping)") btn_export_bmesh = Draw.Toggle("Bound. mesh", 0x33, 220, pos_y, 100, 20, btn_export_bmesh.val, "Export bounding geometry") btn_save_log = Draw.Toggle("Save log", 0x34, 320, pos_y, 100, 20, btn_save_log.val, "Write script's log data into file *.export_log.txt") Draw.EndAlign() pos_y-= 30 Draw.BeginAlign() menu_export_morphs = Draw.Menu("Export morphs %t|Do not export morphs %x0|Diff. in v.coords only %x1|Diff. in v.coords and normals %x2", 0x35, 20, pos_y, 200, 20, menu_export_morphs.val) btn_use_obj_props = Draw.Toggle("Use object properties", 0x36, 220, pos_y, 200, 20, btn_use_obj_props.val, "Properties can be assigned in logic panel") Draw.EndAlign() pos_y-= 30 # bounding mesh name Draw.Label("Bounding mesh:", 20, pos_y, 100, 20) str_bmesh_name = Draw.String("", 0x40, 120, pos_y, 200, 20, str_bmesh_name.val, 50, "Name of mesh object that will be exported as bounding mesh") pos_y-= 50 # buttons Draw.BeginAlign() Draw.PushButton("Export", 1, 120, pos_y, 100, 30, "Export geometry (Ctrl + Enter)") Draw.PushButton("Exit", 0, 220, pos_y, 100, 30, "Terminate the script (Esc)") Draw.EndAlign()