update to modifier testing script
added presets for hook/decimate/build/mask
This commit is contained in:
parent
e1dd245a1e
commit
ae9582836e
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue