| Trees | Indices | Help |
|
|---|
|
|
1 # Blender.Metaball module and the Metaball PyType metaball
2
3 """
4 The Blender.Metaball submodule
5
6 This module provides access to B{Metaball} data in Blender and the elements they contain.
7
8
9 Example::
10 import Blender
11 mb = Blender.Metaball.New()
12 for i in xrange(20):
13 element= mb.elements.add()
14 element.co = Blender.Mathutils.Vector(i, 0, 0)
15 sce = Blender.Scene.GetCurrent()
16 sce.objects.new(mb)
17
18
19
20 Example::
21 # Converts the active armature into metaballs
22 from Blender import *
23 def main():
24
25 scn= Scene.GetCurrent()
26 ob_arm= scn.objects.active
27 if not ob_arm or ob_arm.type!='Armature':
28 Draw.PupMenu('No Armature Selected')
29 return
30 arm= ob_arm.data
31
32 res= Draw.PupFloatInput('res:', 0.2, 0.05, 2.0)
33 if not res:
34 return
35
36 # Make a metaball
37 mb= Metaball.New()
38 mb.wiresize= res
39
40 # Link to the Scene
41 ob_mb = scn.objects.new(ob_mb)
42 ob_arm.sel= 0
43 ob_mb.setMatrix(ob_arm.matrixWorld)
44
45
46 meta_type= 0 # all elemts are ball type
47 meta_stiffness= 2.0 # Volume
48
49 for bone in arm.bones.values():
50 print bone
51
52 # Find out how many metaballs to add based on bone length, 4 min
53 length= bone.length
54 if length < res:
55 mballs= 4
56 else:
57 mballs= int(length/res)
58 if mballs < 4:
59 mballs = 4
60
61 print 'metaball count', mballs
62
63 # get the bone properties
64 head_rad= bone.headRadius
65 tail_rad= bone.tailRadius
66
67 head_loc= bone.head['ARMATURESPACE']
68 tail_loc= bone.tail['ARMATURESPACE']
69
70
71 for i in range(mballs):
72 f= float(i)
73
74 w1= f/mballs # weighting of this position on the bone for rad and loc
75 w2= 1-w1
76
77 loc= head_loc*w1 + tail_loc*w2
78 rad= (head_rad*w1 + tail_rad*w2) * 1.3
79
80 # Add the metaball
81 ml= mb.elements.add()
82 ml.co= loc
83 ml.radius= rad
84 ml.stiffness= meta_stiffness
85
86
87 Window.RedrawAll()
88
89 main()
90
91 @type Types: readonly dictionary
92 @var Types: MeteElement types.
93 - BALL
94 - TUBE
95 - PLANE
96 - ELIPSOID
97 - CUBE
98
99 @type Update: readonly dictionary
100 @var Update: MeteElement types.
101 - ALWAYS
102 - HALFRES
103 - FAST
104 - NEVER
105
106 """
107
108
110 """
111 Creates a new Metaball.
112 @type name: string
113 @param name: The name of the metaball. If this parameter is not given (or not valid) blender will assign a name to the metaball.
114 @rtype: Blender Metaball
115 @return: The created Metaball.
116 """
117
119 """
120 Get the Metaball from Blender.
121 @type name: string
122 @param name: The name of the requested Metaball.
123 @rtype: Blender Metaball or a list of Blender Metaballs
124 @return: It depends on the 'name' parameter:
125 - (name): The Metaball with the given name;
126 - (): A list with all Metaballs in the current scene.
127 """
128
130 """
131 The Metaball object
132 ===================
133 This metaball gives access to generic data from all metaballs in Blender.
134 @ivar elements: Element iterator of MetaElemSeq type.
135 @type elements: MetaElemSeq
136 @ivar wiresize: display resolution.
137 Value clamped between 0.05 and 1.0.
138
139 A lower value results in more polygons.
140 @type wiresize: float
141 @ivar rendersize: render resolution.
142 Value clamped between 0.05 and 1.0.
143
144 A lower value results in more polygons.
145 @type rendersize: float
146 @ivar thresh: Threshold setting for this metaball.
147 Value clamped between 0.0 and 5.0.
148 @type thresh: float
149 @ivar materials: List of up to 16 Materials or None types
150 Only the first material of the mother-ball used at the moment.
151 @type materials: list
152 @ivar update: The update method to use for this metaball.
153 @type update: int
154 """
155
162
163 import id_generics
164 Metaball.__doc__ += id_generics.attributes
165
166
168 """
169 The MetaElemSeq object
170 ======================
171 This object provides sequence and iterator access to the metaballs elements.
172 The elements accessed within this iterator "wraps" the actual metaball elements; changing any
173 of the elements's attributes will immediately change the data in the metaball.
174
175 This iterator is most like pythons 'set' type.
176 """
177
179 """
180 Append a new element to the metaball.
181 no arguments are taken, instead a new metaelement is
182 added to the metaball data and returned.
183 This new element can then be modified.
184
185 @return: a new meta element.
186 @rtype: Metaelement
187 """
188
190 """
191 remove an element from the metaball data.
192
193 if the element is not a part of the metaball data, an error will be raised.
194
195 @return: None
196 @rtype: None
197 """
198
200 """
201 Iterate over elements in this metaball.
202
203 @return: One of the metaelem in this metaball.
204 @rtype: Metaelem
205 """
206
214
216 """
217 The Metaelem object
218 ===================
219 This gives direct access to meta element data within a metaball.
220 @ivar type: The type of the metaball.
221 Values must be from L{Types}
222
223 Example::
224 from Blender import Metaball
225 mb= Metaball.Get('mb')
226 for el in mb.elements:
227 el.type= Metaball.Types.CUBE
228 @type type: int
229 @ivar co: The location of this element.
230 @type co: Vector
231 @ivar dims: Element dimensions.
232 Values clamped between 0 and 20 on all axies.
233 @type dims: Vector
234 @ivar quat: Element rotation.
235 @type quat: Quaternion
236 @ivar stiffness: Element stiffness.
237 Value clamped between 0 and 10.
238 @type stiffness: float
239 @ivar radius: Element radius.
240 Value clamped between 0 and 5000.
241 @type radius: float
242 @ivar negative: Element negative volume status.
243 @type negative: bool
244 @ivar hide: Element hidden status.
245 @type hide: bool
246 """
247
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Sat Sep 19 13:57:34 2009 | http://epydoc.sourceforge.net |