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
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-04-09 16:54:13 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-04-10 15:49:49 +0400
commitf93bc7693a530632455d3ec7acc4bce54a1f85bc (patch)
treed0e067438cbc547875b3cb77e53904c5ea2a537d /source/blender/bmesh/operators/bmo_inset.c
parent19e627cab34a04a3d01b2e3a868b7bf91d56e8f9 (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.c31
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);