- Pontus Lidman contributed a new module: Blender.Key + access to key objects from NMesh, Lattice and Curve + docs (thanks and sorry for taking so long to check/commit the patch!) - Allowing EVENT spacehandlers to call the file selector (scriptlinks in general are not allowed, but this special case should be able to). Requested by Paolo Colombo (thanks!) - tiny doc update (Ken Hughes pointed an error in the space handlers example) I didn't have time to update the Key module to follow the current bpython design, will do that later and also test it better than I did.
		
			
				
	
	
		
			222 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Blender.Lattice module and the Lattice PyType object
 | |
| 
 | |
| """
 | |
| The Blender.Lattice submodule.
 | |
| 
 | |
| Lattice Object
 | |
| ==============
 | |
| 
 | |
| This module provides access to B{Lattice} object in Blender.
 | |
| 
 | |
| Example::
 | |
|   import Blender
 | |
|   from Blender import Lattice
 | |
|   from Blender.Lattice import *
 | |
|   from Blender import Object
 | |
|   from Blender import Scene
 | |
| 
 | |
|   myOb = Object.New('Lattice')
 | |
|   myLat = Lattice.New()
 | |
|   myLat.setPartitions(5,5,5)
 | |
|   myLat.setKeyTypes(LINEAR, CARDINAL, BSPLINE)
 | |
|   myLat.setMode(OUTSIDE)
 | |
| 
 | |
|   for y in range(125):
 | |
|     vec = myLat.getPoint(y)
 | |
|     co1 = vec[0] + vec[0] / 5
 | |
|     co2 = vec[1] - vec[2] * 0.3
 | |
|     co3 = vec[2] * 3
 | |
|     myLat.setPoint(y,[co1,co2,co3])
 | |
| 
 | |
|   myOb.link(myLat)
 | |
|   mySphere = Object.Get('Sphere')
 | |
|   myOb.makeParent([mySphere])
 | |
| 
 | |
|   myLat.applyDeform()
 | |
| 
 | |
|   sc = Scene.getCurrent()
 | |
|   sc.link(myOb)
 | |
|   Blender.Redraw()
 | |
| """
 | |
| 
 | |
| def New (name = None):
 | |
|   """
 | |
|   Create a new Lattice object.
 | |
|   Passing a name to this function will name the Lattice
 | |
|   datablock, otherwise the Lattice data will be given a 
 | |
|   default name.
 | |
|   @type name: string
 | |
|   @param name: The Lattice name.
 | |
|   @rtype: Blender Lattice
 | |
|   @return: The created Lattice Data object.
 | |
|   """
 | |
| 
 | |
| def Get (name = None):
 | |
|   """
 | |
|   Get the Lattice object(s) from Blender.
 | |
|   @type name: string
 | |
|   @param name: The name of the Lattice object.
 | |
|   @rtype: Blender Lattice or a list of Blender Lattices
 | |
|   @return: It depends on the 'name' parameter:
 | |
|       - (name): The Lattice object with the given name;
 | |
|       - ():     A list with all Lattice objects in the current scene.
 | |
|   """
 | |
| 
 | |
| class Lattice:
 | |
|   """
 | |
|   The Lattice object
 | |
|   ==================
 | |
|     This object gives access to Lattices in Blender.
 | |
|   @ivar name: The Lattice name.
 | |
|   @ivar width: The number of x dimension partitions.
 | |
|   @ivar height: The number of y dimension partitions.
 | |
|   @ivar depth: The number of z dimension partitions.
 | |
|   @ivar widthType: The x dimension key type.
 | |
|   @ivar heightType: The y dimension key type.
 | |
|   @ivar depthType: The z dimension key type.
 | |
|   @ivar mode: The current mode of the Lattice.
 | |
|   @ivar latSize: The number of points in this Lattice.
 | |
|   @cvar key: The L{Key.Key} object associated with this Lattice.
 | |
|   """
 | |
| 
 | |
|   def getName():
 | |
|     """
 | |
|     Get the name of this Lattice datablock.
 | |
|     @rtype: string
 | |
|     @return: The name of the Lattice datablock.
 | |
|     """
 | |
| 
 | |
|   def setName(name):
 | |
|     """
 | |
|     Set the name of this Lattice datablock.
 | |
|     @type name: string
 | |
|     @param name: The new name.
 | |
|     """
 | |
| 
 | |
|   def getPartitions():
 | |
|     """
 | |
|     Gets the number of 'walls' or partitions that the Lattice has 
 | |
|     in the x, y, and z dimensions.
 | |
|     @rtype: list of ints
 | |
|     @return: A list corresponding to the number of partitions: [x,y,z]
 | |
|     """
 | |
| 
 | |
|   def setPartitions(x,y,z):
 | |
