506 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			506 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Blender.Curve module and the Curve PyType object
 | |
| 
 | |
| """
 | |
| The Blender.Curve submodule.
 | |
| 
 | |
| Curve Data
 | |
| ==========
 | |
| 
 | |
| This module provides access to B{Curve Data} objects in Blender.
 | |
| 
 | |
| A Blender Curve can consist of multiple curves. Try converting a Text object to a Curve to see an example of this.   Each curve is of
 | |
| type Bezier or Nurb.  The underlying curves can be accessed with
 | |
| the [] operator.  Operator [] returns an object of type CurNurb.
 | |
| 
 | |
| The Curve module also supports the Python iterator interface.  This means you can access the curves in a Curve or the control points in a CurNurb using a python for statement.
 | |
| 
 | |
| 
 | |
| Add a Curve to a Scene Example::
 | |
|   from Blender import Curve, Object, Scene
 | |
|   c = Curve.New()             # create new  curve data
 | |
|   cur = Scene.getCurrent()    # get current scene
 | |
|   ob = Object.New('Curve')    # make curve object
 | |
|   ob.link(c)                  # link curve data with this object
 | |
|   cur.link(ob)                # link object into scene
 | |
| 
 | |
| Iterator Example::
 | |
|   ob = Object.GetSelected()[0]
 | |
|   curve = ob.getData()
 | |
|   for cur in curve:
 | |
|     print type( cur ), cur
 | |
|     for point in cur:
 | |
|       print type( point ), point
 | |
| 
 | |
| 
 | |
| """
 | |
| 
 | |
| def New ( name = 'CurData'):
 | |
|     """
 | |
|   Create a new Curve Data object.
 | |
|   @type name: string
 | |
|   @param name: The Curve Data name.
 | |
|   @rtype: Blender Curve
 | |
|   @return: The created Curve Data object.
 | |
|   """
 | |
| 
 | |
| def Get (name = None):
 | |
|   """
 | |
|   Get the Curve Data object(s) from Blender.
 | |
|   @type name: string
 | |
|   @param name: The name of the Curve Data.
 | |
|   @rtype: Blender Curve or a list of Blender Curves
 | |
|   @return: It depends on the 'name' parameter:
 | |
|         - (name): The Curve Data object with the given name;
 | |
|         - ():     A list with all Curve Data objects in the current scene.
 | |
|   """
 | |
| 
 | |
| class Curve:
 | |
|   """
 | |
|   The Curve Data object
 | |
|   =====================
 | |
|   This object gives access to Curve-specific data in Blender.
 | |
|   
 | |
|   @cvar name: The Curve Data name.
 | |
|   @cvar pathlen: The Curve Data path length.
 | |
|   @cvar totcol: The Curve Data maximal number of linked materials.
 | |
|   @cvar flag: The Curve Data flag value; see function getFlag for the semantics.
 | |
|   @cvar bevresol: The Curve Data bevel resolution.
 | |
|   @cvar resolu: The Curve Data U-resolution.
 | |
|   @cvar resolv: The Curve Data V-resolution.
 | |
|   @cvar width: The Curve Data width.
 | |
|   @cvar ext1: The Curve Data extent 1(for bevels).
 | |
|   @cvar ext2: The Curve Data extent2 (for bevels).
 | |
|   @cvar loc: The Curve Data location(from the center).
 | |
|   @cvar rot: The Curve Data rotation(from the center).
 | |
|   @cvar size: The Curve Data size(from the center).
 | |
|   @cvar bevob: The Curve Bevel Object
 | |
|   """
 | |
| 
 | |
|   def getName():
 | |
|     """
 | |
|     Get the name of this Curve Data object.
 | |
|     @rtype: string
 | |
|     """
 | |
| 
 | |
|   def setName(name):
 | |
|     """
 | |
|     Set the name of this Curve Data object.
 | |
|     @rtype: PyNone
 | |
|     @type name: string
 | |
|     @param name: The new name.
 | |
|     """
 | |
| 
 | |
|   def getPathLen():
 | |
|     """
 | |
|     Get this Curve's path length.
 | |
|     @rtype: int
 | |
|     @return: the path length.
 | |
|     """
 | |
| 
 | |
|   def setPathLen(len):
 | |
