diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-01-16 20:16:55 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-01-16 20:16:55 +0400 |
commit | ae9582836e047b1da87f8178e34ad63ed0b9824e (patch) | |
tree | 911793598d6354cca71ae41cba131d2cd3ce7d0a /source/tests | |
parent | e1dd245a1ed65aa4dea22eac8a356b37182924dd (diff) |
update to modifier testing script
added presets for hook/decimate/build/mask
Diffstat (limited to 'source/tests')
-rw-r--r-- | source/tests/bl_mesh_modifiers.py | 152 |
1 files changed, 124 insertions, 28 deletions
diff --git a/source/tests/bl_mesh_modifiers.py b/source/tests/bl_mesh_modifiers.py index af6aaae819c..6a4e46a1832 100644 --- a/source/tests/bl_mesh_modifiers.py +++ b/source/tests/bl_mesh_modifiers.py @@ -25,7 +25,12 @@ # Later, we may have a way to check the results are valid. -# ./blender.bin --factory-startup --python bl_mesh_modifiers.py +# ./blender.bin --factory-startup --python source/tests/bl_mesh_modifiers.py +# + +import math + +USE_QUICK_RENDER = False # ----------------------------------------------------------------------------- @@ -45,6 +50,7 @@ def render_gl(context, filepath, shade): render = scene.render render.filepath = filepath render.image_settings.file_format = 'PNG' + render.image_settings.color_mode = 'RGB' render.use_file_extension = True render.use_antialiasing = False @@ -60,8 +66,8 @@ def render_gl(context, filepath, shade): # stop to inspect! - # if filepath == "test_cube_shell_solidify_subsurf_ob_textured": - # assert(0) + #~ if filepath == "test_cube_like_subsurf_single_wp_wire": + #~ assert(0) def render_gl_all_modes(context, obj, filepath=""): @@ -79,8 +85,12 @@ def render_gl_all_modes(context, obj, filepath=""): scene.tool_settings.mesh_select_mode = False, True, False # render - render_gl(context, filepath + "_ob_wire", shade='WIREFRAME') render_gl(context, filepath + "_ob_solid", shade='SOLID') + + if USE_QUICK_RENDER: + return + + render_gl(context, filepath + "_ob_wire", shade='WIREFRAME') render_gl(context, filepath + "_ob_textured", shade='TEXTURED') # ------------------------------------------------------------------------- @@ -195,6 +205,11 @@ def defaults_object(obj): face.use_smooth = True +def defaults_modifier(mod): + mod.show_in_editmode = True + mod.show_on_cage = True + + # ----------------------------------------------------------------------------- # models (utils) @@ -268,34 +283,33 @@ def mesh_armature_add(obj, mode=0): # ----------------------------------------------------------------------------- # modifiers -def modifier_subsurf_add(obj, levels=2): +def modifier_subsurf_add(scene, obj, levels=2): mod = obj.modifiers.new(name=whoami(), type='SUBSURF') - mod.show_in_editmode = True + defaults_modifier(mod) mod.levels = levels mod.render_levels = levels return mod -def modifier_armature_add(obj): +def modifier_armature_add(scene, obj): mod = obj.modifiers.new(name=whoami(), type='ARMATURE') - mod.show_in_editmode = True + defaults_modifier(mod) arm_data = bpy.data.armatures.new(whoami()) - arm_ob = bpy.data.objects.new(whoami(), arm_data) + obj_arm = bpy.data.objects.new(whoami(), arm_data) - scene = bpy.context.scene - scene.objects.link(arm_ob) + scene.objects.link(obj_arm) - arm_ob.select = True - scene.objects.active = arm_ob + obj_arm.select = True + scene.objects.active = obj_arm bpy.ops.object.mode_set(mode='OBJECT', toggle=False) bpy.ops.object.mode_set(mode='EDIT', toggle=False) # XXX, annoying, remove bone. while arm_data.edit_bones: - arm_ob.edit_bones.remove(arm_data.edit_bones[-1]) + obj_arm.edit_bones.remove(arm_data.edit_bones[-1]) bone_a = arm_data.edit_bones.new("Bone.A") bone_b = arm_data.edit_bones.new("Bone.B") @@ -310,17 +324,17 @@ def modifier_armature_add(obj): bpy.ops.object.mode_set(mode='OBJECT', toggle=False) # 45d armature - arm_ob.pose.bones["Bone.B"].rotation_quaternion = 1, -0.5, 0, 0 + obj_arm.pose.bones["Bone.B"].rotation_quaternion = 1, -0.5, 0, 0 # set back to the original scene.objects.active = obj # display options - arm_ob.show_x_ray = True + obj_arm.show_x_ray = True arm_data.draw_type = 'STICK' # apply to modifier - mod.object = arm_ob + mod.object = obj_arm mesh_vgroup_add(obj, name="Bone.A", axis=0, invert=True) mesh_vgroup_add(obj, name="Bone.B", axis=0, invert=False) @@ -328,22 +342,86 @@ def modifier_armature_add(obj): return mod -def modifier_mirror_add(obj): +def modifier_mirror_add(scene, obj): mod = obj.modifiers.new(name=whoami(), type='MIRROR') - mod.show_in_editmode = True + defaults_modifier(mod) return mod -def modifier_solidify_add(obj, thickness=0.25): +def modifier_solidify_add(scene, obj, thickness=0.25): mod = obj.modifiers.new(name=whoami(), type='SOLIDIFY') - mod.show_in_editmode = True + defaults_modifier(mod) mod.thickness = thickness return mod +def modifier_hook_add(scene, obj, use_vgroup=True): + scene.objects.active = obj + + # no nice way to add hooks from py api yet + # assume object mode, hook first face! + mesh = obj.data + + if use_vgroup: + for v in mesh.vertices: + v.select = True + else: + for v in mesh.vertices: + v.select = False + for i in mesh.faces[0].vertices: + mesh.vertices[i].select = True + + bpy.ops.object.mode_set(mode='EDIT', toggle=False) + bpy.ops.object.hook_add_newob() + bpy.ops.object.mode_set(mode='OBJECT', toggle=False) + + # mod = obj.modifiers.new(name=whoami(), type='HOOK') + mod = obj.modifiers[-1] + defaults_modifier(mod) + + obj_hook = mod.object + obj_hook.rotation_euler = 0, math.radians(45), 0 + obj_hook.show_x_ray = True + + if use_vgroup: + mod.vertex_group = obj.vertex_groups[0].name + + return mod + + +def modifier_decimate_add(scene, obj): + mod = obj.modifiers.new(name=whoami(), type='DECIMATE') + defaults_modifier(mod) + + mod.ratio = 1 / 3 + + return mod + + +def modifier_build_add(scene, obj): + mod = obj.modifiers.new(name=whoami(), type='BUILD') + defaults_modifier(mod) + + # ensure we display some faces + totface = len(obj.data.faces) + mod.frame_start = totface // 2 + mod.frame_duration = totface + + return mod + + +def modifier_mask_add(scene, obj): + mod = obj.modifiers.new(name=whoami(), type='MASK') + defaults_modifier(mod) + + mod.vertex_group = obj.vertex_groups[0].name + + return mod + + # ----------------------------------------------------------------------------- # models @@ -578,6 +656,22 @@ global_tests.append(("mirror_single", ((modifier_mirror_add, dict()), ), )) +global_tests.append(("hook_single", + ((modifier_hook_add, dict()), ), + )) + +global_tests.append(("decimate_single", + ((modifier_decimate_add, dict()), ), + )) + +global_tests.append(("build_single", + ((modifier_build_add, dict()), ), + )) + +global_tests.append(("mask_single", + ((modifier_mask_add, dict()), ), + )) + # combinations global_tests.append(("mirror_subsurf", @@ -591,7 +685,7 @@ global_tests.append(("solidify_subsurf", )) -def apply_test(test, obj, +def apply_test(test, scene, obj, render_func=None, render_args=None, render_kwargs=None, @@ -600,7 +694,7 @@ def apply_test(test, obj, test_name, test_funcs = test for cb, kwargs in test_funcs: - cb(obj, **kwargs) + cb(scene, obj, **kwargs) render_kwargs_copy = render_kwargs.copy() @@ -612,14 +706,16 @@ def apply_test(test, obj, # ----------------------------------------------------------------------------- # tests themselves! +# having the 'test_' prefix automatically means these functions are called +# for testing def test_cube(context, test): scene = context.scene obj = make_cube_extra(scene) - ctx_camera_setup(context, location=(4, 4, 4)) + ctx_camera_setup(context, location=(3, 3, 3)) - apply_test(test, obj, + apply_test(test, scene, obj, render_func=render_gl_all_modes, render_args=(context, obj), render_kwargs=dict(filepath=whoami())) @@ -630,7 +726,7 @@ def test_cube_like(context, test): obj = make_cube_like_extra(scene) ctx_camera_setup(context, location=(5, 5, 5)) - apply_test(test, obj, + apply_test(test, scene, obj, render_func=render_gl_all_modes, render_args=(context, obj), render_kwargs=dict(filepath=whoami())) @@ -641,7 +737,7 @@ def test_cube_shell(context, test): obj = make_cube_shell_extra(scene) ctx_camera_setup(context, location=(4, 4, 4)) - apply_test(test, obj, + apply_test(test, scene, obj, render_func=render_gl_all_modes, render_args=(context, obj), render_kwargs=dict(filepath=whoami())) @@ -682,7 +778,6 @@ if __name__ == "__main__": bpy.app.handlers.scene_update_post.remove(load_handler) try: main() - import sys sys.exit(0) except: @@ -691,6 +786,7 @@ if __name__ == "__main__": import sys # sys.exit(1) # comment to debug + else: load_handler.first = False |