Keep the outliner sane by making the ground object the parent of copied
authorLukas Tönne <lukas.toenne@gmail.com>
Wed, 10 Dec 2014 14:09:31 +0000 (15:09 +0100)
committerLukas Tönne <lukas.toenne@gmail.com>
Wed, 10 Dec 2014 14:09:31 +0000 (15:09 +0100)
objects and duplicators.

object_physics_meadow/blob.py
object_physics_meadow/meadow.py
object_physics_meadow/patch.py
object_physics_meadow/util.py

index 75e261c..8c6193a 100644 (file)
@@ -185,6 +185,8 @@ def make_blobs(context, gridob, groundob, samples, display_radius):
             ob = make_blob_object(context, index, blob.loc, samples, display_radius)
             # put it in the blob group
             blob_group_assign(context, ob)
+            # use ground object as parent to keep the outliner clean
+            set_object_parent(ob, groundob)
 
 #-----------------------------------------------------------------------
 
@@ -266,9 +268,11 @@ def setup_blob_duplis(context, groundob, display_radius):
                 # put the duplicator in the patch group,
                 # so it gets removed together with patch copies
                 patch_group_assign(context, dob)
+                # use ground object as parent to keep the outliner clean
+                set_object_parent(dob, groundob)
                 
                 dob.dupli_type = 'FACES'
-                
+
                 ob.parent = dob
                 # make sure duplis are placed at the sample locations
                 if ob.meadow.use_centered:
index 1e6fd43..245de8f 100644 (file)
@@ -72,5 +72,5 @@ def make_blobs(context, gridob, groundob):
 def make_patches(context, gridob, groundob):
     scene = context.scene
     template_objects = [ob for ob in scene.objects if ob.meadow.type == 'TEMPLATE']
-    patch.make_patches(context, gridob, template_objects)
+    patch.make_patches(context, groundob, gridob, template_objects)
     blob.setup_blob_duplis(context, groundob, 0.333 * gridob.meadow.patch_radius)
index 9c035df..9eb1687 100644 (file)
@@ -122,7 +122,7 @@ def make_copies(scene, gridob, childob):
     
     return duplicates
 
-def make_patches(context, gridob, template_objects):
+def make_patches(context, groundob, gridob, template_objects):
     scene = context.scene
     gridmat = gridob.matrix_world
     
@@ -139,6 +139,8 @@ def make_patches(context, gridob, template_objects):
             patch_group_assign(context, ob)
             # assign the index for mapping
             ob.meadow.blob_index = index
+            # use ground object as parent to keep the outliner clean
+            set_object_parent(ob, groundob)
             
             # apply transform
             vertmat = Matrix.Translation(vert.co)
index 3437bf3..5b4af67 100644 (file)
@@ -88,6 +88,14 @@ def delete_objects(context, objects):
 
 #-----------------------------------------------------------------------
 
+# set the object parent without modifying world space transform
+def set_object_parent(ob, parent):
+    mat = ob.matrix_world
+    ob.parent = parent
+    ob.matrix_world = mat
+
+#-----------------------------------------------------------------------
+
 class Profiling():
     def __init__(self, name):
         self.name = name