Commit: dc6d51c5555b6c5613dddb52081f2208344868e4
Author: Lukas Tönne
Date:   Tue Apr 7 11:17:19 2015 +0200
Branches: alembic
https://developer.blender.org/rBdc6d51c5555b6c5613dddb52081f2208344868e4

Take strand bounds into account when calculating bounding boxes for
dupli overrides.

===================================================================

M       source/blender/blenkernel/BKE_strands.h
M       source/blender/blenkernel/intern/object_dupli.c
M       source/blender/blenkernel/intern/strands.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_strands.h 
b/source/blender/blenkernel/BKE_strands.h
index 9475d5c..231a35f 100644
--- a/source/blender/blenkernel/BKE_strands.h
+++ b/source/blender/blenkernel/BKE_strands.h
@@ -62,6 +62,8 @@ void BKE_strands_state_clear_velocities(struct Strands 
*strands);
 
 void BKE_strands_ensure_normals(struct Strands *strands);
 
+void BKE_strands_get_minmax(struct Strands *strands, float min[3], float 
max[3], bool use_motion_state);
+
 /* ------------------------------------------------------------------------- */
 
 typedef struct StrandIterator {
diff --git a/source/blender/blenkernel/intern/object_dupli.c 
b/source/blender/blenkernel/intern/object_dupli.c
index 9dccda9..0adb847 100644
--- a/source/blender/blenkernel/intern/object_dupli.c
+++ b/source/blender/blenkernel/intern/object_dupli.c
@@ -1328,13 +1328,23 @@ int count_duplilist(Object *ob)
 
 static void dupli_cache_calc_boundbox(DupliObjectData *data)
 {
+       DupliObjectDataStrands *link;
        float min[3], max[3];
+       bool has_data = false;
        
+       INIT_MINMAX(min, max);
        if (data->dm) {
-               INIT_MINMAX(min, max);
                data->dm->getMinMax(data->dm, min, max);
+               has_data = true;
        }
-       else {
+       for (link = data->strands.first; link; link = link->next) {
+               if (link->strands) {
+                       BKE_strands_get_minmax(link->strands, min, max, true);
+                       has_data = true;
+               }
+       }
+       
+       if (!has_data) {
                zero_v3(min);
                zero_v3(max);
        }
diff --git a/source/blender/blenkernel/intern/strands.c 
b/source/blender/blenkernel/intern/strands.c
index 5ae2a76..5e3a110 100644
--- a/source/blender/blenkernel/intern/strands.c
+++ b/source/blender/blenkernel/intern/strands.c
@@ -147,3 +147,20 @@ void BKE_strands_ensure_normals(Strands *strands)
        if (use_motion_state)
                calc_normals(strands, true);
 }
+
+void BKE_strands_get_minmax(Strands *strands, float min[3], float max[3], bool 
use_motion_state)
+{
+       int numverts = strands->totverts;
+       int i;
+       
+       if (use_motion_state && strands->state) {
+               for (i = 0; i < numverts; ++i) {
+                       minmax_v3v3_v3(min, max, strands->state[i].co);
+               }
+       }
+       else {
+               for (i = 0; i < numverts; ++i) {
+                       minmax_v3v3_v3(min, max, strands->verts[i].co);
+               }
+       }
+}

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to