|     """
 | |
|     Set this Curve's path length.
 | |
|     @rtype: PyNone
 | |
|     @type len: int
 | |
|     @param len: the new curve's length.
 | |
|     """
 | |
| 
 | |
|   def getTotcol():
 | |
|     """
 | |
|     Get the number of materials linked to the Curve.
 | |
|     @rtype: int
 | |
|     @return: number of materials linked.
 | |
|     """
 | |
| 
 | |
|   def setTotcol(totcol):
 | |
|     """
 | |
|     Set the number of materials linked to the Curve.
 | |
|     @rtype: PyNone
 | |
|     @type totcol: int
 | |
|     @param totcol: number of materials linked.
 | |
|     """
 | |
| 
 | |
|   def getFlag():
 | |
|     """
 | |
|     Get the Curve flag value.   
 | |
|     This item is a bitfield whose value is a combination of the following parameters.
 | |
|        - Bit 0 :  "3D" is set
 | |
|        - Bit 1 :  "Front" is set
 | |
|        - Bit 2 :  "Back" is set
 | |
|        - Bit 3 :  "CurvePath" is set.
 | |
|        - Bit 4 :  "CurveFollow" is set.
 | |
|       
 | |
|     @rtype: integer bitfield
 | |
|     """
 | |
| 
 | |
|   def setFlag(val):
 | |
|     """
 | |
|     Set the Curve flag value.  The flag corresponds to the Blender settings for 3D, Front, Back, CurvePath and CurveFollow.  This parameter is a bitfield.
 | |
|     @rtype: PyNone
 | |
|     @type val: integer bitfield
 | |
|     @param val : The Curve's flag bits.  See L{getFlag} for the meaning of the individual bits.
 | |
|     """
 | |
| 
 | |
|   def getBevresol():
 | |
|     """
 | |
|     Get the Curve's bevel resolution value.
 | |
|     @rtype: float
 | |
|     """
 | |
| 
 | |
|   def setBevresol(bevelresol):
 | |
|     """
 | |
|     Set the Curve's bevel resolution value.
 | |
|     @rtype: PyNone
 | |
|     @type bevelresol: float
 | |
|     @param bevelresol: The new Curve's bevel resolution value.
 | |
|     """
 | |
| 
 | |
|   def getResolu():
 | |
|     """
 | |
|     Get the Curve's U-resolution value.
 | |
|     @rtype: float
 | |
|     """
 | |
| 
 | |
|   def setResolu(resolu):
 | |
|     """
 | |
|     Set the Curve's U-resolution value.
 | |
|     @rtype: PyNone
 | |
|     @type resolu: float
 | |
|     @param resolu: The new Curve's U-resolution value.
 | |
|     """
 | |
| 
 | |
|   def getResolv():
 | |
|     """
 | |
|     Get the Curve's V-resolution value.
 | |
|     @rtype: float
 | |
|     """
 | |
| 
 | |
|   def setResolv(resolv):
 | |
|     """
 | |
|     Set the Curve's V-resolution value.
 | |
|     @rtype: PyNone
 | |
|     @type resolv: float
 | |
|     @param resolv: The new Curve's V-resolution value.
 | |
|     """
 | |
| 
 | |
|   def getWidth():
 | |
|     """
 | |
|     Get the Curve's width value.
 | |
|     @rtype: float
 | |
|     """
 | |
| 
 | |
|   def setWidth(width):
 | |
|     """
 | |
|     Set the Curve's width value. 
 | |
|     @rtype: PyNone
 | |
|     @type width: float
 | |
|     @param width: The new Curve's width value. 
 | |
|     """
 | |
| 
 | |
|   def getExt1():
 | |
|     """
 | |
|     Get the Curve's ext1 value.
 | |
|     @rtype: float
 | |
|     """
 | |
| 
 | |
|   def setExt1(ext1):
 | |
|     """
 | |
|     Set the Curve's ext1 value. 
 | |
|     @rtype: PyNone
 | |
|     @type ext1: float
 | |
|     @param ext1: The new Curve's ext1 value. 
 | |
|     """
 | |
| 
 | |
|   def getExt2():
 | |
|     """
 | |
|     Get the Curve's ext2 value.
 | |
|     @rtype: float
 | |
|     """
 | |
| 
 | |
|   def setExt2(ext2):
 | |
