def save_mdl(sMeshFilename): global sFilename sFilename = sMeshFilename es = ExportSelection() Draw.Register(es.gui, es.event, es.button_event) # registering the 3 callbacks
def register(self,classObject,Object=None,**kw): #need the object if Object is None : Object = classObject() #and this should be a dialog Object.setgui("") if Object.gui is None : return Draw.Register(Object.gui.CreateLayout, Object.gui.CoreMessage, Object.gui.Command)
def ev(evt, val): # this is a callback for Draw.Register() global R, G, B, A # it handles input events if evt == Draw.ESCKEY or evt == Draw.QKEY: Draw.Exit() # this quits the script elif evt == Draw.LEFTMOUSE: R = 1 - R elif evt == Draw.MIDDLEMOUSE: G = 1 - G elif evt == Draw.RIGHTMOUSE: B = 1 - B else: Draw.Register(show_win, ev, None)
Draw.Redraw(1) def button_event(evt): # the function to handle Draw Button events global mymsg, toggle if evt == 1: mymsg = "You pressed the toggle button." toggle = 1 - toggle Draw.Redraw(1) def gui(): # the function to draw the screen global mystring, mymsg, toggle if len(mystring) > 90: mystring = "" BGL.glClearColor(0,0,1,1) BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) BGL.glColor3f(1,1,1) Draw.Toggle("Toggle", 1, 10, 10, 55, 20, toggle,"A toggle button") BGL.glRasterPos2i(72, 16) if toggle: toggle_state = "down" else: toggle_state = "up" Draw.Text("The toggle button is %s." % toggle_state, "small") BGL.glRasterPos2i(10, 230) Draw.Text("Type letters from a to z, ESC to leave.") BGL.glRasterPos2i(20, 200) Draw.Text(mystring) BGL.glColor3f(1,0.4,0.3) BGL.glRasterPos2i(340, 70) Draw.Text(mymsg, "tiny") Draw.Register(gui, event, button_event) # registering the 3 callbacks
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) Draw.Register(draw, event, bevent)
glVertex2i(x + width, y) glVertex2i(x + width, y - height) glVertex2i(x, y - height) glEnd() def rectFill(x, y, width, height): glBegin(GL_POLYGON) glVertex2i(x, y) glVertex2i(x + width, y) glVertex2i(x + width, y - height) glVertex2i(x, y - height) glEnd() Draw.Register(draw, event, button_event) #*********************************************** #*********************************************** # EXPORTER #*********************************************** #*********************************************** class xExport: def __init__(self, filename): self.file = open(filename, "w") #********************************************************************************************************************************************* #*********************************************** #Select Scene objects
import Blender from Blender import Draw,BGL import os os.system("cls") mystring = "" def event(evt, val): # эта функция обрабатывает прерывания от клавиатуры и мыши if evt == Draw.ESCKEY: Draw.Exit() # выход из скрипта return global mystring#, mymsg if Draw.AKEY <= evt <= Draw.ZKEY: if val==0: #чтобы буква не печаталась два раза mystring += chr(evt) # это срабатывает при нажатие на символьную клавишу. chr(evt) преобразует символ клавиши в соответствующий символ Draw.Redraw(1) def gui(): # function drawing in screen BGL.glRasterPos2i(10, 230) # установка позиции Draw.Text("Type letters from a to z, ESC to leave.") BGL.glRasterPos2i(20, 200) Draw.Text(mystring) Draw.Register(gui, event, None) # регистрация функций и начало основного цикла
def __init__(self): binPath = LoadPath() binAuto = int(binPath == '') if os.name == 'nt': binAuto = 0 self.buttonFunc = {} self.bBinPathAuto = ButtonWrapper('Auto', 3, 'toggle', initial=binAuto) self.bBinPathManual = ButtonWrapper('Manual', 4, 'toggle', initial=int(not binAuto)) def fBinToggle(evt): if evt is 4: self.bBinPathAuto.val = (self.bBinPathAuto.val + 1) % 2 else: self.bBinPathManual.val = (self.bBinPathManual.val + 1) % 2 self.buttonFunc[3] = self.buttonFunc[4] = fBinToggle self.bBinPath = ButtonWrapper( 'PandaBinPath:', 0, 'string', 'The path that contains panda tool binaries (e.g. pview)', binPath, length=300) self.bBinPathSel = ButtonWrapper('Select', 5, 'push') if os.name == 'nt' and not binPath: envpath = os.getenv('PATH') pathdirs = envpath.split(os.pathsep) candidates = filter( lambda x: x.lower().find('panda3d') != -1 and x.lower().find( 'bin') != -1, pathdirs) if candidates: self.bBinPath.val = candidates[0] self.bLaunch = ButtonWrapper('Launch Chicken', 6, 'push') def fLaunch(dummy): if self.error is False: print os.path.join(Blender.Get('scriptsdir'), EXPORTER_NAME) Blender.Run( os.path.join(Blender.Get('scriptsdir'), EXPORTER_NAME)) else: if self.error is True: word = "corrected" elif self.error is None: word = "validated" Draw.PupMenu( 'Launch Error%s|Cannot launch until configuration is %s' % ('%t', word)) self.buttonFunc[6] = fLaunch self.bCheck = ButtonWrapper('Check Configuration', 7, 'push') def fCheck(dummy): self.msg = [] if self.bBinPathAuto.val: bin = '' else: bin = self.bBinPath.val self.error = CheckPath(bin, self.msg) if self.error is False: d = {} if self.bBinPathManual.val: d['PandaBinPath'] = bin else: d['PandaBinPath'] = '' Registry.SetKey('Chicken', d, True) else: Draw.PupMenu('Configuration Errors%t|' + '|'.join(self.msg)) print self.msg self.buttonFunc[7] = fCheck self.pathMap = {5: self.bBinPath} def fPathSelector(id): def updatePath(fn): n = fn.rfind(os.sep) fn = fn[0:n] if os.path.isdir(fn): self.pathMap[id].val = fn Window.FileSelector(updatePath, "Select Path", self.pathMap[id].val) self.buttonFunc[5] = fPathSelector self.error = None self.msg = [] Draw.Register(self.draw, self.event, self.button)
global a a[0] += 2 a[1] += 1 # print 'step',a if a[1] > 100: Draw.Exit() time.sleep(0.1) Draw.Redraw(1) def event(evt, val): # function to handle input events if evt == Draw.ESCKEY: Draw.Exit() # exit when user presses ESC return def gui(): # function to draw the screen global a glClearColor(0, 0, 0, 1) # background color glClear(BGL.GL_COLOR_BUFFER_BIT) # clear image buffer glColor3f(1.0, 0, 0) glLineWidth(5) glBegin(GL_LINES) glVertex2i(10, a[0]) glVertex2i(130, a[1]) glEnd() changeA() Draw.Register(gui, event, None) # registering the 3 callbacks
"%s already exists. Find it in the Text Editor" % slName) else: sl = Text.New(slName) sl.write("""<!-- this describes some i3d properties of the material it is linked to via Script Links. the name of this text file must end with ".i3d". all attribute values starting with "assets/" are added to the Files Node and replaced with the id. in order for file references to work the path must start with "assets/". --> <i3D> <Materials> <Material customShaderId="assets/exampleCustomShader.xml"> <Custommap name="colorRampTexture" fileId="assets/exampleCustomMap.png"/> <CustomParameter name="exampleParameter" value="2 0 0 0"/> </Material> </Materials> </i3D>""") activeMat.addScriptLink(sl.getName(), "FrameChanged") guiPopup = Draw.PupMenu( "Check ScriptLink panel and Text Editor for %s" % sl.getName()) def selectExportFile(file): global exportPath exportPath.val = file #print(file) if __name__ == '__main__': Draw.Register(gui, event, buttonEvt)
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') Draw.Register(GUI, event, bevent)
import Blender from Blender import Draw mystring = "" def event(evt, val): global mystring if not val: # val = 0: if evt in [Draw.LEFTMOUSE, Draw.MIDDLEMOUSE, Draw.RIGHTMOUSE]: mymsg = "You released a mouse button." print 'msg', mymsg if evt == Draw.ESCKEY: Draw.Exit() Draw.Register(None, event, None)
applyTarget(morphFactor.val) elif event == 3: symm(0) elif event == 4: reset() elif event == 5: symm(1) elif event == 6: Window.FileSelector(saveTarget, "Save Target", fileToSaveName) elif event == 30: Window.FileSelector(scanReg, "Load scan") elif event == 31: Window.FileSelector(buildSVDdb, "Build scan->mh db", "head_vertices.dat") elif event == 32: Window.FileSelector(scan2mh, "Do scan->mh", "head_vertices.dat") elif event == 33: Window.FileSelector(saveSelVerts, "Save verts", "head_vertices.dat") elif event == 40: Window.FileSelector(regularise.loadTargetBase, "Load regularise db", "head_base.dat") elif event == 41: regulariseMesh() elif event == 42: Window.FileSelector(buildRegulariseDb, "Build regularise db", "head_vertices.dat") Draw.Draw() Draw.Register(draw, event, buttonEvents)
elif evt == Draw.RIGHTCTRLKEY: r_ctrl_key_pressed = val elif evt == Draw.RETKEY and val and (l_ctrl_key_pressed or r_ctrl_key_pressed): begin_export() l_ctrl_key_pressed = 0 r_ctrl_key_pressed = 0 def button_events(evt): if evt == 0: Draw.Exit() elif evt == 1: begin_export() elif evt == 0x11: Blender.Window.FileSelector(set_gmdc_filename, 'Select', Blender.sys.makename(ext='.gmdc')) #------------------------------------------------------------------------------- # set default values for GUI elements and run event loop str_gmdc_filename = Draw.Create("") str_resource_name = Draw.Create("") btn_name_suffix = Draw.Create(1) btn_export_rigging = Draw.Create(0) btn_export_tangents = Draw.Create(0) btn_export_bmesh = Draw.Create(0) btn_save_log = Draw.Create(0) btn_use_obj_props = Draw.Create(0) menu_export_morphs = Draw.Create(0) str_bmesh_name = Draw.Create("b_mesh") Draw.Register(draw_gui, event_handler, button_events)
if bone not in bones: bones.append(bone) for bone in bones: dataref = bone.name.split('.')[0] # split off index index = None l = dataref.find('[') if l != -1: i = dataref[l + 1:-1] if dataref[-1] == ']': try: index = int(i) except: pass dataref = dataref[:l] (dataref, v, l) = getvals(bone.name, dataref, index) datarefs.append(dataref) indices.append(index) vals.append(v) loops.append(l) gethideshow() #print armature, bones, bonecount, datarefs, indices, vals, loops #print hideshow, hideorshow, hideshowindices, hideshowfrom, hideshowto vertical = (Window.GetAreaSize()[1] > Window.GetAreaSize()[0]) Draw.Register(gui, event, bevent)
def start_import_gui(): Draw.Register(import_gui, import_gui_event, import_gui_buttonevent)
def delmap(x): del G.coordmap[x.getName()] x.select(False) map(delmap, G.selection) Window.RedrawAll() elif button == BUTTON_CALIBRATE: Window.WaitCursor(True) G.last_camera = G.selection[0] calibrate() ############### # ENTRY POINT # ############### # remove any spurious custom script link that may be # hanging around from a previous invokation removeCustomScriptLink() # add a new script link addCustomScriptLink() # read any previous coordinate data that has been # stored readDataFromRegistry() # register event handlers Draw.Register(renderGUI, eventHandler, buttonEventHandler)
def main(): Draw.Register(gui, event, bevent)
if error != '': Draw.PupMenu('Error%t|' + error) else: Window.RedrawAll() elif evt == B_EVENT_RELOAD: edl_reload() Draw.Redraw() elif evt == B_EVENT_FILESEL_EDL: filename = PREF['filename'].val if not filename: filename = Blender.sys.join(Blender.sys.expandpath('//'), '*.edl') Window.FileSelector(edl_set_path, 'Select EDL', filename) elif evt >= B_EVENT_FILESEL: reel_keys = edl_reel_keys() reel_key = reel_keys[evt - B_EVENT_FILESEL] filename = REEL_UI[reel_key].filename_but.val if not filename: filename = Blender.sys.expandpath('//') PREF['reel_act'] = reel_key # so file set path knows which one to set Window.FileSelector(edl_set_path_reel, 'Reel Media', filename) if __name__ == '__main__': Draw.Register(edl_draw, edl_event, edl_bevent) edl_reload()
B = Draw.Create(0) block = [] block.append(("X1= ", X0, 0, 1000)) block.append(("Y1= ", Y0, 0, 1000)) block.append(("X2= ", X1, 0, 1000)) block.append(("Y2= ", Y1, 0, 1000)) block.append(("A= ", A, -1000, 1000)) block.append(("B= ", B, -1000, 1000)) retVal = Draw.PupBlock("LINE'S POINTS", block) xy0[0] = X0.val xy0[1] = Y0.val xy1[0] = X1.val xy1[1] = Y1.val a = A.val b = B.val #LINE point0[0] = 1 point0[1] = a * point0[0] + b point1[1] = 1000 point1[0] = (point1[1] - b) / a yes = 1 return Draw.Register(gui, event, button_event)
if sob: DumpData() if LoadSettings(sob.name): ob, me = sob, sob.data #----------------------------------------------------------------------- def ManageWidgets(evt): global dwidget, ob, me if evt == 10000: UpdateSlider(dwidget['h']) if evt == 10001: UpdateSlider(dwidget['ang']) if evt == 10002: UpdateSlider(dwidget['seg']) if evt == 10003: UpdateSlider(dwidget['brad']) if evt == 10004: UpdateSlider(dwidget['turn']) if evt == 10005: UpdateToggle(dwidget['tface']) if evt == 10006: UpdateToggle(dwidget['bface']) if evt == 10007: if dwidget['turn'][1] == 360.0: Draw.PupMenu(dwidget['closed'][3]) else: UpdateToggle(dwidget['closed']) if evt == 10008: Terminate() if evt == 10009: NewObject(1) if evt == 10010: SelectedObject() if evt == 10011: CopyFromObject() if ob and me: UpdateMesh() #----------------------------------------------------------------------- # called at script start Draw.Register(ManageDisplay, ManageEvent, ManageWidgets) InitDataFile() DeselectAllObjects()
myFace() glTranslatef(0,0,-20) glRotatef(180,1,0,0) glColor3f(0,1,1) myFace() def gui(): glClearColor(0,0,0,1) glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) glEnable(GL_DEPTH_TEST) glViewport(200,200,500,500) glMatrixMode(GL_PROJECTION) glLoadIdentity() # glFrustum(-100,100,-100,100,30,500) glOrtho(-20,20,-20,20,-500,500) v1=1/sqrt(3) v2=1/sqrt(2) v3=v1*v2 v4=v1/v2 buf=Buffer(GL_FLOAT,16,[v3,v2,v1,0,v3,-v2,v1,0,-v4,0,v1,0,0,0,0,1]) # glMultMatrixf(buf) glTranslatef(0,0,-50) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glRotatef(a,0,0,1) glMultMatrixf(buf) myCube() changeA() Draw.Register(gui,key,None)
glBegin(GL_LINE_LOOP) # begin a vertex-data list glVertex2i(46, 92) glVertex2i(120, 92) glVertex2i(120, 115) glVertex2i(46, 115) glEnd() # close this list glColor3f(0.35, 0.18, 0.92) # change default color again glBegin(GL_POLYGON) # another list, for a polygon glVertex2i(315, 292) glVertex2i(412, 200) glVertex2i(264, 256) glEnd() Draw.Redraw(1) # make changes visible. def ev(evt, val): # this is a callback for Draw.Register() global R, G, B, A # it handles input events if evt == Draw.ESCKEY or evt == Draw.QKEY: Draw.Exit() # this quits the script elif evt == Draw.LEFTMOUSE: R = 1 - R elif evt == Draw.MIDDLEMOUSE: G = 1 - G elif evt == Draw.RIGHTMOUSE: B = 1 - B else: Draw.Register(show_win, ev, None) Draw.Register(show_win, ev, None) # start the main loop
def gui(): glClearColor(0, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT) glLineWidth(1) glColor3f(1.0, 0, 0) print len(lst) - 1 for i in range(0, len(lst) - 1): mtr = Matrix([1, lst[i][0], lst[i][0]**2, lst[i][0]**3], [1, lst[i + 1][0], lst[i + 1][0]**2, lst[i + 1][0]**3], [0, 1, 2 * lst[i][0], 3 * lst[i][0]**2], [0, 1, 2 * lst[i + 1][0], 3 * lst[i + 1][0]**2]) b = Vector([lst[i][1], lst[i + 1][1], z[i], z[i + 1]]) a = mtr.invert() * b print a print mtr glBegin(GL_LINE_STRIP) for x in range(lst[i][0], lst[i + 1][0]): y = a[0] + x * a[1] + (x**2) * a[2] + (x**3) * a[3] print "x=", x, " y=", y glVertex2f(x, y) glEnd() Draw.Register(gui, event, None)
def run(self): super(Application, self).run() Draw.Register(self.redraw, self.event_manager.key_event, self.event_manager.element_event)