diff options
author | Martin Poirier <theeth@yahoo.com> | 2007-11-21 01:25:25 +0300 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2007-11-21 01:25:25 +0300 |
commit | 11fc4432b96263965bb0ec47f4a0eb133d5efc6c (patch) | |
tree | 530f99bfa77f20246d9c2c2f82e5afde158abe32 /source/blender/src/reeb.c | |
parent | 45e14ed270c1d64c46a4f5423184d07e995a2e44 (diff) |
Adding subdivisions by correlation.
This is much nicer than subdivision by angle but is somewhat less intuitive for users.
Added Bucket arc iterator, removing a lot of weird duplicated code in skeleton generator.
Diffstat (limited to 'source/blender/src/reeb.c')
-rw-r--r-- | source/blender/src/reeb.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/source/blender/src/reeb.c b/source/blender/src/reeb.c index d836b4ca25e..54b56065d06 100644 --- a/source/blender/src/reeb.c +++ b/source/blender/src/reeb.c @@ -1922,6 +1922,62 @@ void weightToVCol(EditMesh *em) } } +/****************************************** BUCKET ITERATOR **************************************************/ + +void initArcIterator(ReebArcIterator *iter, ReebArc *arc, ReebNode *head) +{ + iter->arc = arc; + + if (head == arc->v1) + { + iter->start = 0; + iter->end = arc->bcount - 1; + iter->stride = 1; + } + else + { + iter->start = arc->bcount - 1; + iter->end = 0; + iter->stride = -1; + } + + iter->index = iter->start - iter->stride; +} + +void initArcIterator2(ReebArcIterator *iter, ReebArc *arc, int start, int end) +{ + iter->arc = arc; + + iter->start = start; + iter->end = end; + + if (end > start) + { + iter->stride = 1; + } + else + { + iter->stride = -1; + } + + iter->index = iter->start - iter->stride; +} + +EmbedBucket * nextBucket(ReebArcIterator *iter) +{ + EmbedBucket *result = NULL; + + if (iter->index != iter->end) + { + iter->index += iter->stride; + result = &(iter->arc->buckets[iter->index]); + } + + return result; +} + +/****************************************** MAIN EDIT METHOD **************************************************/ + void generateSkeleton(void) { EditMesh *em = G.editMesh; |