1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
#############################################################
## ##
## Copyright (c) 2003-2011 by The University of Queensland ##
## Earth Systems Science Computational Centre (ESSCC) ##
## http://www.uq.edu.au/esscc ##
## ##
## Primary Business: Brisbane, Queensland, Australia ##
## Licensed under the Open Software License version 3.0 ##
## http://www.opensource.org/licenses/osl-3.0.php ##
## ##
#############################################################
import string
import os
import os.path
import itertools
from esys.lsm.vis import core
from PovRenderer import *
from Object import *
from Camera import *
import Color
class Renderer:
def __init__(self):
self.povRenderer = None
self.background = Background(color=Color.Colors.White)
self.camera = self.getDefaultCamera()
def getDefaultCamera(self):
return LightedCamera(posn=[0,0,-10], lookAt=[0,0,0])
def getCamera(self):
return self.camera
def setCamera(self, camera):
self.camera = camera
def getPovRenderer(self):
if (self.povRenderer == None):
self.povRenderer = PovRenderer()
return self.povRenderer
def setOffScreen(self, doOffScreen):
self.getPovRenderer().setOffScreen(doOffScreen)
def getOffScreen(self):
return self.getPovRenderer().getOffScreen()
def setInteractive(self, interactive):
self.getPovRenderer().setInteractive(interactive)
def getInteractive(self):
return self.getPovRenderer().getInteractive()
def setSize(self, size):
self.getPovRenderer().setSize(size)
def getSize(self):
return self.getPovRenderer().getSize()
def clear(self):
pass
def setBackground(self, color):
self.background = Background(color)
def getBackground(self):
return self.background
def getRendererObjectList(self):
return [self.getBackground(), self.getCamera()]
def getImageFormat(self, fileName):
return core.getFormatFromExtension(fileName)
def getObjectList(self):
return self.objectList
def setObjectList(self, objectList):
self.objectList = objectList
def writeSdl(self, f, objectList):
self.getCamera().setAspect(self.getSize())
for o in itertools.chain(self.getRendererObjectList(), objectList):
o.writeSdl(f)
f.write("\n")
def render(self, objectList, fileName = None, imageFormat = None):
if (fileName != None):
if (imageFormat == None):
imageFormat = self.getImageFormat(fileName)
self.getPovRenderer().setFileName(fileName, imageFormat)
f = self.getPovRenderer().openInput()
self.writeSdl(f, objectList)
self.getPovRenderer().closeInput()
class RenderDefaults(core.RenderDefaults):
pass
class Scene(core.Scene):
def __init__(self, renderDefaults=None):
self.renderer = None
core.Scene.__init__(self, renderDefaults)
self.initialise()
def getRenderer(self):
if (self.renderer == None):
self.renderer = Renderer()
return self.renderer
def setBackground(self, color):
self.getRenderer().setBackground(
Color.RgbColor(color[0],color[1],color[2],color.getName())
)
def getCamera(self):
return self.getRenderer().getCamera()
def setCamera(self, camera):
return self.getRenderer().setCamera(camera)
def clear(self):
core.Scene.clear(self)
self.getRenderer().clear()
def render(
self,
offScreen = None,
interactive = None,
fileName = None,
imageFormat = None,
size = None
):
(offScreen, size, interactive) = \
self.getRenderDefaults(offScreen, size, interactive)
self.getRenderer().clear()
self.getRenderer().setOffScreen(offScreen)
self.getRenderer().setInteractive(interactive)
self.getRenderer().setSize(size)
self.getRenderer().setObjectList(self.objectList)
self.getRenderer().render(self.objectList, fileName, imageFormat)
|