diff options
author | Sergej Reich <sergej.reich@googlemail.com> | 2013-01-23 09:56:44 +0400 |
---|---|---|
committer | Sergej Reich <sergej.reich@googlemail.com> | 2013-01-23 09:56:44 +0400 |
commit | 2d8637946b047a8a9cc3fb6fe6d146b9961f92a6 (patch) | |
tree | ff566a91ca6c45d67b310fec8c990b801a7f0ba2 /release/scripts/startup/bl_ui/properties_physics_common.py | |
parent | 089cf12435dfbc4b934a73b73ecd617b27ac678d (diff) |
rigidbody: Add rigid body simulation
Add operators to add/remove rigid body world and objects.
Add UI scripts.
The rigid body simulation works on scene level and overrides the
position/orientation of rigid bodies when active.
It does not deform meshes or generate data so there is no modifier.
Usage:
* Add rigid body world in the scene tab
* Create a group
* Add objects to the group
* Assign group to the rigid body world
* Play animation
For convenience the rigid body tools operators in the tools panel of the 3d view
will add a world, group and add objects to the group automatically so you only have
to press one button to add/remove rigid bodies to the simulation.
Part of GSoC 2010 and 2012.
Authors: Joshua Leung (aligorith), Sergej Reich (sergof)
Diffstat (limited to 'release/scripts/startup/bl_ui/properties_physics_common.py')
-rw-r--r-- | release/scripts/startup/bl_ui/properties_physics_common.py | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py b/release/scripts/startup/bl_ui/properties_physics_common.py index db8dfd7a542..1131ea997da 100644 --- a/release/scripts/startup/bl_ui/properties_physics_common.py +++ b/release/scripts/startup/bl_ui/properties_physics_common.py @@ -44,6 +44,12 @@ def physics_add(self, layout, md, name, type, typeicon, toggles): else: sub.operator("object.modifier_add", text=name, icon=typeicon).type = type +def physics_add_special(self, layout, data, name, addop, removeop, typeicon): + sub = layout.row(align=True) + if data: + sub.operator(removeop, text=name, icon='X') + else: + sub.operator(addop, text=name, icon=typeicon) class PHYSICS_PT_add(PhysicButtonsPanel, Panel): bl_label = "" @@ -76,6 +82,12 @@ class PHYSICS_PT_add(PhysicButtonsPanel, Panel): physics_add(self, col, context.fluid, "Fluid", 'FLUID_SIMULATION', 'MOD_FLUIDSIM', True) physics_add(self, col, context.smoke, "Smoke", 'SMOKE', 'MOD_SMOKE', True) + if(ob.type == 'MESH'): + physics_add_special(self, col, ob.rigid_body, "Rigid Body", + "rigidbody.object_add", + "rigidbody.object_remove", + 'MESH_ICOSPHERE') # XXX: need dedicated icon + # cache-type can be 'PSYS' 'HAIR' 'SMOKE' etc @@ -84,11 +96,12 @@ def point_cache_ui(self, context, cache, enabled, cachetype): layout.context_pointer_set("point_cache", cache) - row = layout.row() - row.template_list("UI_UL_list", "", cache, "point_caches", cache.point_caches, "active_index", rows=2) - col = row.column(align=True) - col.operator("ptcache.add", icon='ZOOMIN', text="") - col.operator("ptcache.remove", icon='ZOOMOUT', text="") + if not cachetype == 'RIGID_BODY': + row = layout.row() + row.template_list("UI_UL_list", "", cache, "point_caches", cache.point_caches, "active_index", rows=2) + col = row.column(align=True) + col.operator("ptcache.add", icon='ZOOMIN', text="") + col.operator("ptcache.remove", icon='ZOOMOUT', text="") row = layout.row() if cachetype in {'PSYS', 'HAIR', 'SMOKE'}: @@ -131,13 +144,13 @@ def point_cache_ui(self, context, cache, enabled, cachetype): row.enabled = enabled row.prop(cache, "frame_start") row.prop(cache, "frame_end") - if cachetype not in {'SMOKE', 'CLOTH', 'DYNAMIC_PAINT'}: + if cachetype not in {'SMOKE', 'CLOTH', 'DYNAMIC_PAINT', 'RIGID_BODY'}: row.prop(cache, "frame_step") if cachetype != 'SMOKE': layout.label(text=cache.info) - if cachetype not in {'SMOKE', 'DYNAMIC_PAINT'}: + if cachetype not in {'SMOKE', 'DYNAMIC_PAINT', 'RIGID_BODY'}: split = layout.split() split.enabled = enabled and bpy.data.is_saved |