#!BPY """ Name: 'GeoCast Export' Blender: 236 Group: 'Export' Tip: 'Export sequence of depth images of an object from the current camera, aka GeoCast sequence. Uses OpenEXR' """ # D E T A I L S ###################################################### # Based on "Exporter or Automation Script", by Joshua E Seaver # By: Gernot Ziegler (orig code ) # Date: March 13th, 2005 # Ver: 0.1i #----------------------------------------------------- ###################################################### # L I C E N C E ###################################################### # (C) 2005 Gernot Ziegler, - released under Blender Artistic License - www.blender.org # (C) 2004 Joshua Seaver, - released under Blender Artistic License - www.blender.org # Release under the Blender Artistic Licence (BAL) # See www.blender.org # H I S T O R Y ###################################################### #TO DO ###################################################### # Throw error if no camera can be found # Detect frame range to render from Blender # Detect frame size to render from Blender. # D E P E N D E N C I E S ###################################################### # SETUP ###################################################### import Blender from Blender import Camera, NMesh, Scene, Object, Draw, Image, Material from Blender.BGL import * from Blender.Draw import * from Blender.Window import * from Blender.Image import * from Blender.Material import * from Blender.Scene import * from Blender.Scene.Render import * #from Blender.Noise import * # GLOBALS ###################################################### #All these below are used to draw the GUI YaFrayToggle = Create(0) RenderMenu = Create(1) PathTextbox = Create('/usr/tmp/') SizeLabel = Create('/usr/tmp') RenderPath = '/usr/tmp/' gsizeX = 256 gsizeY = 256 obi = 0 # C O M M O N F U N C T I O N S # M A I N S C R I P T ###################################################### # EXPORT OR MAIN EVENT ###################################################### def makeGeoCast(): print "\n" print "|| GeoCast exporter script V0.15\n" print "|| March 2005, Gernot Ziegler\n" global RenderPath print "Your renderpath is: ", RenderPath global gsizeX print "Your width is: ", gsizeX global gsizeY print "Your height is: ", gsizeY scene = Scene.GetCurrent() context = scene.getRenderingContext() Render.EnableDispWin() context.enableExtensions(1) context.setImageType(Render.OPENEXR) print "Frames/Second is:", context.framesPerSec() print "Start Frame is:", context.startFrame() print "End Frame is:", context.endFrame() context.imageSizeX(gsizeX) context.imageSizeY(gsizeY) myobj = Object.GetSelected() if myobj[0].getType() == 'Camera': # ccam = cur.getCurrentCamera() ccam = myobj[0] ccamdata = ccam.getData() print "Selected object is " + ccamdata.getName() else: print "FATAL: No camera selected !!" return ipodata = ccam.getIpo() # used to detect if camera's static ipostr = str(ipodata) clipend = ccamdata.getClipEnd() clipstart = ccamdata.getClipStart() if ccamdata.getType() == 0: # Perspective lens = ccamdata.getLens() else: scale = ccamdata.getScale() context.setRenderPath(RenderPath + ccam.getName() + "_") scene.setCurrentCamera(ccam) for framenr in range(1,40): context.startFrame(framenr) context.endFrame(framenr) context.renderAnim() Blender.Set('curframe',framenr) scene.update() cm = ccam.getMatrix() print "Cam Location is", loc = ccam.getLocation() infofilename = RenderPath + ccam.getName() + "_" + str(framenr).zfill(4) + ".info" FILE = open(infofilename, "w") print "Saving cam info to", infofilename FILE.write('GeoCast V0.15\n') if ipostr == 'None': FILE.write("StaticCamera\n") else: FILE.write("DynamicCamera\n") locstr = 'Pos %.02f %.02f %.02f\n' % loc print locstr FILE.write(locstr) viewslicestr = 'ViewSlice FODAngle %.02f Size %.02f\n' % (145, 1000) print viewslicestr FILE.write(viewslicestr) cammodelmat_str = 'ModelviewMatrix\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n' % (cm[0][0], cm[0][1], cm[0][2], cm[0][3], cm[1][0], cm[1][1], cm[1][2], cm[1][3], cm[2][0], cm[2][1], cm[2][2], cm[2][3], cm[3][0], cm[3][1], cm[3][2], cm[3][3]) FILE.write(cammodelmat_str) print cammodelmat_str if ccamdata.getType() == 0: # Perspective clipstr = 'DataProject BlenderPerspective Aspect %.02f Lens %.04f ClipRange %.02f %.02f\n' % (1.0, lens, clipstart, clipend) print clipstr FILE.write(clipstr) else: # Orthogonal clipstr = 'DataProject Ortho WindowSize %.02f %.02f ProjRange %.02f %.02f\n' % (scale, scale, clipstart, clipend) print clipstr FILE.write(clipstr) # camprojmat_str = 'ProjectionMatrix\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n' % (cpmat[0][0], cpmat[0][1], cpmat[0][2], cpmat[0][3], cpmat[1][0], cpmat[1][1], cpmat[1][2], cpmat[1][3], cpmat[2][0], cpmat[2][1], cpmat[2][2], cpmat[2][3], cpmat[3][0], cpmat[3][1], cpmat[3][2], cpmat[3][3]) # FILE.write(camprojmat_str) # print camprojmat_str rangestr = 'ZDataRange 0.0 1.0\n' print rangestr FILE.write(rangestr) FILE.close() Render.CloseRenderWindow() print "@@@@@@@@@@ END SCRIPT @@@@@@@@@@@@@@\n" #print "done. here are frames per sec and current frame: " #print context.framesPerSec() #print context.currentFrame() ########################################################## #GUI Created using RipSting's Blender-Python GUI designer# #Download at Http://oregonstate.edu/~dennisa/Blender/BPG/# ########################################################## def draw(): #-- Button numbers relate to z-index, from left, from bottom, width and height global exitButton, YaFrayToggle, RenderMenu, SizeLabel, makeMVVButton, PathTextbox glClearColor(0.30, 0.4, 0.4, 0.0) glClear(GL_COLOR_BUFFER_BIT) #geologo = Blender.Image.Load("/usr/src/geomerge/blender/geofront_logo.png") #geologo_texid = geologo.glLoad() #glBindTexture(GL_TEXTURE_2D, geologo_texid) glMatrixMode(GL_PROJECTION) #print "Image from", geologo.getFilename() #print "loaded to obj", geologo.getName() glPushMatrix() glLoadIdentity() glMatrixMode(GL_MODELVIEW) glPushMatrix() glLoadIdentity() glColor4f(0.5, 0.5, 0.5,1) glEnable(GL_TEXTURE_2D) glBegin(GL_QUADS) glTexCoord2f(0,0) glVertex2f(0,0) glTexCoord2f(0,1) glVertex2f(0,1) glTexCoord2f(1,1) glVertex2f(1,1) glTexCoord2f(1,0) glVertex2f(1,0) glEnd() glPopMatrix() glMatrixMode(GL_PROJECTION) glPopMatrix() glMatrixMode(GL_MODELVIEW) glColor3f(1.000, 1.000, 1.000) glRasterPos2i(8, 240) Text('GeoCast File Format: Camera Exporter') glRasterPos2i(8, 220) Text('V0.15, March 2005') glRasterPos2i(8, 200) Text('Check your console for errors & status.') glColor3f(0.000, 0.000, 0.000) glRasterPos2i(8, 170) Text('Export path:') PathTextbox = String('', 3, 8, 135, 225, 23, PathTextbox.val, 512, 'Output path for image sequence') #YaFrayToggle = Toggle('Use Yafray Render', 4, 8, 633, 100, 23, YaFrayToggle.val, 'Depress to toggle to Yafray') glRasterPos2i(8, 110) Text('Export Size:') RenderMenu = Menu('Export Size|256x256 %x1|512x512 %x2|1024 x 1024 %x3', 5, 8, 70, 225, 30, RenderMenu.val, 'Size of all output images') Button('Create GeoCast sequence', 2, 8, 10, 125, 30, 'Click to execute script') Button('Quit', 1, 150, 10, 75, 30, 'Exit script') def event(evt, val): if (evt== QKEY and not val): Exit() def bevent(evt): global gsizeX global gsizeY global RenderPath #CFGFILE = open(".geomerge_export", "r") #if CFGFILE: ## CFGFILE.read(RenderPath) # print "found valid config file !" # CFGFILE.close() if evt == 1: #exitButton Exit() elif evt == 4: #YaFrayToggle setRenderer(YAFRAY) # other choice is setRenderer(INTERN) elif evt == 5: #RenderMenu if RenderMenu.val == 1: #First Item gsizeX = 256 gsizeY = 256 elif RenderMenu.val == 2: #Second Item gsizeX = 512 gsizeY = 512 elif RenderMenu.val == 3: #Third Item gsizeX = 1024 gsizeY = 1024 elif evt == 2: #makeMVVButton if RenderMenu.val == 1: #First Item gsizeX = 256 gsizeY = 256 elif RenderMenu.val == 2: #Second Item gsizeX = 512 gsizeY = 512 elif RenderMenu.val == 3: #Third Item gsizeX = 1024 gsizeY = 1024 RenderPath = PathTextbox.val # here's the test! makeGeoCast() FILE = open(".geomerge_export", "w") FILE.write(RenderPath) FILE.close() Blender.Redraw() Register(draw, event, bevent)