[Bf-blender-cvs] [dc6d51c] alembic: Take strand bounds into account when calculating bounding boxes for dupli overrides.

Lukas Tönne noreply at git.blender.org
Tue Apr 7 11:17:57 CEST 2015


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);
+		}
+	}
+}




More information about the Bf-blender-cvs mailing list