|     """
 | |
|     Set the Curve's ext2 value.
 | |
|     @rtype: PyNone 
 | |
|     @type ext2: float
 | |
|     @param ext2: The new Curve's ext2 value. 
 | |
|     """
 | |
| 
 | |
|   def getControlPoint(numcurve,numpoint):
 | |
|     """
 | |
|     Get the curve's control point value. The numpoint arg is an index into the list of points and starts with 0.
 | |
|     @type numcurve: int
 | |
|     @type numpoint: int
 | |
|     @rtype: list of floats
 | |
|     @return: depends upon the curve's type.
 | |
|       - type Bezier : a list of nine floats.  Values are x, y, z for handle-1, vertex and handle-2 
 | |
|       - type Nurb : a list of 4 floats.  Values are x, y, z, w.
 | |
|     """
 | |
| 
 | |
|   def setControlPoint( numcurve, numpoint, controlpoint):
 | |
|     """
 | |
|     Set the Curve's controlpoint value.   The numpoint arg is an index into the list of points and starts with 0.
 | |
|     @rtype: PyNone
 | |
|     @type numcurve: int
 | |
|     @type numpoint: int
 | |
|     @type controlpoint: list
 | |
|     @param numcurve: index for spline in Curve, starting from 0
 | |
|     @param numpoint: index for point in spline, starting from 0
 | |
|     @param controlpoint: The new controlpoint value.
 | |
|     See L{getControlPoint} for the length of the list.
 | |
|     """
 | |
| 
 | |
|   def appendPoint( numcurve, new_control_point ):
 | |
|     """
 | |
|       add a new control point to the indicated curve.
 | |
|       @rtype: PyNone
 | |
|       @type numcurve: int
 | |
|       @type new_control_point: list xyzw or BezTriple
 | |
|       @param numcurve:  index for spline in Curve, starting from 0
 | |
|       @param new_control_point: depends on curve's type.
 | |
|         - type Bezier: a BezTriple 
 | |
| 	- type Nurb: a list of four floats for the xyzw values
 | |
|       @raise AttributeError:  throws exception if numcurve is out of range.
 | |
|     """
 | |
| 
 | |
|   def appendNurb( new_point ):
 | |
|       """
 | |
|       add a new curve to this Curve.  The new point is added to the new curve.  Blender does not support a curve with zero points.  The new curve is added to the end of the list of curves in the Curve.
 | |
|       @rtype: CurNurb
 | |
|       @return: the newly added spline
 | |
|       @type new_point: BezTriple or list of xyzw coordinates for a Nurb curve.
 | |
|       @param new_point: see L{CurNurb.append} for description of parameter.
 | |
|       """
 | |
| 
 | |
|   def getLoc():
 | |
|     """
 | |
|     Get the curve's location value.
 | |
|     @rtype: a list of 3 floats.
 | |
|     """
 | |
| 
 | |
|   def setLoc(location):
 | |
|     """
 | |
|     Set the curve's location value.
 | |
|     @rtype: PyNone 
 | |
|     @type location: list[3]
 | |
|     @param location: The new Curve's location values. 
 | |
|     """
 | |
| 
 | |
|   def getRot():
 | |
|     """
 | |
|     Get the curve's rotation value.
 | |
|     @rtype: a list of 3 floats.
 | |
|     """
 | |
| 
 | |
|   def setRot(rotation):
 | |
|     """
 | |
|     Set the Curve's rotation value. 
 | |
|     @rtype: PyNone
 | |
|     @type rotation: list[3]
 | |
|     @param rotation: The new Curve's rotation values. 
 | |
|     """
 | |
| 
 | |
|   def getSize():
 | |
|     """
 | |
|     Get the curve's size value.
 | |
|     @rtype: a list of 3 floats.
 | |
|     """
 | |
| 
 | |
|   def setSize(size):
 | |
|     """
 | |
|     Set the curve size value.
 | |
|     @rtype: PyNone 
 | |
|     @type size: list[3]
 | |
|     @param size: The new Curve's size values. 
 | |
|     """
 | |
| 
 | |
|   def getMaterials():
 | |
|     """
 | |
|     Returns a list of materials assigned to the Curve.
 | |
|     @rtype: list of Material Objects
 | |
|     @return: list of Material Objects assigned to the Curve.
 | |
|     """
 | |
| 
 | |
|   def getBevOb():
 | |