|     """
 | |
|     Set the number of 'walls' or partitions that the 
 | |
|     Lattice will be created with in the x, y, and z dimensions.
 | |
|     @type x: int
 | |
|     @param x: The number of partitions in the x dimension of the Lattice.
 | |
|     @type y: int
 | |
|     @param y: The number of partitions in the y dimension of the Lattice.
 | |
|     @type z: int
 | |
|     @param z: The number of partitions in the z dimension of the Lattice.
 | |
|     """
 | |
| 
 | |
|   def getKeyTypes():
 | |
|     """
 | |
|     Returns the deformation key types for the x, y, and z dimensions of the
 | |
|     Lattice.
 | |
|     @rtype: list of strings
 | |
|     @return: A list corresponding to the key types will be returned: [x,y,z]
 | |
|     """
 | |
| 
 | |
|   def setKeyTypes(xType,yType,zType):
 | |
|     """
 | |
|     Sets the deformation key types for the x, y, and z dimensions of the
 | |
|     Lattice.
 | |
|     There are three key types possible:
 | |
|       -  Lattice.CARDINAL
 | |
|       -  Lattice.LINEAR
 | |
|       -  Lattice.BSPLINE
 | |
|     @type xType: enum constant
 | |
|     @param xType: the deformation key type for the x dimension of the Lattice
 | |
|     @type yType: enum constant
 | |
|     @param yType: the deformation key type for the y dimension of the Lattice
 | |
|     @type zType: enum constant
 | |
|     @param zType: the deformation key type for the z dimension of the Lattice
 | |
|     """
 | |
| 
 | |
|   def getMode():
 | |
|     """
 | |
|     Returns the current Lattice mode
 | |
|     @rtype: string
 | |
|     @return: A string representing the current Lattice mode
 | |
|     """
 | |
| 
 | |
|   def setMode(modeType):
 | |
|     """
 | |
|     Sets the current Lattice mode
 | |
|     There are two Lattice modes possible:
 | |
|       -  Lattice.GRID
 | |
|       -  Lattice.OUTSIDE
 | |
|     @type modeType: enum constant
 | |
|     @param modeType: the Lattice mode
 | |
|     """
 | |
| 
 | |
|   def getPoint(index):
 | |
|     """
 | |
|     Returns the coordinates of a point in the Lattice by index.
 | |
|     @type index: int
 | |
|     @param index: The index of the point on the Lattice you want returned
 | |
|     @rtype: list of floats
 | |
|     @return: The x,y,z coordiates of the Lattice point : [x,y,z]
 | |
|     """
 | |
| 
 | |
|   def setPoint(index, position):
 | |
|     """
 | |
|     Sets the coordinates of a point in the Lattice by index.
 | |
|     @type index: int
 | |
|     @param index: The index of the point on the Lattice you want set
 | |
|     @type position: list of floats
 | |
|     @param position: The x,y,z coordinates that you want the point to be: [x,y,z]
 | |
|     """
 | |
| 
 | |
|   def applyDeform(force = False):
 | |
|     """
 | |
|     @type force: bool
 | |
|     @param force: if True, meshes are not ignored.
 | |
|     Applies the current Lattice deformation to any child objects that have this 
 | |
|     Lattice as the parent.
 | |
|     @note: simply parenting to a Lattice and redrawing the screen is enough to
 | |
|       get the deformation done, this applyDeform method is useful when the
 | |
|       script won't call a redraw, like in command line background (GUI-less)
 | |
|       mode.
 | |
|     @note: by default, this method doesn't apply deformations to meshes.  This
 | |
|       is because unlike other kinds of objects, meshes store lattice
 | |
|       deformation directly in their vertices and calling this applyDeform
 | |
|       method will apply the deformation a second time, giving double
 | |
|       deformation, which can be a feature (set force = True if you want it) or
 | |
|       much probably an undesired effect.
 | |
|     """
 | |
| 
 | |
|   def getKey():
 | |
|     """
 | |
|     Returns the L{Key.Key} object associated with this Lattice.
 | |
|     @rtype: L{Key.Key}
 | |
|     @return: A key object representing the keyframes of the lattice or None.
 | |
|     """
 | |
| 
 | |
|   def insertKey(frame):
 | |
|     """
 | |
|     Inserts the current state of the Lattice as a new absolute keyframe
 | |
| 
 | |
|     B{Example}::
 | |
|       for z in range(5):
 | |
|         for y in range(125):
 | |
|           vec = myLat.getPoint(y)
 | |
|           co1 = vec[0] + vec[2]
 | |
|           co2 = vec[1] - vec[2]
 | |
|           co3 = vec[2] + vec[1]
 | |
|           myLat.setPoint(y,[co1,co2,co3])
 | |
|         w = (z + 1) * 10
 | |
|         myLat.insertKey(w)
 | |
|       myLat.applyDeform()
 | |
| 
 | |
|     @type frame: int
 | |
|     @param frame: the frame at which the Lattice will be set as a keyframe
 | |
|     """
 | |
| 
 | |
| 
 | |
| 
 |