[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