diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-04-09 16:54:13 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-04-10 15:49:49 +0400 |
commit | f93bc7693a530632455d3ec7acc4bce54a1f85bc (patch) | |
tree | d0e067438cbc547875b3cb77e53904c5ea2a537d /source/blender/bmesh/operators/bmo_inset.c | |
parent | 19e627cab34a04a3d01b2e3a868b7bf91d56e8f9 (diff) |
Backport revisions for the 2.70a releasev2.70a
d2660a0, 6e99fb0, 58c22d8, 83f2012 + ff21f6a, a7ed1db. cc6b106
7997e38, 9d4b54b, efb48fc, 3fc293c, 29f359c, 77c1d17, 92a539e,
c626462, f48828b, 6452d9f, 765d077, 74518b2, af16d46, 8da4936,
6babbf5, f0106d2, f88776b, ee72cba, 467596d, e21a7b3, eed3974,
71a2ff1, ccf9afd, 44d6c68, 30fdfc3, b69809c, b0a8e4c, bd57ec6,
3b0832d, 2a25676, 3977b76, fb25a86, 9bbb30b, 51abc2b, 0ebade5,
2c0e32f, 3deaf7d, ea01b24, c61eb64, f3db038, a6fb670, eedde31,
b66a954, 7ff123c, f5b79df, 7148c97, 54a8753, fcaa018, 4c73001,
7a21330, 07578be, e9a64e2, fd3de8b, ae792e9, b7712a7 + 3600622,
d9557d0, 6d973b8, 688257d, 4acb57a, 95ac6bc,
Also backported openmp changes to sculpt making it so number
of real CPU cores is used as a number of threads here.
Diffstat (limited to 'source/blender/bmesh/operators/bmo_inset.c')
-rw-r--r-- | source/blender/bmesh/operators/bmo_inset.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index a255c534736..29522b62707 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -395,6 +395,9 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) const float thickness = BMO_slot_float_get(op->slots_in, "thickness"); const float depth = BMO_slot_float_get(op->slots_in, "depth"); + /* store vert coords in normals, needed for 'use_edge_rail' */ +#define USE_VERTNORMAL_HACK + int edge_info_len = 0; BMIter iter; @@ -453,6 +456,11 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) BM_elem_index_set(e, -1); /* set_dirty! */ } + +#ifdef USE_VERTNORMAL_HACK + copy_v3_v3(e->v1->no, e->v1->co); + copy_v3_v3(e->v2->no, e->v2->co); +#endif } bm->elem_index_dirty |= BM_EDGE; @@ -564,6 +572,9 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) /* in some cases the edge doesn't split off */ if (r_vout_len == 1) { +#ifdef USE_VERTNORMAL_HACK + copy_v3_v3(vout[0]->no, vout[0]->co); +#endif MEM_freeN(vout); continue; } @@ -575,6 +586,10 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) int vert_edge_tag_tot = 0; int vecpair[2]; +#ifdef USE_VERTNORMAL_HACK + copy_v3_v3(v_split->no, v_split->co); +#endif + /* find adjacent */ BM_ITER_ELEM (e, &iter, v_split, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e, BM_ELEM_TAG) && @@ -628,9 +643,22 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) if (l_other_a->v == l_other_b->v) { /* both edges faces are adjacent, but we don't need to know the shared edge * having both verts is enough. */ - sub_v3_v3v3(tvec, l_other_a->v->co, v_split->co); + const float *co_other; + + /* note that we can't use 'l_other_a->v' directly since it + * may be inset and give a feedback loop. */ +#ifdef USE_VERTNORMAL_HACK + co_other = l_other_a->v->no; +#else + co_other = l_other_a->v->co; +#endif + + sub_v3_v3v3(tvec, co_other, v_split->co); is_mid = false; } + + /* distable gives odd results at times, see [#39288] */ +#if 0 else if (compare_v3v3(f_a->no, f_b->no, 0.001f) == false) { /* epsilon increased to fix [#32329] */ @@ -645,6 +673,7 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) copy_v3_v3(tvec, tno); is_mid = false; } +#endif } normalize_v3(tvec); |