# RIF file generator class

**URL:** <https://discourse.radiance-online.org/t/rif-file-generator-class/1962>\
**Category:** radiance-general\
**Created:** [April 16, 2011, 8:45pm UTC](https://discourse.radiance-online.org/t/rif-file-generator-class/1962 "2011-04-16T20:45:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![R\_Fritz1](https://discourse.radiance-online.org/letter_avatar_proxy/v4/letter/r/b3f665/32.png) [@R\_Fritz1](https://discourse.radiance-online.org/u/R_Fritz1)\
**Post date:** [April 16, 2011, 8:45pm UTC](https://discourse.radiance-online.org/t/rif-file-generator-class/1962/1 "2011-04-16T20:45:44Z")

</div>

I found this little Python classlet useful when I was running a heap of renderings and thought someone else might, too. Take it as a fragment, suitable for modification.

#!/usr/bin/python  
# -\*- coding: utf-8 -\*-

from datetime import datetime  
import sys  
import subprocess

RIFFMT ="""# {note}  
materials = {matfiles}  
scene = {scenefiles}

ZONE = {zone} {bounds}  
VARIABILITY = {var}  
QUALITY = {qual}  
INDIRECT = {ind}  
DETAIL = {detail}  
AMBFILE = {ambfile}

{views}  
"""

class radrif:  
&nbsp;&nbsp;&nbsp;&nbsp;def \_\_init\_\_(  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self, matfiles, scenefiles,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;note = None,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zone = "E", bounds = None,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var = "H", qual = "M", ind = 0, detail = "M",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ambfile = "",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;views = ""):

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if note is None:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;note = datetime.today().ctime()  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if zone[0].upper() not in "EI":  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise Exception("Zone must begin with E or I", zone)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if bounds is None:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bounds = self.getbounds(scenefiles)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.matfiles = matfiles  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scenefiles = scenefiles  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.note = note  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.zone = zone  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.bounds = bounds  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.var = var  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.qual = qual  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ind = ind  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.detail = detail  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ambfile = ambfile  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.views = views

&nbsp;&nbsp;&nbsp;&nbsp;def \_\_str\_\_(self):  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return RIFFMT.format(\*\*self.\_\_dict\_\_)

&nbsp;&nbsp;&nbsp;&nbsp;def getbounds(self,scenefiles):  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"""Get the bounding box of a model"""  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd = ['getbbox', '-h'] + scenefiles.split()  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIPE = subprocess.PIPE  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getbb = subprocess.Popen(cmd, stdout = PIPE, stderr = PIPE)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(out,err) = getbb.communicate()  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if getbb.returncode != 0:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise Exception(  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Can\'t get bounds of {0}, error {1}: {2}'.format(  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scenefiles, getbb.returncode, err))  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return out

def main():  
&nbsp;&nbsp;&nbsp;&nbsp;print str(radrif(sys.argv[1],sys.argv[2]))

if \_\_name\_\_ == "\_\_main\_\_":  
&nbsp;&nbsp;&nbsp;&nbsp;main()

> **···**
>
> --  
> Randolph M. Fritz
