Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJagannadhan Ravi <easythrees>2021-07-20 19:57:12 +0300
committerSebastian Parborg <darkdefende@gmail.com>2021-07-20 19:57:12 +0300
commit26b2a35dd44c2782e076514cb972529afb1cca64 (patch)
tree47046ab947c552aebd6c3909e0000ef58dea0d2d /release/scripts/startup
parentf53ca7e41c2c4413af5e3333ced1a83d1ee54c19 (diff)
Speedup rigid body "Copy from Active" operator
If there were lots of selected objects without an existing rigid body, we would add rigid bodies to them one by one. This would be slow in python, now we instead do this as a batch operation in C. On my (Intel) MacBook it used to take 60 seconds and with this change it takes about 0.3 seconds. Reviewed By: Sebastian Parborg Differential Revision: http://developer.blender.org/D11957
Diffstat (limited to 'release/scripts/startup')
-rw-r--r--release/scripts/startup/bl_operators/rigidbody.py21
1 files changed, 13 insertions, 8 deletions
diff --git a/release/scripts/startup/bl_operators/rigidbody.py b/release/scripts/startup/bl_operators/rigidbody.py
index bc80500c888..7f5edac4dfb 100644
--- a/release/scripts/startup/bl_operators/rigidbody.py
+++ b/release/scripts/startup/bl_operators/rigidbody.py
@@ -60,17 +60,22 @@ class CopyRigidbodySettings(Operator):
def execute(self, context):
obj_act = context.object
- view_layer = context.view_layer
- # deselect all but mesh objects
+ # Deselect all non mesh objects and objects that
+ # already have a rigid body attached.
+ rb_objects = []
for o in context.selected_objects:
- if o.type != 'MESH':
+ if o.type != 'MESH' or o.rigid_body is not None:
o.select_set(False)
- elif o.rigid_body is None:
- # Add rigidbody to object!
- view_layer.objects.active = o
- bpy.ops.rigidbody.object_add()
- view_layer.objects.active = obj_act
+ if o.rigid_body is not None:
+ rb_objects.append(o)
+
+ bpy.ops.rigidbody.objects_add()
+
+ # Ensure that the rigid body objects
+ # we've de-selected are selected again.
+ for o in rb_objects:
+ o.select_set(True)
objects = context.selected_objects
if objects: