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 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 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 Display_Render_Bar(Y_POS, CONTROL_HEIGHT, CONTROL_WIDTH): """ Create the Render setup box.""" Create_Tab(3, Y_POS, CONTROL_WIDTH, Y_POS - CONTROL_HEIGHT, "Render setup", 0) global original_fps_button original_fps_button = Draw.Number("Original FPS:", origFpsButton, 9, (Y_POS - 41), (CONTROL_WIDTH / 2) - 9, 18, original_fps_button.val, 1, 120, 'Orignal FPS of the motion imported') global output_fps_button output_fps_button = Draw.Number("Output FPS:", outputFpsButton, ((CONTROL_WIDTH / 2) + 3), (Y_POS - 41), (CONTROL_WIDTH / 2) - 9, 18, output_fps_button.val, 1, 120, 'The desired output FPS of the motion')
def render(self): try: Draw.Number(self.label, self.event, self.x, self.y, self.width, self.height, self.value, self.min, self.max, self.tooltip, self.update_value, self.range, self.precision) except: # needed for backwards compatibility (no range and precision in 2.48a) Draw.Number(self.label, self.event, self.x, self.y, self.width, self.height, self.value, self.min, self.max, self.tooltip, self.update_value)
def terain_clamp_ui(): # Only to center the UI x, y = GLOBALS['MOUSE'] x -= 40 y -= 70 Draw.Label('Drop Axis', x - 70, y + 120, 60, 20) Draw.BeginAlign() GLOBALS['DROP_AXIS'][0] = Draw.Toggle('Z', EVENT_REDRAW, x + 20, y + 120, 30, 20, GLOBALS['DROP_AXIS'][0].val, 'Drop down on the global Z axis', do_axis_z) GLOBALS['DROP_AXIS'][1] = Draw.Toggle('View Z', EVENT_REDRAW, x + 50, y + 120, 70, 20, GLOBALS['DROP_AXIS'][1].val, 'Drop allong the view vector', do_axis_view) Draw.EndAlign() # Source Draw.Label('Drop on to...', x - 70, y + 90, 120, 20) Draw.BeginAlign() GLOBALS['GROUND_SOURCE'][0] = Draw.Toggle('Active Object', EVENT_REDRAW, x - 70, y + 70, 110, 20, GLOBALS['GROUND_SOURCE'][0].val, '', do_ground_source_act) GLOBALS['GROUND_SOURCE'][1] = Draw.Toggle('Group', EVENT_REDRAW, x + 40, y + 70, 80, 20, GLOBALS['GROUND_SOURCE'][1].val, '', do_ground_source_group) if GLOBALS['GROUND_SOURCE'][1].val: GLOBALS['GROUND_GROUP_NAME'] = Draw.String( 'GR:', EVENT_REDRAW + 1001, x - 70, y + 50, 190, 20, GLOBALS['GROUND_GROUP_NAME'].val, 21, '', do_ground_group_name) Draw.EndAlign() GLOBALS['DROP_OVERLAP_CHECK'] = Draw.Toggle( 'Overlapping Terrain', EVENT_NONE, x - 70, y + 20, 190, 20, GLOBALS['DROP_OVERLAP_CHECK'].val, "Check all terrain triangles and use the top most (slow)") Draw.BeginAlign() GLOBALS['DROP_ORIENT'] = Draw.Toggle('Orient Normal', EVENT_REDRAW, x - 70, y - 10, 110, 20, GLOBALS['DROP_ORIENT'].val, "Rotate objects to the face normal", do_dummy) if GLOBALS['DROP_ORIENT'].val: GLOBALS['DROP_ORIENT_VALUE'] = Draw.Number( '', EVENT_NONE, x + 40, y - 10, 80, 20, GLOBALS['DROP_ORIENT_VALUE'].val, 0.0, 100.0, "Percentage to orient 0.0 - 100.0") Draw.EndAlign() Draw.PushButton('Drop Objects', EVENT_EXIT, x + 20, y - 40, 100, 20, 'Drop the selected objects', terrain_clamp) # So moving the mouse outside the popup exits the while loop GLOBALS['EVENT'] = EVENT_EXIT
def Display_Camera_Bar(Y_POS, CONTROL_HEIGHT, CONTROL_WIDTH): """ Create the Camera setup box. """ Create_Tab(3, Y_POS, CONTROL_WIDTH, Y_POS - CONTROL_HEIGHT, "Camera setup", Camera_Setup_Selection) global select_all_cameras_button select_all_cameras_button = Draw.PushButton('Select all cameras', no_action, ((CONTROL_WIDTH / 2) + 3), (Y_POS - 22), (CONTROL_WIDTH / 2) - 9, 16, 'Selects all cameras in the scene', Select_All_Cameras) if Camera_Setup_Selection['Automatic setup'][0].val: global camera_number_button camera_number_button = Draw.Number("Number of cameras:", CameraNumberButton, 9, (Y_POS - 63), (CONTROL_WIDTH / 2) - 9, 18, camera_number_button_value, camera_number_button_minimum, camera_number_button_maximum, 'Number of cameras to be set up in the scene', camButtonClicked, camera_number_button_step) global camera_latitude_button camera_latitude_button = Draw.Number("Latitude:", CameraLatitudeButton, ((CONTROL_WIDTH / 2) + 3), (Y_POS - 63), (CONTROL_WIDTH / 2) - 9, 18, camera_latitude_button.val, 0, math.pi/2, 'General latitude of the cameras') global camera_ontop_button camera_ontop_button = Draw.Number("Ceiling cameras:", CameraOntopButton, 9, (Y_POS - 84), (CONTROL_WIDTH / 2) - 9, 18, camera_ontop_button.val, 0, 4, 'Number of cameras to be positioned in the ceiling', lambda x,y:None, 10) if camera_ontop_button.val: global camera_ontop_latitude_button camera_ontop_latitude_button = Draw.Number("Ceiling latitude:", CameraOntopLatitudeButton, ((CONTROL_WIDTH / 2) + 3), (Y_POS - 84), (CONTROL_WIDTH / 2) - 9, 18, camera_ontop_latitude_button.val, 0, math.pi/2, 'Latitude of the cameras in the ceiling') global camera_radius_button camera_radius_button = Draw.Number("Radius:", CameraRadiusButton, ((CONTROL_WIDTH / 2) + 3), (Y_POS - CONTROL_HEIGHT) + 6, (CONTROL_WIDTH / 2) - 9, 18, camera_radius_button.val, 1, 40, 'The radius of the circle the cameras are placed in, in meters', lambda x,y:None, 10) if Camera_Setup_Selection['Pre-saved setup'][0].val: global camera_import_button camera_import_button = Draw.PushButton('Select camera setup (.xml)', CameraImportButton, 9, (Y_POS - 63), (CONTROL_WIDTH / 2) - 9, 18, 'Select camera setup (.xml)') BGL.glRasterPos2i(11, (Y_POS - 80)) if CAMString: RIGHT_LIMIT = 6 tempString = CAMString if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(CAMString) else: Draw.Text('Please select a file...') global camera_export_button camera_export_button = Draw.PushButton('Export current setup', CameraExportButton, 9, (Y_POS - CONTROL_HEIGHT) + 6, (CONTROL_WIDTH / 2) - 9, 18, 'Press this button to save your camera setup')
def drawCamera(): global DOF, DOFRADIUS, DOFDIST, SPHERICALCAMERA ## camera settings col = 10 line = 200 BGL.glRasterPos2i(col, line) Draw.Text("Camera:") col = 100 line = 195 DOF = Draw.Toggle("DOF", DOF_CAMERA, col, line, 120, 18, DOF.val) col = 225 DOFDIST = Draw.Number("Distance", 2, col, line, 120, 18, DOFDIST.val, 0.0, 200.00) col = 350 DOFRADIUS = Draw.Number("Radius", 2, col, line, 120, 18, DOFRADIUS.val, 0.0, 200.00) col = 100 line = 170 SPHERICALCAMERA = Draw.Toggle("Spherical", SPHER_CAMERA, col, line, 120, 18, SPHERICALCAMERA.val) drawButtons()
def drawLights(): global MESHLIGHTPOWER, DSAMPLES ## meshlight power slider col = 10 line = 200 BGL.glRasterPos2i(col, line) Draw.Text("Meshlight:") col = 100 line = 195 MESHLIGHTPOWER = Draw.Number("Power", 2, col, line, 120, 18, MESHLIGHTPOWER.val, 1, 15) ## lightserver settings col = 10 line = 150 BGL.glRasterPos2i(col, line) Draw.Text("Lightserver:") col = 100 line = 147 DSAMPLES = Draw.Number("Direct Samples ", 2, col, line, 250, 18, DSAMPLES.val, 0, 1024) drawButtons()
def drawAO(): global OCCLUSSION, OCCBRIGHTR, OCCBRIGHTG, OCCBRIGHTB, OCCDARKR, OCCDARKG, OCCDARKB, OCCSAMPLES, OCCDIST col = 10 line = 200 BGL.glRasterPos2i(col, line) Draw.Text("Ambient Occlusion") col = 10 line = 175 OCCLUSSION = Draw.Toggle("Amb Occ", 2, col, line, 85, 18, OCCLUSSION.val) col = 100 OCCBRIGHTR = Draw.Number("Bright (R)", 2, col, line, 125, 18, OCCBRIGHTR.val, 0.0, 1.0) col = 230 OCCBRIGHTG = Draw.Number("Bright (G)", 2, col, line, 125, 18, OCCBRIGHTG.val, 0.0, 1.0) col = 360 OCCBRIGHTB = Draw.Number("Bright (B)", 2, col, line, 125, 18, OCCBRIGHTB.val, 0.0, 1.0) col = 100 line = 150 OCCDARKR = Draw.Number("Dark (R)", 2, col, line, 125, 18, OCCDARKR.val, 0.00, 1.0) col = 230 OCCDARKG = Draw.Number("Dark (G)", 2, col, line, 125, 18, OCCDARKG.val, 0.0, 1.0) col = 360 OCCDARKB = Draw.Number("Dark (B)", 2, col, line, 125, 18, OCCDARKB.val, 0.0, 1.0) col = 100 line = 125 OCCSAMPLES = Draw.Number("Samples", 2, col, line, 125, 18, OCCSAMPLES.val, 0, 256) col = 230 OCCDIST = Draw.Number("Distance", 2, col, line, 125, 18, OCCDIST.val, -1.0, 150.0) drawButtons()
def obj_ui(): ui_x, ui_y = GLOBALS['MOUSE'] # Center based on overall pup size ui_x -= 165 ui_y -= 90 global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90 Draw.Label('Import...', ui_x+9, ui_y+159, 220, 21) Draw.BeginAlign() CREATE_SMOOTH_GROUPS = Draw.Toggle('Smooth Groups', EVENT_NONE, ui_x+9, ui_y+139, 110, 20, CREATE_SMOOTH_GROUPS.val, 'Surround smooth groups by sharp edges') CREATE_FGONS = Draw.Toggle('NGons as FGons', EVENT_NONE, ui_x+119, ui_y+139, 110, 20, CREATE_FGONS.val, 'Import faces with more then 4 verts as fgons') CREATE_EDGES = Draw.Toggle('Lines as Edges', EVENT_NONE, ui_x+229, ui_y+139, 110, 20, CREATE_EDGES.val, 'Import lines and faces with 2 verts as edges') Draw.EndAlign() Draw.Label('Separate objects by OBJ...', ui_x+9, ui_y+110, 220, 20) Draw.BeginAlign() SPLIT_OBJECTS = Draw.Toggle('Object', EVENT_REDRAW, ui_x+9, ui_y+89, 55, 21, SPLIT_OBJECTS.val, 'Import OBJ Objects into Blender Objects', do_split) SPLIT_GROUPS = Draw.Toggle('Group', EVENT_REDRAW, ui_x+64, ui_y+89, 55, 21, SPLIT_GROUPS.val, 'Import OBJ Groups into Blender Objects', do_split) SPLIT_MATERIALS = Draw.Toggle('Material', EVENT_REDRAW, ui_x+119, ui_y+89, 60, 21, SPLIT_MATERIALS.val, 'Import each material into a seperate mesh (Avoids > 16 per mesh error)', do_split) Draw.EndAlign() # Only used for user feedback KEEP_VERT_ORDER = Draw.Toggle('Keep Vert Order', EVENT_REDRAW, ui_x+184, ui_y+89, 113, 21, KEEP_VERT_ORDER.val, 'Keep vert and face order, disables split options, enable for morph targets', do_vertorder) ROTATE_X90 = Draw.Toggle('-X90', EVENT_REDRAW, ui_x+302, ui_y+89, 38, 21, ROTATE_X90.val, 'Rotate X 90.') Draw.Label('Options...', ui_x+9, ui_y+60, 211, 20) CLAMP_SIZE = Draw.Number('Clamp Scale: ', EVENT_NONE, ui_x+9, ui_y+39, 130, 21, CLAMP_SIZE.val, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)') POLYGROUPS = Draw.Toggle('Poly Groups', EVENT_REDRAW, ui_x+144, ui_y+39, 90, 21, POLYGROUPS.val, 'Import OBJ groups as vertex groups.', do_polygroups) IMAGE_SEARCH = Draw.Toggle('Image Search', EVENT_NONE, ui_x+239, ui_y+39, 100, 21, IMAGE_SEARCH.val, 'Search subdirs for any assosiated images (Warning, may be slow)') Draw.BeginAlign() Draw.PushButton('Online Help', EVENT_REDRAW, ui_x+9, ui_y+9, 110, 21, 'Load the wiki page for this script', do_help) Draw.PushButton('Cancel', EVENT_EXIT, ui_x+119, ui_y+9, 110, 21, '', obj_ui_set_event) Draw.PushButton('Import', EVENT_IMPORT, ui_x+229, ui_y+9, 110, 21, 'Import with these settings', obj_ui_set_event) Draw.EndAlign()
def edl_draw(): MARGIN = 4 rect = BPyWindow.spaceRect() but_width = int((rect[2] - MARGIN * 2) / 4.0) # 72 # Clamp if but_width > 100: but_width = 100 but_height = 17 x = MARGIN y = rect[3] - but_height - MARGIN xtmp = x # ---------- ---------- ---------- ---------- Blender.Draw.BeginAlign() PREF['filename'] = Draw.String('edl path: ', B_EVENT_RELOAD, xtmp, y, (but_width * 3) - 20, but_height, PREF['filename'].val, 256, 'EDL Path') xtmp += (but_width * 3) - 20 Draw.PushButton('..', B_EVENT_FILESEL_EDL, xtmp, y, 20, but_height, 'Select an EDL file') xtmp += 20 Blender.Draw.EndAlign() Draw.PushButton( 'Reload', B_EVENT_RELOAD, xtmp + MARGIN, y, but_width - MARGIN, but_height, 'Read the ID Property settings from the active curve object') xtmp += but_width y -= but_height + MARGIN xtmp = x # ---------- ---------- ---------- ---------- reel_keys = edl_reel_keys() if reel_keys: text = 'Reel file list...' elif PREF['filename'].val == '': text = 'No EDL loaded.' else: text = 'No reels found!' Draw.Label(text, xtmp + MARGIN, y, but_width * 4, but_height) xtmp += but_width * 4 y -= but_height + MARGIN xtmp = x # ---------- ---------- ---------- ---------- for i, reel_key in enumerate(reel_keys): reel_item = REEL_UI[reel_key] Blender.Draw.BeginAlign() REEL_UI[reel_key].filename_but = Draw.String( reel_item.ui_text, B_EVENT_NOP, xtmp, y, (but_width * 3) - 20, but_height, REEL_UI[reel_key].filename_but.val, 256, 'Select the reel path') xtmp += (but_width * 3) - 20 Draw.PushButton('..', B_EVENT_FILESEL + i, xtmp, y, 20, but_height, 'Media path to use for this reel') xtmp += 20 Blender.Draw.EndAlign() reel_item.offset_but = Draw.Number( 'ofs:', B_EVENT_NOP, xtmp + MARGIN, y, but_width - MARGIN, but_height, reel_item.offset_but.val, -100000, 100000, 'Start offset in frames when applying timecode') xtmp += but_width - MARGIN y -= but_height + MARGIN xtmp = x # ---------- ---------- ---------- ---------- Draw.PushButton('Import CMX-EDL Sequencer Strips', B_EVENT_IMPORT, xtmp + MARGIN, MARGIN, but_width * 4 - MARGIN, but_height, 'Load the EDL file into the sequencer') xtmp += but_width * 4 y -= but_height + MARGIN xtmp = x
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(): 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 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 animsg, flipmsg, swapmsg, anim_tick global flip_z, swap_yz, flip_norm, anim, ticks, speed, recalc_norm, Bl_norm, no_light glClearColor(0.55, 0.6, 0.6, 1) glClear(BGL.GL_COLOR_BUFFER_BIT) #external box glColor3f(0.2, 0.3, 0.3) rect(10, 402, 300, 382) #-- #glColor3f(0.3,0.4,0.4) #rect(11,399,298,398) #-- glColor3f(0.5, 0.75, 0.65) rect(14, 398, 292, 30) #-- glColor3f(0.5, 0.75, 0.65) rect(14, 366, 292, 160) #-- glColor3f(0.5, 0.75, 0.65) rect(14, 202, 292, 60) #-- glColor3f(0.5, 0.75, 0.65) rect(14, 138, 292, 40) #-- glColor3f(0.5, 0.75, 0.65) rect(14, 94, 292, 70) glColor3f(0.8, .8, 0.6) glRasterPos2i(20, 380) Draw.Text("DirectX Exporter ", 'large') Draw.Text("(for Blender 2.41)", 'small') #-------Aniamtion toggle--------------------------------------------- Draw.Toggle("Anim", 1, 20, 330, 55, 20, toggle_val, "export animations") if toggle_val: anim = 1 animsg = "animation will be exported" else: anim = 0 animsg = "animation will be not exported" glRasterPos2i(100, 335) Draw.Text(animsg) #---Flip normals toggle----------------------------------------------- Draw.Toggle("Flip norm", 2, 20, 300, 55, 20, toggle1_val, "invert normals") if toggle1_val: flip_norm = 1 flipmsg = "flipped normals" else: flip_norm = 0 flipmsg = "not flipped normals" glRasterPos2i(100, 305) Draw.Text(flipmsg) #------Swap yz toggle---------------------------------------------------------------- Draw.Toggle("Swap zy", 3, 20, 270, 55, 20, toggle2_val, "swap z,y axis(y up)") if toggle2_val: swap_yz = 1 swapmsg = "Y-axis up" else: swap_yz = 0 swapmsg = "Z-axis up" glRasterPos2i(100, 275) Draw.Text(swapmsg) #------Flip z toggle---------------------------------------------------------------- Draw.Toggle("Flip z", 4, 20, 240, 55, 20, toggle3_val, "flip z axis") if toggle3_val: flip_z = 1 zmsg = "left handed system" else: flip_z = 0 zmsg = "right handed system" glRasterPos2i(100, 245) Draw.Text(zmsg) #------Speed toggle---------------------------------------------------------------- Draw.Toggle("Speed", 5, 20, 210, 55, 20, toggle4_val, "Animation speed") if toggle4_val: speed = 1 spedmsg = "set speed" anim_tick = Draw.Number("", 6, 200, 210, 85, 20, anim_tick.val, 1, 100000, "ticks per second") else: speed = 0 spedmsg = "" glRasterPos2i(100, 215) Draw.Text(spedmsg) #------Blender Normals toggle---------------------------------------------------------------- Draw.Toggle("Bl.normals", 10, 20, 105, 75, 25, toggle5_val, "export normals as in Blender") if toggle5_val: Bl_norm = 1 #------Recalculute Normals toggle---------------------------------------------------------------- Draw.Toggle("recalc.no", 11, 120, 105, 75, 25, toggle6_val, "export recalculated normals") if toggle6_val: recalc_norm = 1 #------Recalculute Normals toggle---------------------------------------------------------------- Draw.Toggle("no smooth", 12, 220, 105, 75, 25, toggle7_val, "every vertex has the face normal,no smoothing") if toggle7_val: no_light = 1 #------Draw Button export---------------------------------------------------------------- exp_butt = Draw.Button("Export All", 7, 20, 155, 75, 30, "export all the scene objects") sel_butt = Draw.Button("Export Sel", 8, 120, 155, 75, 30, "export the selected object") exit_butt = Draw.Button("Exit", 9, 220, 155, 75, 30, "exit") glRasterPos2i(20, 75) Draw.Text("(C) 2006 Arben OMARI ") glRasterPos2i(20, 55) Draw.Text("http://www.omariben.too.it") glRasterPos2i(20, 35) Draw.Text("*****@*****.**")
def draw(): """ This function draws the morph target on the screen and adds buttons to enable utility functions to be called to process the target. **Parameters:** This method has no parameters. """ global message, regulFactor global targetPath, morphFactor, rotVal, rotSum, currentTarget, selAxis, rotationMode global saveOnlySelectedVerts, loadedTraslTarget, loadedRotTarget, loadedPoseTarget global fitVert1, fitVert2, fitVert3 if GUIswitch == 1: glClearColor(0.5, 0.5, 0.5, 0.0) glClear(GL_COLOR_BUFFER_BIT) glColor3f(0.0, 0.0, 0.0) glRasterPos2i(10, 300) Draw.Text("MakeTargets v3.2") glColor3f(0.5, 0.0, 0.0) glRasterPos2i(10, 250) Draw.Text("Msg: %s" % (message)) glColor3f(0.0, 0.0, 0.0) glRasterPos2i(10, 230) fileText = "" if loadedTraslTarget: fileText = os.path.basename(loadedTraslTarget) elif loadedRotTarget: fileText = os.path.basename(loadedRotTarget) elif loadedPoseTarget: fileText = os.path.basename(loadedPoseTarget) Draw.Text("Target: %s" % (fileText)) Draw.Button("Load", 1, 10, 200, 50, 20, "Load target") Draw.Button("Morph", 2, 60, 200, 50, 20, "Morph ") Draw.Button("<=", 3, 110, 200, 30, 20, "Make left side symetrical to right side") Draw.Button("Reset", 4, 140, 200, 40, 20, "Return base object to its original state") Draw.Button("=>", 5, 180, 200, 30, 20, "Make right side symetrical to left side") morphFactor = Draw.Number("Value: ", 0, 10, 180, 100, 20, morphFactor.val, -2, 2, "Insert the value to apply the target") Draw.Button("Save", 6, 110, 180, 100, 20, "Save target") saveOnlySelectedVerts = Draw.Toggle( "Save only selected verts", 0, 10, 160, 200, 20, saveOnlySelectedVerts.val, "The target will affect only the selected verts") rotationMode = Draw.Toggle("Rotations", 0, 10, 140, 200, 20, rotationMode.val, "Work with rotation targets") if GUIswitch == 2: glClearColor(0.5, 0.5, 0.5, 0.0) glClear(GL_COLOR_BUFFER_BIT) glColor3f(0.0, 0.0, 0.0) glRasterPos2i(10, 300) Draw.Text("ScanToMH vers. 1") glColor3f(0.5, 0.0, 0.0) glRasterPos2i(10, 250) Draw.Text("Msg: %s" % (message)) glColor3f(0.0, 0.0, 0.0) glRasterPos2i(10, 230) Draw.Button("Load ob", 30, 10, 200, 80, 20, "Load wavefront obj") Draw.Button("Fit", 32, 90, 200, 80, 20, "Morph ") Draw.Button("Build", 31, 170, 200, 80, 20, "Build targets db") Draw.Button("Save verts", 33, 10, 180, 80, 20, "Save selected verts") regulFactor = Draw.Number("Regul: ", 0, 90, 180, 100, 20, regulFactor.val, 0, 1, "0 mean fine fitting, but less constrain") fitVert1 = Draw.String("verts to compute: ", 34, 10, 150, 240, 20, fitVert1.val, 300, "None") fitVert2 = Draw.String("verts to fit: ", 35, 10, 130, 240, 20, fitVert2.val, 300, "None") if GUIswitch == 3: glClearColor(0.5, 0.5, 0.5, 0.0) glClear(GL_COLOR_BUFFER_BIT) glColor3f(0.0, 0.0, 0.0) glRasterPos2i(10, 300) Draw.Text("Regulariser vers. 1") glColor3f(0.5, 0.0, 0.0) glRasterPos2i(10, 250) Draw.Text("Msg: %s" % (message)) glColor3f(0.0, 0.0, 0.0) glRasterPos2i(10, 230) Draw.Button("Load db data", 40, 10, 200, 80, 20, "Load targets db") Draw.Button("Regularise", 41, 90, 200, 80, 20, "Regularise the mesh ") Draw.Button("Build", 42, 170, 200, 80, 20, "Build targets db") fitVert3 = Draw.String("verts to fit: ", 35, 10, 130, 240, 20, fitVert3.val, 300, "None")
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 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 render(self): Draw.Number(self.label, self.event, self.x, self.y, self.width, self.height, self.value, self.min, self.max, self.tooltip, self.update_value)
def Display_File_Bar(Y_POS, CONTROL_HEIGHT, CONTROL_WIDTH): """ Create the File setup box.""" global num_motions_button Create_Tab(3, Y_POS, CONTROL_WIDTH, Y_POS - CONTROL_HEIGHT, "File setup", 0) RIGHT_LIMIT = 90 global ASF_button ASF_button = Draw.PushButton('ASF-file', ASFBUTTON, 9, (Y_POS - 41), 65, 18, 'ASF-file') BGL.glRasterPos2i(80, (Y_POS - 37)) if ASFString: tempString = ASFString if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(ASFString) else: Draw.Text('Please select a file...') global AMC_button AMC_button = Draw.PushButton('AMC-file', AMCBUTTON, 9, (Y_POS - 63), 65, 18, 'AMC-file') BGL.glRasterPos2i(80, (Y_POS - 58)) if AMCString: tempString = AMCString if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(AMCString) else: Draw.Text('Please select a file...') if num_motions_button.val > 1: global AMC2_button AMC2_button = Draw.PushButton('AMC2-file', AMC2BUTTON, 9, (Y_POS - 85), 65, 18, 'AMC-file') BGL.glRasterPos2i(80, (Y_POS - 80)) if stitch and AMC2String: tempString = AMC2String if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(AMC2String) else: Draw.Text('Please select a file...') if num_motions_button.val > 2: global AMC3_button AMC3_button = Draw.PushButton('AMC3-file', AMC3BUTTON, 9, (Y_POS - 107), 65, 18, 'AMC-file') BGL.glRasterPos2i(80, (Y_POS - 101)) if AMC3String: tempString = AMC3String if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(AMC3String) else: Draw.Text('Please select a file...') if num_motions_button.val > 3: global AMC4_button AMC4_button = Draw.PushButton('AMC4-file', AMC4BUTTON, 9, (Y_POS - 129), 65, 18, 'AMC-file') BGL.glRasterPos2i(80, (Y_POS - 123)) if AMC4String: tempString = AMC4String if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(AMC4String) else: Draw.Text('Please select a file...') if num_motions_button.val > 4: global AMC5_button AMC5_button = Draw.PushButton('AMC5-file', AMC5BUTTON, 9, (Y_POS - 151), 65, 18, 'AMC-file') BGL.glRasterPos2i(80, (Y_POS - 145)) if AMC5String: tempString = AMC5String if (Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT)): while Draw.GetStringWidth('...' + tempString) > (CONTROL_WIDTH - RIGHT_LIMIT): tempString = tempString[2:] Draw.Text('...' + tempString) else: Draw.Text(AMC5String) else: Draw.Text('Please select a file...') num_motions_button = Draw.Number("Number of motions:", STITCHBUTTON, 9, (Y_POS - 63 - (22*num_motions_button.val)), (CONTROL_WIDTH / 2) - 9, 18, num_motions_button.val, 1, 5, 'The number of motions to be imported') if num_motions_button.val > 1: global motion_transition_button motion_transition_button = Draw.Number("Transition time (frames):", no_action, ((CONTROL_WIDTH / 2) + 3), (Y_POS - 63 - (22*num_motions_button.val)), (CONTROL_WIDTH / 2) - 9, 18, motion_transition_button.val, 1, 1000, 'The number of frames between each motion')
def renderGUI(): """ Renders the GUI for the script. """ global G # find the selection set and update some selection # related flags haveEmpty = False haveCamera = False emptyName = "" G.selection = Object.GetSelected() G.curempty = None if G.selection is not None and len(G.selection) > 0: mso = G.selection[0] msotype = mso.getType() if msotype == 'Empty': haveEmpty = True G.curempty = mso emptyName = G.curempty.getName() elif msotype == 'Camera': haveCamera = True emptyHasCoords = G.coordmap.has_key(emptyName) removeUnknownsFromCoords() # clear any buttons that need to have set states G.buttons.add = G.buttons.delete = None # clear the window c = COLOR_BACKGROUND BGL.glClearColor(c[0], c[1], c[2], c[3]) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) # paint the image in the background if G.image is not None: #drawImage(G.image, G.imgpos, G.iw, G.ih, G.zoom) Draw.Image(G.image, G.imgpos[0], G.imgpos[1], G.zoom, G.zoom) # paint 2D vertices in the image BGL.glPushAttrib(BGL.GL_POINT_BIT | BGL.GL_CURRENT_BIT) BGL.glPointSize(POINT_SIZE) x0 = int(G.imgpos[0] / G.zoom) y0 = int(G.imgpos[1] / G.zoom) def drawvc(ec): emptyname, coord = ec if Object.Get(emptyname) in G.selection: c = COLOR_VERTSEL else: c = COLOR_VERTUNSEL BGL.glColor4f(c[0], c[1], c[2], c[3]) BGL.glVertex2f(G.zoom * (coord[0] + x0), G.zoom * (coord[1] + y0)) BGL.glBegin(BGL.GL_POINTS) map(drawvc, G.coordmap.items()) BGL.glEnd() BGL.glPopAttrib() # if we're in add mode then draw some extra stuff if G.mode == MODE_ADD: xm, ym = map(int, getWMCoords()) xm -= 10 ym += 10 (xw, yw, ww, hw) = getWinRect() # draw crosshairs c = COLOR_CROSSHAIRS BGL.glColor4f(c[0], c[1], c[2], c[3]) verts = [(xm, 0), (xm, hw), (0, ym), (ww, ym)] BGL.glBegin(BGL.GL_LINES) map(lambda x: BGL.glVertex2d(x[0], x[1]), verts) BGL.glEnd() ############################################# # UNCOMMENT THIS SECTION FOR A COOL MINIMAP # EFFECT - NOT VERY USEFUL THOUGH # ## draw "minimap" background #c = COLOR_MINIMAP #BGL.glColor4f(c[0], c[1], c[2], c[3]) #verts = [ (119,10), (221,10), (221,111), (119,111) ] #BGL.glBegin(BGL.GL_QUADS) #map(lambda x: BGL.glVertex2i(x[0],x[1]), verts) #BGL.glEnd() # ## paint the image into the minimap #ix,iy = wc2ic((xm,ym)) #ix,iy = map(int, [ix, iy]) #drawImage(G.ibuf, (120,10), G.iw, G.ih, 10.0, (ix-5,iy-5,10,10)) # # END OF MINIMAP SECTION ############################################# # paint the current empty name if haveEmpty: c = COLOR_TEXT BGL.glColor4d(c[0], c[1], c[2], c[3]) BGL.glRasterPos2i(220, 10) Draw.Text(emptyName, 'small') # paint the normal GUI buttons G.buttons.quit = Draw.PushButton('Quit', BUTTON_QUIT, 5, 5, 100, 20, 'Exits the script.') G.buttons.load = Draw.PushButton('Load Image', BUTTON_LOAD, 5, 25, 100, 20, 'Loads an image.') G.buttons.zoom = Draw.Number('Zoom', BUTTON_ZOOM, 5, 45, 100, 20, G.zoom, ZOOM_MIN, ZOOM_MAX, 'Adjusts image zoom.') # paint camera-specific stuff if haveCamera: G.buttons.fullopt = Draw.Toggle('Full Optimization', BUTTON_FULLOPT, 110, 5, 120, 20, G.fullopt, 'Full or partial optimization.') G.buttons.coplanar = Draw.Toggle('Coplanar', BUTTON_COPLANAR, 110, 25, 120, 20, G.coplanar, 'Coplanar or non-coplanar target.') # Origin offset is not currently working in the Tsai module. # It should be brought back here when it is. #G.buttons.ofsz = Draw.Number('OfsZ', BUTTON_OFSZ, 110, 50, 100, 20, G.ofsz, OFS_MIN, OFS_MAX, 'Z origin offset.') #G.buttons.ofsy = Draw.Number('OfsY', BUTTON_OFSY, 110, 70, 100, 20, G.ofsy, OFS_MIN, OFS_MAX, 'Y origin offset.') #G.buttons.ofsx = Draw.Number('OfsX', BUTTON_OFSX, 110, 90, 100, 20, G.ofsx, OFS_MIN, OFS_MAX, 'X origin offset.') G.buttons.calibrate = Draw.PushButton( 'Calibrate', BUTTON_CALIBRATE, 235, 5, 100, 20, 'Calibrates the selected camera.') # paint empty-specific stuff elif haveEmpty and (G.mode == MODE_NORMAL): if emptyHasCoords: G.buttons.delete = Draw.PushButton( 'Delete', BUTTON_DELETE, 110, 5, 100, 20, 'Adds an image calibration coordinate.') else: G.buttons.add = Draw.PushButton( 'Add', BUTTON_ADD, 110, 5, 100, 20, 'Removes an image calibration coordinate.')