Use of the ObjectSelection context manager ensures that the current
authorLukas Tönne <lukas.toenne@gmail.com>
Wed, 10 Dec 2014 14:00:24 +0000 (15:00 +0100)
committerLukas Tönne <lukas.toenne@gmail.com>
Wed, 10 Dec 2014 14:00:24 +0000 (15:00 +0100)
selection is restored after running operators.

object_physics_meadow/patch.py
object_physics_meadow/ui.py

index f00c274..9c035df 100644 (file)
@@ -129,30 +129,29 @@ def make_patches(context, gridob, template_objects):
     patch_group_clear(context)
     
     temp_copies = {}
-    with ObjectSelection():
-        for tempob in template_objects:
-            # create patch copies
-            copies = make_copies(scene, gridob, tempob)
+    for tempob in template_objects:
+        # create patch copies
+        copies = make_copies(scene, gridob, tempob)
+        
+        # customize copies
+        for ob, (index, vert) in zip(copies, enumerate(gridob.data.vertices)):
+            # put it in the patch group
+            patch_group_assign(context, ob)
+            # assign the index for mapping
+            ob.meadow.blob_index = index
             
-            # customize copies
-            for ob, (index, vert) in zip(copies, enumerate(gridob.data.vertices)):
-                # put it in the patch group
-                patch_group_assign(context, ob)
-                # assign the index for mapping
-                ob.meadow.blob_index = index
-                
-                # apply transform
-                vertmat = Matrix.Translation(vert.co)
-                duplimat = gridmat * vertmat
-                ob.matrix_world = duplimat
-                
-                # XXX WARNING: having lots of objects in the scene slows down
-                # the make-duplis-real operator to an absolute crawl!!
-                # Therefore we unlink all copies here until the copying
-                # of other objects is done
-                scene.objects.unlink(ob)
+            # apply transform
+            vertmat = Matrix.Translation(vert.co)
+            duplimat = gridmat * vertmat
+            ob.matrix_world = duplimat
             
-            temp_copies[tempob] = copies
+            # XXX WARNING: having lots of objects in the scene slows down
+            # the make-duplis-real operator to an absolute crawl!!
+            # Therefore we unlink all copies here until the copying
+            # of other objects is done
+            scene.objects.unlink(ob)
+        
+        temp_copies[tempob] = copies
     
     # copying is done, re-link stuff to the scene
     for tempob, copies in temp_copies.items():
@@ -281,15 +280,14 @@ def patch_objects_rebake(context):
     settings = _settings.get(context)
     wm = context.window_manager
     
-    with ObjectSelection():
-        # we disable all sim modifiers selectively to make sure only one sim has to be calculated at a time
-        with BakeSimContext():
-            scene = context.scene
-            curframe = scene.frame_current
-            
-            # XXX have to set this because bake operator only bakes up to the last frame ...
-            scene.frame_current = scene.frame_end
-            
-            bake_all(context)
-            
-            scene.frame_set(curframe)
+    # we disable all sim modifiers selectively to make sure only one sim has to be calculated at a time
+    with BakeSimContext():
+        scene = context.scene
+        curframe = scene.frame_current
+        
+        # XXX have to set this because bake operator only bakes up to the last frame ...
+        scene.frame_current = scene.frame_end
+        
+        bake_all(context)
+        
+        scene.frame_set(curframe)
index 834507e..b032a7b 100644 (file)
@@ -24,6 +24,7 @@ from bpy.props import *
 
 from object_physics_meadow import meadow, settings as _settings, patch, blob
 from object_physics_meadow.settings import find_meadow_object
+from object_physics_meadow.util import *
 
 class OBJECT_PT_Meadow(Panel):
     """Settings for meadow components"""
@@ -133,7 +134,8 @@ class MakeBlobsOperator(MeadowOperatorBase, Operator):
             self.report({'ERROR'}, "Could not find meadow Blob Grid object")
             return {'CANCELLED'}
         
-        meadow.make_blobs(context, blobgridob, groundob)
+        with ObjectSelection():
+            meadow.make_blobs(context, blobgridob, groundob)
         
         return {'FINISHED'}
 
@@ -162,7 +164,8 @@ class MakePatchesOperator(MeadowOperatorBase, Operator):
             self.report({'ERROR'}, "Could not find meadow Blob Grid object")
             return {'CANCELLED'}
         
-        meadow.make_patches(context, blobgridob, groundob)
+        with ObjectSelection():
+            meadow.make_patches(context, blobgridob, groundob)
         
         return {'FINISHED'}
 
@@ -192,7 +195,8 @@ class RebakeMeadowOperator(MeadowOperatorBase, Operator):
     bl_options = {'REGISTER', 'UNDO'}
     
     def execute(self, context):
-        patch.patch_objects_rebake(context)
+        with ObjectSelection():
+            patch.patch_objects_rebake(context)
         return {'FINISHED'}