Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2006-07-07 01:43:09 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2006-07-07 01:43:09 +0400
commitec1c1615bc81b365e5b6265700462b243f3ec7b4 (patch)
treee0576087c7d418724e9d068d722bf6e8892f8ae0 /source
parentf0d9f59e731947de28cfbd7dcac1fa37c7caf956 (diff)
Fix for bug #4600:
- Array modifier crash with vertex merging. There was a missing check for a vertex being merged with a vertex that was merged with itself.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/modifier.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 1f90c313561..93af5168012 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -640,13 +640,21 @@ static int calc_mapping(IndexMapEntry *indexMap, int oldVert, int copy)
int newVert;
if(indexMap[oldVert].merge < 0) {
+ /* vert wasn't merged, so use copy of this vert */
newVert = indexMap[oldVert].new + copy + 1;
} else if(indexMap[oldVert].merge == oldVert) {
- /* This vert was merged with itself */
+ /* vert was merged with itself */
newVert = indexMap[oldVert].new;
} else {
- /* This vert wasn't merged with itself, so increment vert number. */
- newVert = indexMap[indexMap[oldVert].merge].new + copy;
+ /* vert was merged with another vert */
+ int mergeVert = indexMap[oldVert].merge;
+
+ if (mergeVert == indexMap[mergeVert].merge)
+ /* vert merged with vert that was merged with itself */
+ newVert = indexMap[mergeVert].new;
+ else
+ /* use copy of the vert this vert was merged with */
+ newVert = indexMap[mergeVert].new + copy;
}
return newVert;