158 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			158 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import _Blender.World as _World | ||
|  | 
 | ||
|  | 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 | ||
|  | 
 | ||
|  | 
 |