|     """
 | |
|     Returns the Bevel Object (BevOb) assigned to the Curve.
 | |
|     @rtype: Blender Object or PyNone
 | |
|     @return: Bevel Object (BevOb) assigned to the Curve.
 | |
|     """
 | |
| 
 | |
|   def setBevOb( object ):
 | |
|     """
 | |
|     Assign a Bevel Object (BevOb) to the Curve.  Passing None as the object parameter removes the bevel.
 | |
|     @rtype: PyNone
 | |
|     @return: PyNone
 | |
|     @type object: Curve type Blender Object
 | |
|     @param object: Blender Object to assign as Bevel Object (BevOb)
 | |
|     @raise TypeError: throws exception if the parameter is not a Curve type Blender Object or PyNone
 | |
|     """
 | |
| 
 | |
|   def update():
 | |
|     """
 | |
|     Updates display list for a Curve.
 | |
|     Used after making changes to control points.
 | |
|     
 | |
|     You B{must} use this if you want to see your changes!
 | |
|     @rtype: PyNone
 | |
|     @return: PyNone
 | |
|     """
 | |
| 
 | |
|   def isNurb( curve_num ):
 | |
|       """
 | |
|       method used to determine whether a CurNurb is of type Bezier or of type Nurb.
 | |
|       @rtype: integer
 | |
|       @return:  Zero if curve is type Bezier, One if curve is of type Nurb.
 | |
|       @type curve_num: integer
 | |
|       @param curve_num: zero-based index into list of curves in this Curve.
 | |
|       @raise AttributeError:  throws exception if curve_num is out of range.
 | |
|       """
 | |
| 
 | |
|   def isCyclic( curve_num ):
 | |
|       """
 | |
|       Boolean method checks whether the curve is cyclic (closed) or not.
 | |
| 
 | |
|       @rtype: boolean
 | |
|       @return: True if is cyclic, False if not
 | |
|       @type curve_num: integer
 | |
|       @param curve_num: zero-based index into list of curves in this Curve
 | |
|       @raise AttributeError:  throws exception if curve_num is out of range.
 | |
|       """
 | |
| 
 | |
|   def getNumCurves():
 | |
|       """
 | |
|       Get the number of curves in this Curve Data object.
 | |
|       @rtype: integer
 | |
|       """
 | |
| 
 | |
|   def getNumPoints( curve_num ):
 | |
|       """
 | |
|       Get the number of control points in the curve.
 | |
|       @type curve_num: integer
 | |
|       @param curve_num: zero-based index into list of curves in this Curve
 | |
|       @rtype: integer
 | |
|       """
 | |
| 
 | |
| class CurNurb:
 | |
|     """
 | |
|     The CurNurb Object
 | |
|     ==================
 | |
|     This object provides access to the control points of the curves that make up a Blender Curve.
 | |
| 
 | |
|     The CurNurb supports the python iterator protocol which means you can use a python for statement to access the points in a curve.
 | |
| 
 | |
|     The CurNurb also supports the sequence protocol which means you can access the control points of a CurNurb using the [] operator.
 | |
| 
 | |
|     @cvar flagU: The CurNurb knot flag U (0: uniform, 1: endpoints, 2: bezier)
 | |
|     @cvar flagV: The CurNurb knot flag V (0: uniform, 1: endpoints, 2: bezier)
 | |
|     @cvar type: The type of the curve (Poly: 0, Bezier: 1, NURBS: 4)
 | |
|     """
 | |
| 	
 | |
|     def __setitem__( n, point ):
 | |
|       """
 | |
| 	  Replace the Nth point in the curve. The type of the argument must match the type of the curve. List of 4 floats (optional 5th float is the tilt value in radians) for Nurbs or BezTriple for Bezier.
 | |
|       @rtype: PyNone
 | |
|       @return: PyNone
 | |
|       @type n: integer
 | |
|       @param n: the index of the element to replace
 | |
|       @type point: BezTriple or list of 4 floats (optional 5th float is the tilt value in radians)
 | |
|       @param point: the point that will replace the one in the curve.  The point can be either a BezTriple type or a list of 4 floats in x,y,z,w (optionally tilt in radians as 5th value) format for a Nurb curve.
 | |
|       """
 | |
| 
 | |
|     def __getitem__( n ):
 | |
