| 
									
										
										
										
											2003-02-06 03:30:25 +00:00
										 |  |  | import _Blender.World as _World | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import shadow | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _getAmbCol(obj): | 
					
						
							|  |  |  | 	return obj.ambR, obj.ambG, obj.ambB  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _setAmbCol(obj, rgb): | 
					
						
							|  |  |  | 	obj.ambR, obj.ambG, obj.ambB = rgb | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _getZenCol(obj): | 
					
						
							|  |  |  | 	return obj.zenR, obj.zenG, obj.zenB  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _setZenCol(obj, rgb): | 
					
						
							|  |  |  | 	obj.zenR, obj.zenG, obj.zenB = rgb | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _getHorCol(obj): | 
					
						
							|  |  |  | 	return obj.horR, obj.horG, obj.horB  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _setHorCol(obj, rgb): | 
					
						
							|  |  |  | 	obj.horR, obj.horG, obj.horB = rgb | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _setMist(obj, mist): | 
					
						
							|  |  |  | 	obj.mistStart = mist.start | 
					
						
							|  |  |  | 	obj.mistDepth = mist.depth | 
					
						
							|  |  |  | 	obj.mistHeight = mist.height | 
					
						
							|  |  |  | 	obj.mistType = mist.type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _getMist(obj): | 
					
						
							|  |  |  | 	mist = Mist() | 
					
						
							|  |  |  | 	mist.start = obj.mistStart | 
					
						
							|  |  |  | 	mist.depth = obj.mistDepth  | 
					
						
							|  |  |  | 	mist.height = obj.mistHeight | 
					
						
							|  |  |  | 	mist.type = obj.mistType  | 
					
						
							|  |  |  | 	return mist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class World(shadow.hasIPO, shadow.hasModes): | 
					
						
							|  |  |  | 	"""Wrapper for Blender World DataBlock
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  |   Attributes | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |     horCol       -- horizon colour triple '(r, g, b)' where r, g, b must lie | 
					
						
							|  |  |  |                 in the range of [0.0, 1.0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     zenCol       -- zenith colour triple | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ambCol       -- ambient colour triple | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	exposure     -- exposure value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     mist         -- mist structure, see class Mist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     starDensity  -- star density (the higher, the more stars) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     starMinDist  -- the minimum distance to the camera | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     starSize     -- size of the stars | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     starColNoise -- star colour noise | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     gravity      -- The gravity constant (9.81 for earth gravity) | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	SkyTypes   = {'blend' : 1, | 
					
						
							|  |  |  | 	              'real'  : 2, | 
					
						
							|  |  |  | 	              'paper' : 4, | 
					
						
							|  |  |  | 	             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Modes      = {'mist' : 1, | 
					
						
							|  |  |  | 	              'stars'  : 2, | 
					
						
							|  |  |  | 	             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_emulation = {'Expos' : "exposure", | 
					
						
							|  |  |  | 	              'HorR' : "horR", | 
					
						
							|  |  |  | 	              'HorG' : "horG", | 
					
						
							|  |  |  | 	              'HorB' : "horB", | 
					
						
							|  |  |  | 	              'ZenR' : "zenR", | 
					
						
							|  |  |  | 	              'ZenG' : "zenG", | 
					
						
							|  |  |  | 	              'ZenB' : "zenB", | 
					
						
							|  |  |  | 	              'StarDi' : "starDensity", | 
					
						
							|  |  |  | 	              'StarSi' : "starSize", | 
					
						
							|  |  |  | 	              'MisSta' : "mistStart", | 
					
						
							|  |  |  | 	              'MisDi' : "mistDepth", | 
					
						
							|  |  |  | 	              'MisHi' : "mistHeight", | 
					
						
							|  |  |  |                  }  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_setters = {'horCol' : _getHorCol, | 
					
						
							|  |  |  | 	            'zenCol' : _getZenCol, | 
					
						
							|  |  |  | 	            'ambCol' : _getAmbCol, | 
					
						
							|  |  |  | 	            'mist' : _getMist, | 
					
						
							|  |  |  | 	           }  			 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_setters = {'horCol' : _setHorCol, | 
					
						
							|  |  |  | 	            'zenCol' : _setZenCol, | 
					
						
							|  |  |  | 	            'ambCol' : _setAmbCol, | 
					
						
							|  |  |  | 	            'mist' : _setMist, | 
					
						
							|  |  |  | 	           }  			 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def getSkyType(self): | 
					
						
							|  |  |  | 		"""Returns a list of the set Sky properties, see setSkyType()""" | 
					
						
							|  |  |  | 		list = [] | 
					
						
							|  |  |  | 		for k in self.SkyTypes.keys(): | 
					
						
							|  |  |  | 			i = self.SkyTypes[k] | 
					
						
							|  |  |  | 			if self._object.skyType & i: | 
					
						
							|  |  |  | 				list.append(k) | 
					
						
							|  |  |  | 		return list		 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def setSkyType(self, *args): | 
					
						
							|  |  |  | 		"""Set the sky type. This function takes a variable number
 | 
					
						
							|  |  |  | of string arguments of ['blend', 'real', 'paper']"""
 | 
					
						
							|  |  |  |  		flags = 0 | 
					
						
							|  |  |  | 		try: | 
					
						
							|  |  |  | 			for a in args: | 
					
						
							|  |  |  | 				flags |= self.SkyTypes[a] | 
					
						
							|  |  |  | 		except: | 
					
						
							|  |  |  | 			raise TypeError, "mode must be one of" % self.SkyTypes.keys() | 
					
						
							|  |  |  | 		self._object.skyType = flags | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Mist: | 
					
						
							|  |  |  | 	"""Mist structure
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Attributes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     start  -- start of the mist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     depth  -- depth of the "mist wall" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     height -- height of the mist layer | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Types = { 'quadratic' : 0, | 
					
						
							|  |  |  | 	          'linear'    : 1, | 
					
						
							|  |  |  | 	          'sqrt'      : 2, | 
					
						
							|  |  |  | 	        } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __init__(self): | 
					
						
							|  |  |  | 		self.start = 0.0 | 
					
						
							|  |  |  | 		self.depth = 0.0 | 
					
						
							|  |  |  | 		self.height = 0.0 | 
					
						
							|  |  |  | 		self.type = 0 | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 	def setType(self, name): | 
					
						
							|  |  |  | 		"""Set the Mist type (one of ['quadratic', 'linear', 'sqrt'])""" | 
					
						
							|  |  |  | 		try: | 
					
						
							|  |  |  | 			t = self.Types[name] | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			raise TypeError, "type must be one of %s" % self.Types.keys() | 
					
						
							|  |  |  | 		self.type = t | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def getType(self): | 
					
						
							|  |  |  | 		"""Returns the Mist type as string. See setType()""" | 
					
						
							|  |  |  | 		for k in self.Types.keys(): | 
					
						
							|  |  |  | 			if self.Types[k] == self.type: | 
					
						
							|  |  |  | 				return k | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |