@@ -41,12 +41,16 @@ def load_font(font_path):
41
41
return None
42
42
43
43
44
- def createExplodeTxt (title , particle_number , extrude , bevel_depth , spacemode , textsize , width , font , ground ):
44
+ def createExplodeTxt (title , particle_number , extrude , bevel_depth , spacemode ,
45
+ textsize , width , font , ground , frame_count ):
45
46
""" Create aned animate the exploding texte """
46
47
47
48
newText = title
48
49
# create text
49
- bpy .ops .object .text_add (radius = 1.0 , enter_editmode = False , align = 'WORLD' , location = (0.0 , 0.0 , 0.0 ), rotation = (0.0 , 0.0 , 0.0 ))
50
+ bpy .ops .object .text_add (
51
+ radius = 1.0 , enter_editmode = False , align = 'WORLD' ,
52
+ location = (0.0 , 0.0 , 0.0 ), rotation = (0.0 , 0.0 , 0.0 )
53
+ )
50
54
newtext = bpy .context .view_layer .objects .active
51
55
52
56
# modifying the text
@@ -66,7 +70,11 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
66
70
67
71
# rotating text
68
72
# angles are in radians
69
- #bpy.ops.transform.rotate(value=(pi/2,), axis=(1.0, 0.0, 0.0), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)
73
+ # bpy.ops.transform.rotate(value=(pi/2,), axis=(1.0, 0.0, 0.0), constraint_axis=(False, False, False),
74
+ # constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH',
75
+ # proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False,
76
+ # snap_normal=(0, 0, 0), release_confirm=False)
77
+
70
78
# second solution
71
79
newtext .rotation_euler [0 ] = pi / 2 # xaxis
72
80
newtext .rotation_euler [1 ] = 0.0 # yaxis
@@ -86,15 +94,18 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
86
94
bpy .ops .object .modifier_add (type = 'SOLIDIFY' )
87
95
88
96
# apply quick explode
89
- bpy .ops .object .quick_explode (style = 'EXPLODE' , amount = 100 , frame_duration = 50 , frame_start = 1 , frame_end = 51 , velocity = 1 , fade = True )
97
+ bpy .ops .object .quick_explode (
98
+ style = 'EXPLODE' , amount = 100 , frame_duration = 50 ,
99
+ frame_start = 1 , frame_end = 51 , velocity = 1 , fade = True
100
+ )
90
101
91
102
# modifying Particle System
92
103
# emitfrom
93
104
newtext .particle_systems [0 ].settings .emit_from = 'VERT'
94
105
# particle number
95
106
newtext .particle_systems [0 ].settings .count = particle_number
96
107
# particle lifetime
97
- newtext .particle_systems [0 ].settings .lifetime = 200 # 200 +48 > 150 ;-)z
108
+ newtext .particle_systems [0 ].settings .lifetime = 200 # 200 + 48 > 150
98
109
# start/end explosion
99
110
newtext .particle_systems [0 ].settings .frame_end = 48
100
111
newtext .particle_systems [0 ].settings .frame_start = 48
@@ -134,15 +145,12 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
134
145
bpy .ops .object .modifier_remove (modifier = "Collision" )
135
146
bpy .data .objects ['Ground' ].hide_render = True
136
147
137
- bpy .ops .ptcache .free_bake_all () # erase baked dynamics
138
- bpy .ops .ptcache .bake_all () # bake dynamics : take time but needed before rendering animation
139
-
140
-
141
148
# Debug Info:
142
149
# ./blender -b test.blend -P demo.py
143
150
# -b = background mode
144
151
# -P = run a Python script within the context of the project file
145
152
153
+
146
154
# Init all of the variables needed by this script. Because Blender executes
147
155
# this script, OpenShot will inject a dictionary of the required parameters
148
156
# before this script is executed.
@@ -182,16 +190,7 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
182
190
# ----------------------------------------------------------------------------
183
191
184
192
# Modify Text / Curve settings
185
- #print (bpy.data.curves.keys())
186
-
187
-
188
- #text_object = bpy.data.curves["txtName1"]
189
- #text_object.extrude = params["extrude"]
190
- #text_object.bevel_depth = params["bevel_depth"]
191
- #text_object.body = params["title"]
192
- #text_object.align = params["spacemode"]
193
- #text_object.size = params["text_size"]
194
- #text_object.space_character = params["width"]
193
+ # print (bpy.data.curves.keys())
195
194
196
195
# Get font object
197
196
font = None
@@ -202,10 +201,14 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
202
201
# Get default font
203
202
font = bpy .data .fonts ["Bfont" ]
204
203
204
+ # Compute animation length
205
+ length_multiplier = int (params ["length_multiplier" ]) # time remapping multiplier
206
+ frame_count = int (params ["end_frame" ]) * length_multiplier # new length (in frames)
207
+
205
208
createExplodeTxt (
206
209
params ["title" ], params ["particle_number" ], params ["extrude" ],
207
210
params ["bevel_depth" ], params ["spacemode" ], params ["text_size" ],
208
- params ["width" ], font , params ["ground_on_off" ]
211
+ params ["width" ], font , params ["ground_on_off" ], frame_count
209
212
)
210
213
211
214
# Change the material settings (color, alpha, etc...)
@@ -230,19 +233,18 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
230
233
bpy .context .scene .render .resolution_y = params ["resolution_y" ]
231
234
bpy .context .scene .render .resolution_percentage = params ["resolution_percentage" ]
232
235
236
+ bpy .ops .ptcache .free_bake_all () # erase baked dynamics
237
+
233
238
# Animation Speed (use Blender's time remapping to slow or speed up animation)
234
239
length_multiplier = int (params ["length_multiplier" ]) # time remapping multiplier
235
240
new_length = int (params ["end_frame" ]) * length_multiplier # new length (in frames)
236
241
bpy .context .scene .render .frame_map_old = 1
237
242
bpy .context .scene .render .frame_map_new = length_multiplier
238
243
239
244
# Set render length/position
240
- if "preview_frame" in params :
241
- bpy .context .scene .frame_start = params ["preview_frame" ]
242
- bpy .context .scene .frame_end = params ["preview_frame" ]
243
- else :
244
- bpy .context .scene .frame_start = params ["start_frame" ]
245
- bpy .context .scene .frame_end = new_length
245
+ bpy .context .scene .frame_start = params ["start_frame" ]
246
+ bpy .context .scene .frame_end = new_length
246
247
247
- # Render the current animation to the params["output_path"] folder
248
- bpy .ops .render .render (animation = params ["animation" ])
248
+ if "preview_frame" not in params :
249
+ # bake dynamics : take time but needed before rendering animation
250
+ bpy .ops .ptcache .bake_all ()
0 commit comments