import Blender from Blender import Scene, Draw, Text from Blender.sys import * import os #---------------------------------------------------------- def WriteBlenderText(metadatafile, imagename, desc): try: metadata = Text.Get(metadatafile+".txt") metadata.write("%s -> %s\n" % (imagename, desc)) except: newfile = Text.New(metadatafile+".txt") newfile.write("#For the %s.blend file, the images have been saved as follows \n\n" % (metadatafile)) newfile.write("%s -> %s\n" % (imagename, desc)) def WriteToFile(file, imagename, desc): basepath = dirname(Blender.Get('filename')) imagesdir = "images" metadatafile = basepath+sep+imagesdir+sep+file+sep+file+'.txt' outfile = None if not exists(metadatafile): outfile = open(metadatafile, "w+") try: outfile.write("#For the %s.blend file, the images have been saved as follows \n\n" % (file)) outfile.write("%s -> %s\n" % (imagename, desc)) finally: outfile.close else: outfile = open(metadatafile, "a+") try: outfile.write("%s -> %s\n" % (imagename, desc)) finally: outfile.close() def UpdateMetaData(metadatafile, imagename, desc): #WriteBlenderText(metadatafile, imagename, desc) WriteToFile(metadatafile, imagename, desc) def SetTempDirectory(filedir): tempdir = filedir+sep+"tmp"+sep if not exists(tempdir): os.mkdir(tempdir) print "The OS gave birth to %s" % (tempdir) Blender.Set('tempdir', tempdir) def SetRenderDirectory(context, filename): basepath = dirname(filename) fileimagedir = splitext(basename(filename))[0] relativepath = "images"+sep+fileimagedir+sep abspath = basepath+sep+relativepath if not exists(abspath): os.makedirs(abspath) savepath = "//"+relativepath context.setRenderPath(savepath) def InitializePaths(context): filename = Blender.Get('filename') SetTempDirectory(dirname(filename)) SetRenderDirectory(context, filename) def HandlePreRender(context): InitializePaths(context) context.setImageType(Scene.Render.PNG) Scene.Render.EnableDispWin() Scene.Render.SetRenderWinPos(['sw']) def HandlePostRender(context): #sleep(2000) Scene.Render.CloseRenderWindow() justname = basename(splitext(Blender.Get('filename'))[0]) imagename = "%s_%s%s" % (justname, str(time()), ".png") savedesc = Draw.PupStrInput("???:", "render", 100) UpdateMetaData(justname, imagename, savedesc) context.saveRenderedImage(imagename) #---------------------------------------------------------- event = Blender.event if not Blender.Get('filename'): name = "WARNING: renderscript.py%t| You must save the file before you use SmartRender." result = Draw.PupMenu(name) else: if Blender.link: context = Scene.GetCurrent().getRenderingContext() if event == "Render": HandlePreRender(context) elif event == "PostRender": HandlePostRender(context) else: name = "WARNING: renderscript.py%t| You must link this script to a Scene's Render event!!!" result = Draw.PupMenu(name)