[Bf-blender-cvs] [561b52b] blender-v2.72-release: Fix T41983: Array regression with center-verts
Campbell Barton
noreply at git.blender.org
Fri Oct 3 15:25:00 CEST 2014
Commit: 561b52b3562ab4e580d67cb228bd0515427af6ef
Author: Campbell Barton
Date: Fri Oct 3 14:33:50 2014 +0200
Branches: blender-v2.72-release
https://developer.blender.org/rB561b52b3562ab4e580d67cb228bd0515427af6ef
Fix T41983: Array regression with center-verts
Array with rotation and a central pivot would fail.
Thanks to Bastien Montagne for the initial fix.
===================================================================
M source/blender/modifiers/intern/MOD_array.c
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 6679648..bae75d8 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -406,6 +406,9 @@ static DerivedMesh *arrayModifier_doArray(
const bool use_merge = amd->flags & MOD_ARR_MERGE;
const bool use_recalc_normals = (dm->dirty & DM_DIRTY_NORMALS) || use_merge;
+ const bool use_offset_ob = ((amd->offset_type & MOD_ARR_OFF_OBJ) && amd->offset_ob);
+ /* allow pole vertices to be used by many faces */
+ const bool with_follow = use_offset_ob;
int start_cap_nverts = 0, start_cap_nedges = 0, start_cap_npolys = 0, start_cap_nloops = 0;
int end_cap_nverts = 0, end_cap_nedges = 0, end_cap_npolys = 0, end_cap_nloops = 0;
@@ -454,7 +457,7 @@ static DerivedMesh *arrayModifier_doArray(
offset[3][j] += amd->scale[j] * vertarray_size(src_mvert, chunk_nverts, j);
}
- if ((amd->offset_type & MOD_ARR_OFF_OBJ) && (amd->offset_ob)) {
+ if (use_offset_ob) {
float obinv[4][4];
float result_mat[4][4];
@@ -606,10 +609,12 @@ static DerivedMesh *arrayModifier_doArray(
int target = full_doubles_map[prev_chunk_index];
if (target != -1) {
target += chunk_nverts; /* translate mapping */
- /* The rule here is to not follow mapping to chunk N-2, which could be too far
- * so if target vertex was itself mapped, then this vertex is not mapped */
- if (full_doubles_map[target] != -1) {
- target = -1;
+ if (!with_follow) {
+ /* The rule here is to not follow mapping to chunk N-2, which could be too far
+ * so if target vertex was itself mapped, then this vertex is not mapped */
+ if (full_doubles_map[target] != -1) {
+ target = -1;
+ }
}
}
full_doubles_map[this_chunk_index] = target;
@@ -624,7 +629,7 @@ static DerivedMesh *arrayModifier_doArray(
c * chunk_nverts,
chunk_nverts,
amd->merge_dist,
- false);
+ with_follow);
}
}
}
@@ -644,7 +649,7 @@ static DerivedMesh *arrayModifier_doArray(
first_chunk_start,
first_chunk_nverts,
amd->merge_dist,
- false);
+ with_follow);
}
/* start capping */
@@ -711,7 +716,12 @@ static DerivedMesh *arrayModifier_doArray(
if (use_merge) {
for (i = 0; i < result_nverts; i++) {
if (full_doubles_map[i] != -1) {
- tot_doubles++;
+ if (i == full_doubles_map[i]) {
+ full_doubles_map[i] = -1;
+ }
+ else {
+ tot_doubles++;
+ }
}
}
if (tot_doubles > 0) {
More information about the Bf-blender-cvs
mailing list