Make sure sample and blob locations are in world space.
authorLukas Tönne <lukas.toenne@gmail.com>
Wed, 10 Dec 2014 11:18:58 +0000 (12:18 +0100)
committerLukas Tönne <lukas.toenne@gmail.com>
Wed, 10 Dec 2014 11:18:58 +0000 (12:18 +0100)
This makes setting object transforms a lot less complicated and ensures
consistency.

object_physics_meadow/blob.py
object_physics_meadow/meadow.py

index c5b3389..f9ccb1d 100644 (file)
@@ -173,12 +173,14 @@ def make_blobs(context, gridob, groundob, samples, display_radius):
     
     blobtree = KDTree(len(gridob.data.vertices))
     for i, v in enumerate(gridob.data.vertices):
+        co = gridob.matrix_world * v.co
         # note: only using 2D coordinates, otherwise weights get distorted by z offset
-        blobtree.insert((v.co[0], v.co[1], 0.0), i)
+        blobtree.insert((co[0], co[1], 0.0), i)
     blobtree.balance()
     
     for v in gridob.data.vertices:
-        ok, loc, nor, face_index = project_on_ground(groundob, v.co)
+        co = gridob.matrix_world * v.co
+        ok, loc, nor, face_index = project_on_ground(groundob, co)
         blobs.append(Blob(loc, nor, face_index) if ok else None)
     
     for loc, nor, face_index in samples:
index 39f7b60..1e6fd43 100644 (file)
@@ -47,7 +47,8 @@ def make_samples(context, gridob, groundob):
     #gen = best_candidate_gen(gridob.meadow.patch_radius, xmin, xmax, ymin, ymax)
     gen = hierarchical_dart_throw_gen(gridob.meadow.patch_radius, gridob.meadow.sampling_levels, xmin, xmax, ymin, ymax, debug)
     
-    loc2D = [(p[0], p[1]) for p in gen(gridob.meadow.seed, gridob.meadow.max_patches)]
+    mat = groundob.matrix_world
+    loc2D = [(mat * Vector(p[0:3] + (1.0,)))[0:2] for p in gen(gridob.meadow.seed, gridob.meadow.max_patches)]
     #debug.to_object(context)
     
     # project samples onto the ground object