- 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
|
|
"""
|
|
|
|
|
|
|