|       """
 | |
| 	  Get the Nth element in the curve. For Bezier curves, that element is a BezTriple. For the rest (Poly and Nurbs), it is a list of 5 floats: x, y, z, weight, tilt (in radians). NOTE 1: This element element is independant on the curve, modifying it will not affect the curve. NOTE 2: Each successive call returns a new object.
 | |
|       @rtype: BezTriple (Bezier Curve) or List of 5 floats [x, y, z, w, t] for Poly or Nurbs
 | |
|       @return: The Nth element in the curve
 | |
|       @type n: integer
 | |
|       @param n: the index of the element to return
 | |
|       """
 | |
| 
 | |
|     def append( new_point ):
 | |
|       """
 | |
|       Appends a new point to a curve.  This method appends points to both Bezier and Nurb curves. The type of the argument must match the type of the curve. List of 4 floats (optional 5th float is the tilt value in radians) for Nurbs or BezTriple for Bezier.
 | |
|       @rtype: PyNone
 | |
|       @return: PyNone
 | |
|       @type new_point: BezTriple or list of 4 floats (optional 5th float is the tilt value in radians)
 | |
|       @param new_point: the new point to be appended to the curve.  The new point can be either a BezTriple type or a list of 4 floats in x,y,z,w (optionally tilt in radians as 5th value) format for a Nurb curve.
 | |
|       """
 | |
| 
 | |
|     def setMatIndex( index ):
 | |
|       """
 | |
|       Sets the Material index for this CurNurb.
 | |
|       @rtype: PyNone
 | |
|       @return: PyNone
 | |
|       @type index:  integer
 | |
|       @param index: the new value for the Material number of this CurNurb.  No range checking is done.
 | |
|       """
 | |
| 
 | |
|     def getMatIndex():
 | |
|       """
 | |
|       Returns the Material index for this CurNurb.
 | |
|       @rtype: integer
 | |
|       @return: integer
 | |
|       """
 | |
| 
 | |
|     def isNurb():
 | |
|       """
 | |
|       Boolean method used to determine whether a CurNurb is of type Bezier or of type Nurb.
 | |
|       @rtype: boolean
 | |
|       @return:  True or False
 | |
|       """
 | |
| 
 | |
|     def isCyclic():
 | |
|       """
 | |
|       Boolean method checks whether a CurNurb is cyclic (a closed curve) or not.
 | |
|       @rtype: boolean
 | |
|       @return: True or False
 | |
| 	  """
 | |
| 
 | |
|     def getFlagU():
 | |
|       """
 | |
|       Get the CurNurb knot flag U 
 | |
|       @rtype: integer
 | |
|       @return: 0 - uniform, 1 - endpoints, 2 - bezier
 | |
|       """
 | |
| 
 | |
|     def setFlagU( value ):
 | |
|       """
 | |
|       Set the CurNurb knot flag U (knots are recalculated automatically)
 | |
|       @type value: integer
 | |
|       @param value: CurNurb knot flag (0 - uniform, 1 - endpoints, 2 - bezier)
 | |
|       @rtype: PyNone
 | |
|       @return: PyNone
 | |
|       """
 | |
| 
 | |
|     def getFlagV():
 | |
|       """
 | |
|       Get the CurNurb knot flag V 
 | |
|       @rtype: integer
 | |
|       @return: 0 - uniform, 1 - endpoints, 2 - bezier
 | |
|       """
 | |
| 
 | |
|     def setFlagV( value ):
 | |
|       """
 | |
|       Set the CurNurb knot flag V (knots are recalculated automatically)
 | |
|       @type value: integer
 | |
|       @param value: CurNurb knot flag (0 - uniform, 1 - endpoints, 2 - bezier)
 | |
|       @rtype: PyNone
 | |
|       @return: PyNone
 | |
|       """
 | |
| 
 | |
|     def getType():
 | |
|       """
 | |
|       Get the type of the curve 
 | |
|       @rtype: integer
 | |
|       @return:  0 - Poly, 1 - Bezier, 4 - NURBS
 | |
|       """
 | |
| 
 | |
|     def getType( value ):
 | |
|       """
 | |
|       Set the type of the curve and converts the curve to its new type if needed
 | |
|       @type value: integer
 | |
|       @param value: CurNurb type flag (0 - Poly, 1 - Bezier, 4 - NURBS)
 | |
|       @rtype: PyNone
 | |
|       @return: PyNone
 | |
|       """
 | 
