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:
authorCampbell Barton <ideasman42@gmail.com>2013-04-07 15:41:37 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-04-07 15:41:37 +0400
commitb1ac23c5bd63cdf5bb6cf27fb62dc332d8d9cc39 (patch)
tree29e3348b47b7180c3295e843f7bd3c84c48aa2fc /source/blender/bmesh/intern
parenteb495b2a8a331e74bdcedd9c0d5415b4c20a136d (diff)
Mesh Tool,
inset interpolation now works for 'inset_region', enabled by default. Example: http://www.graphicall.org/ftp/ideasman42/inset_interpolation_new.png
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r--source/blender/bmesh/intern/bmesh_interp.c36
-rw-r--r--source/blender/bmesh/intern/bmesh_interp.h2
-rw-r--r--source/blender/bmesh/intern/bmesh_opdefines.c1
3 files changed, 28 insertions, 11 deletions
diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c
index 120618a90e2..b6585811fd5 100644
--- a/source/blender/bmesh/intern/bmesh_interp.c
+++ b/source/blender/bmesh/intern/bmesh_interp.c
@@ -167,6 +167,29 @@ void BM_data_interp_face_vert_edge(BMesh *bm, BMVert *v1, BMVert *UNUSED(v2), BM
*
* \note Only handles loop customdata. multires is handled.
*/
+void BM_face_interp_from_face_ex(BMesh *bm, BMFace *target, BMFace *source,
+ void **blocks, float (*cos_2d)[2], float axis_mat[3][3])
+{
+ BMLoop *l_iter;
+ BMLoop *l_first;
+
+ float *w = BLI_array_alloca(w, source->len);
+ float co[2];
+ int i;
+
+ if (source != target)
+ BM_elem_attrs_copy(bm, bm, source, target);
+
+ /* interpolate */
+ i = 0;
+ l_iter = l_first = BM_FACE_FIRST_LOOP(target);
+ do {
+ mul_v2_m3v3(co, axis_mat, l_iter->v->co);
+ interp_weights_poly_v2(w, cos_2d, source->len, co);
+ CustomData_bmesh_interp(&bm->ldata, blocks, w, NULL, source->len, l_iter->head.data);
+ } while (i++, (l_iter = l_iter->next) != l_first);
+}
+
void BM_face_interp_from_face(BMesh *bm, BMFace *target, BMFace *source)
{
BMLoop *l_iter;
@@ -176,14 +199,11 @@ void BM_face_interp_from_face(BMesh *bm, BMFace *target, BMFace *source)
float (*cos_2d)[2] = BLI_array_alloca(cos_2d, source->len);
float *w = BLI_array_alloca(w, source->len);
float axis_mat[3][3]; /* use normal to transform into 2d xy coords */
- float co[2];
int i;
/* convert the 3d coords into 2d for projection */
axis_dominant_v3_to_m3(axis_mat, source->no);
- BM_elem_attrs_copy(bm, bm, source, target);
-
i = 0;
l_iter = l_first = BM_FACE_FIRST_LOOP(source);
do {
@@ -191,14 +211,8 @@ void BM_face_interp_from_face(BMesh *bm, BMFace *target, BMFace *source)
blocks[i] = l_iter->head.data;
} while (i++, (l_iter = l_iter->next) != l_first);
- /* interpolate */
- i = 0;
- l_iter = l_first = BM_FACE_FIRST_LOOP(target);
- do {
- mul_v2_m3v3(co, axis_mat, l_iter->v->co);
- interp_weights_poly_v2(w, cos_2d, source->len, co);
- CustomData_bmesh_interp(&bm->ldata, blocks, w, NULL, source->len, l_iter->head.data);
- } while (i++, (l_iter = l_iter->next) != l_first);
+ BM_face_interp_from_face_ex(bm, target, source,
+ blocks, cos_2d, axis_mat);
}
/**
diff --git a/source/blender/bmesh/intern/bmesh_interp.h b/source/blender/bmesh/intern/bmesh_interp.h
index 3563ed1f40e..1a1ca241224 100644
--- a/source/blender/bmesh/intern/bmesh_interp.h
+++ b/source/blender/bmesh/intern/bmesh_interp.h
@@ -42,6 +42,8 @@ void BM_data_layer_copy(BMesh *bm, CustomData *data, int type, int src_n, int d
float BM_elem_float_data_get(CustomData *cd, void *element, int type);
void BM_elem_float_data_set(CustomData *cd, void *element, int type, const float val);
+void BM_face_interp_from_face_ex(BMesh *bm, BMFace *target, BMFace *source,
+ void **blocks, float (*cos_2d)[2], float axis_mat[3][3]);
void BM_face_interp_from_face(BMesh *bm, BMFace *target, BMFace *source);
void BM_loop_interp_from_face(BMesh *bm, BMLoop *target, BMFace *source,
const bool do_vertex, const bool do_multires);
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index 41e18756559..9006f3893a2 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -1533,6 +1533,7 @@ static BMOpDefine bmo_inset_region_def = {
{{"faces", BMO_OP_SLOT_ELEMENT_BUF, {BM_FACE}}, /* input faces */
{"use_boundary", BMO_OP_SLOT_BOOL},
{"use_even_offset", BMO_OP_SLOT_BOOL},
+ {"use_interpolate", BMO_OP_SLOT_BOOL},
{"use_relative_offset", BMO_OP_SLOT_BOOL},
{"thickness", BMO_OP_SLOT_FLT},
{"depth", BMO_OP_SLOT_FLT},