diff options
Diffstat (limited to 'source/blender/modifiers/intern')
-rw-r--r-- | source/blender/modifiers/intern/MOD_array.c | 10 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_bevel.c | 3 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_decimate.c | 10 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_displace.c | 2 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_mask.c | 4 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_meshdeform.c | 6 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_screw.c | 145 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_triangulate.c | 9 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_util.c | 24 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_util.h | 1 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_warp.c | 2 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_wave.c | 3 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_weightvg_util.c | 2 |
13 files changed, 123 insertions, 98 deletions
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 7c47fd5862e..bc38b0e030b 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -384,18 +384,14 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, if (amd->fit_type == MOD_ARR_FITCURVE && amd->curve_ob) { Curve *cu = amd->curve_ob->data; if (cu) { - float tmp_mat[3][3]; - float scale; - - BKE_object_to_mat3(amd->curve_ob, tmp_mat); - scale = mat3_to_scale(tmp_mat); - if (!amd->curve_ob->curve_cache || !amd->curve_ob->curve_cache->path) { cu->flag |= CU_PATH; // needed for path & bevlist BKE_displist_make_curveTypes(scene, amd->curve_ob, 0); } - if (amd->curve_ob->curve_cache->path) + if (amd->curve_ob->curve_cache->path) { + float scale = mat4_to_scale(amd->curve_ob->obmat); length = scale * amd->curve_ob->curve_cache->path->totdist; + } } } diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 326ffba3e2e..6a1de92f9b2 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -158,7 +158,8 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob, } } - BM_mesh_bevel(bm, bmd->value, bmd->res, + /* TODO: add offset_kind to modifier properties to, and pass in as 3rd arg here */ + BM_mesh_bevel(bm, bmd->value, 0, bmd->res, vertex_only, bmd->lim_flags & MOD_BEVEL_WEIGHT, do_clamp, dvert, vgroup); diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c index a3569cbde68..e4399d1e416 100644 --- a/source/blender/modifiers/intern/MOD_decimate.c +++ b/source/blender/modifiers/intern/MOD_decimate.c @@ -196,9 +196,13 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /* update for display only */ dmd->face_count = bm->totface; result = CDDM_from_bmesh(bm, FALSE); - BLI_assert(bm->vtoolflagpool == NULL); /* make sure we never alloc'd this */ - BLI_assert(bm->etoolflagpool == NULL); - BLI_assert(bm->ftoolflagpool == NULL); + BLI_assert(bm->vtoolflagpool == NULL && + bm->etoolflagpool == NULL && + bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */ + BLI_assert(bm->vtable == NULL && + bm->etable == NULL && + bm->ftable == NULL); + BM_mesh_free(bm); #ifdef USE_TIMEIT diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index 25254c7a30e..61f5495bee8 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -219,7 +219,7 @@ static void displaceModifier_do( if (dmd->texture) { texres.nor = NULL; - get_texture_value(dmd->modifier.scene, dmd->texture, tex_co[i], &texres, false); + BKE_texture_get_value(dmd->modifier.scene, dmd->texture, tex_co[i], &texres, false); delta = texres.tin - dmd->midlevel; } else { diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c index 0d302fed3e6..839e30d9c1a 100644 --- a/source/blender/modifiers/intern/MOD_mask.c +++ b/source/blender/modifiers/intern/MOD_mask.c @@ -62,6 +62,8 @@ static void copyData(ModifierData *md, ModifierData *target) BLI_strncpy(tmmd->vgroup, mmd->vgroup, sizeof(tmmd->vgroup)); tmmd->flag = mmd->flag; + tmmd->mode = mmd->mode; + tmmd->ob_arm = mmd->ob_arm; } static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md)) @@ -170,7 +172,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } /* if no dverts (i.e. no data for vertex groups exists), we've got an - * inconsistent situation, so free hashes and return oirginal mesh + * inconsistent situation, so free hashes and return original mesh */ dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); if (dvert == NULL) { diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index 8386f0ff9af..e540d5c1b2c 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -199,10 +199,10 @@ static void meshdeformModifier_do( if (!mmd->object || (!mmd->bindcagecos && !mmd->bindfunc)) return; - + /* get cage derivedmesh */ if (em) { - tmpdm = editbmesh_get_derived_cage_and_final(md->scene, ob, em, &cagedm, 0); + tmpdm = editbmesh_get_derived_cage_and_final(md->scene, mmd->object, em, &cagedm, 0); if (tmpdm) tmpdm->release(tmpdm); } @@ -346,7 +346,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false); modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ - + meshdeformModifier_do(md, ob, dm, vertexCos, numVerts); if (dm && dm != derivedData) diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c index 0dd2f2770a4..7955e02cdb6 100644 --- a/source/blender/modifiers/intern/MOD_screw.c +++ b/source/blender/modifiers/intern/MOD_screw.c @@ -34,6 +34,7 @@ /* Screw modifier: revolves the edges about an axis */ +#include <limits.h> #include "DNA_meshdata_types.h" #include "DNA_object_types.h" @@ -41,19 +42,20 @@ #include "BLI_math.h" #include "BLI_utildefines.h" - #include "BKE_cdderivedmesh.h" #include "depsgraph_private.h" #include "MOD_modifiertypes.h" #include "MEM_guardedalloc.h" +#include "BLI_strict_flags.h" + /* used for gathering edge connectivity */ typedef struct ScrewVertConnect { float dist; /* distance from the center axis */ float co[3]; /* loaction relative to the transformed axis */ float no[3]; /* calc normal of the vertex */ - int v[2]; /* 2 verts on either side of this one */ + unsigned int v[2]; /* 2 verts on either side of this one */ MEdge *e[2]; /* edges on either side, a bit of a waste since each edge ref's 2 edges */ char flag; } ScrewVertConnect; @@ -61,18 +63,20 @@ typedef struct ScrewVertConnect { typedef struct ScrewVertIter { ScrewVertConnect *v_array; ScrewVertConnect *v_poin; - int v; - int v_other; + unsigned int v, v_other; MEdge *e; } ScrewVertIter; +#define SV_UNUSED (UINT_MAX) +#define SV_INVALID ((UINT_MAX) - 1) +#define SV_IS_VALID(v) (v < SV_INVALID) -static void screwvert_iter_init(ScrewVertIter *iter, ScrewVertConnect *array, int v_init, int dir) +static void screwvert_iter_init(ScrewVertIter *iter, ScrewVertConnect *array, unsigned int v_init, unsigned int dir) { iter->v_array = array; iter->v = v_init; - if (v_init >= 0) { + if (SV_IS_VALID(v_init)) { iter->v_poin = &array[v_init]; iter->v_other = iter->v_poin->v[dir]; iter->e = iter->v_poin->e[!dir]; @@ -94,7 +98,7 @@ static void screwvert_iter_step(ScrewVertIter *iter) iter->v_other = iter->v; iter->v = iter->v_poin->v[0]; } - if (iter->v >= 0) { + if (SV_IS_VALID(iter->v)) { iter->v_poin = &iter->v_array[iter->v]; iter->e = iter->v_poin->e[(iter->v_poin->e[0] == iter->e)]; } @@ -109,7 +113,7 @@ static void initData(ModifierData *md) { ScrewModifierData *ltmd = (ScrewModifierData *) md; ltmd->ob_axis = NULL; - ltmd->angle = M_PI * 2.0; + ltmd->angle = (float)(M_PI * 2.0); ltmd->axis = 2; ltmd->flag = MOD_SCREW_SMOOTH_SHADING; ltmd->steps = 16; @@ -143,16 +147,19 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, int *origindex; int mpoly_index = 0; - int step; - int i, j; + unsigned int step; + unsigned int i, j; unsigned int i1, i2; - int step_tot = useRenderParams ? ltmd->render_steps : ltmd->steps; - const int do_flip = ltmd->flag & MOD_SCREW_NORMAL_FLIP ? 1 : 0; - int maxVerts = 0, maxEdges = 0, maxPolys = 0; - const unsigned int totvert = dm->getNumVerts(dm); - const unsigned int totedge = dm->getNumEdges(dm); - - char axis_char = 'X', close; + unsigned int step_tot = useRenderParams ? ltmd->render_steps : ltmd->steps; + const bool do_flip = ltmd->flag & MOD_SCREW_NORMAL_FLIP ? 1 : 0; + unsigned int maxVerts = 0, maxEdges = 0, maxPolys = 0; + const unsigned int totvert = (unsigned int)dm->getNumVerts(dm); + const unsigned int totedge = (unsigned int)dm->getNumEdges(dm); + const unsigned int totpoly = (unsigned int)dm->getNumPolys(dm); + unsigned int *edge_poly_map = NULL; + + char axis_char = 'X'; + bool close; float angle = ltmd->angle; float screw_ofs = ltmd->screw_ofs; float axis_vec[3] = {0.0f, 0.0f, 0.0f}; @@ -162,14 +169,14 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, float mtx_tx_inv[4][4]; /* inverted */ float mtx_tmp_a[4][4]; - int vc_tot_linked = 0; + unsigned int vc_tot_linked = 0; short other_axis_1, other_axis_2; float *tmpf1, *tmpf2; - int edge_offset; + unsigned int edge_offset; - MPoly *mpoly_new, *mp_new; - MLoop *mloop_new, *ml_new; + MPoly *mpoly_orig, *mpoly_new, *mp_new; + MLoop *mloop_orig, *mloop_new, *ml_new; MEdge *medge_orig, *med_orig, *med_new, *med_new_firstloop, *medge_new; MVert *mvert_new, *mvert_orig, *mv_orig, *mv_new, *mv_new_base; @@ -259,7 +266,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } else { /* exis char is used by i_rotate*/ - axis_char += ltmd->axis; /* 'X' + axis */ + axis_char = (char)(axis_char + ltmd->axis); /* 'X' + axis */ /* useful to be able to use the axis vec in some cases still */ zero_v3(axis_vec); @@ -267,8 +274,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } /* apply the multiplier */ - angle *= ltmd->iter; - screw_ofs *= ltmd->iter; + angle *= (float)ltmd->iter; + screw_ofs *= (float)ltmd->iter; /* multiplying the steps is a bit tricky, this works best */ step_tot = ((step_tot + 1) * ltmd->iter) - (ltmd->iter - 1); @@ -299,7 +306,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, maxPolys = totedge * (step_tot - 1); } - result = CDDM_from_template(dm, maxVerts, maxEdges, 0, maxPolys * 4, maxPolys); + result = CDDM_from_template(dm, (int)maxVerts, (int)maxEdges, 0, (int)maxPolys * 4, (int)maxPolys); /* copy verts from mesh */ mvert_orig = dm->getVertArray(dm); @@ -311,12 +318,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, medge_new = result->getEdgeArray(result); if (!CustomData_has_layer(&result->polyData, CD_ORIGINDEX)) { - CustomData_add_layer(&result->polyData, CD_ORIGINDEX, CD_CALLOC, NULL, maxPolys); + CustomData_add_layer(&result->polyData, CD_ORIGINDEX, CD_CALLOC, NULL, (int)maxPolys); } origindex = CustomData_get_layer(&result->polyData, CD_ORIGINDEX); - DM_copy_vert_data(dm, result, 0, 0, totvert); /* copy first otherwise this overwrites our own vertex normals */ + DM_copy_vert_data(dm, result, 0, 0, (int)totvert); /* copy first otherwise this overwrites our own vertex normals */ /* Set the locations of the first set of verts */ @@ -333,6 +340,29 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, med_new->flag = med_orig->flag & ~ME_LOOSEEDGE; } + /* build polygon -> edge map */ + if (totpoly) { + MPoly *mp_orig; + + mpoly_orig = dm->getPolyArray(dm); + mloop_orig = dm->getLoopArray(dm); + edge_poly_map = MEM_mallocN(sizeof(*edge_poly_map) * totedge, __func__); + memset(edge_poly_map, 0xff, sizeof(*edge_poly_map) * totedge); + + for (i = 0, mp_orig = mpoly_orig; i < totpoly; i++, mp_orig++) { + MLoop *ml_orig = &mloop_orig[mp_orig->loopstart]; + int k; + for (k = 0; k < mp_orig->totloop; k++, ml_orig++) { + edge_poly_map[ml_orig->e] = i; + + /* also order edges based on faces */ + if (medge_new[ml_orig->e].v1 != ml_orig->v) { + SWAP(unsigned int, medge_new[ml_orig->e].v1, medge_new[ml_orig->e].v2); + } + } + } + } + if (ltmd->flag & MOD_SCREW_NORMAL_CALC) { /* * Normal Calculation (for face flipping) @@ -385,7 +415,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, vc->flag = 0; vc->e[0] = vc->e[1] = NULL; - vc->v[0] = vc->v[1] = -1; + vc->v[0] = vc->v[1] = SV_UNUSED; mul_m4_v3(mtx_tx, vc->co); /* length in 2d, don't sqrt because this is only for comparison */ @@ -403,7 +433,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, vc->flag = 0; vc->e[0] = vc->e[1] = NULL; - vc->v[0] = vc->v[1] = -1; + vc->v[0] = vc->v[1] = SV_UNUSED; /* length in 2d, don't sqrt because this is only for comparison */ vc->dist = vc->co[other_axis_1] * vc->co[other_axis_1] + @@ -417,31 +447,31 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, for (i = 0; i < totedge; i++, med_new++) { vc = &vert_connect[med_new->v1]; - if (vc->v[0] == -1) { /* unused */ + if (vc->v[0] == SV_UNUSED) { /* unused */ vc->v[0] = med_new->v2; vc->e[0] = med_new; } - else if (vc->v[1] == -1) { + else if (vc->v[1] == SV_UNUSED) { vc->v[1] = med_new->v2; vc->e[1] = med_new; } else { - vc->v[0] = vc->v[1] = -2; /* error value - don't use, 3 edges on vert */ + vc->v[0] = vc->v[1] = SV_INVALID; /* error value - don't use, 3 edges on vert */ } vc = &vert_connect[med_new->v2]; /* same as above but swap v1/2 */ - if (vc->v[0] == -1) { /* unused */ + if (vc->v[0] == SV_UNUSED) { /* unused */ vc->v[0] = med_new->v1; vc->e[0] = med_new; } - else if (vc->v[1] == -1) { + else if (vc->v[1] == SV_UNUSED) { vc->v[1] = med_new->v1; vc->e[1] = med_new; } else { - vc->v[0] = vc->v[1] = -2; /* error value - don't use, 3 edges on vert */ + vc->v[0] = vc->v[1] = SV_INVALID; /* error value - don't use, 3 edges on vert */ } } @@ -452,12 +482,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, * so resulting faces are flipped the right way */ vc_tot_linked = 0; /* count the number of linked verts for this loop */ if (vc->flag == 0) { - int v_best = -1, ed_loop_closed = 0; /* vert and vert new */ + unsigned int v_best = SV_UNUSED, ed_loop_closed = 0; /* vert and vert new */ ScrewVertIter lt_iter; float fl = -1.0f; /* compiler complains if not initialized, but it should be initialized below */ - int ed_loop_flip = 0; + bool ed_loop_flip = false; /*printf("Loop on connected vert: %i\n", i);*/ @@ -471,7 +501,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /*printf("\t\tVERT: %i\n", lt_iter.v);*/ if (lt_iter.v_poin->flag) { /*printf("\t\t\tBreaking Found end\n");*/ - //endpoints[0] = endpoints[1] = -1; + //endpoints[0] = endpoints[1] = SV_UNUSED; ed_loop_closed = 1; /* circle */ break; } @@ -493,7 +523,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } /* now we have a collection of used edges. flip their edges the right way*/ - /*if (v_best != -1) - */ + /*if (v_best != SV_UNUSED) - */ /*printf("Done Looking - vc_tot_linked: %i\n", vc_tot_linked);*/ @@ -507,7 +537,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /* edge connects on each side! */ - if ((vc_tmp->v[0] > -1) && (vc_tmp->v[1] > -1)) { + if (SV_IS_VALID(vc_tmp->v[0]) && SV_IS_VALID(vc_tmp->v[1])) { /*printf("Verts on each side (%i %i)\n", vc_tmp->v[0], vc_tmp->v[1]);*/ /* find out which is higher */ @@ -536,7 +566,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } } } - else if (vc_tmp->v[0] >= 0) { /*vertex only connected on 1 side */ + else if (SV_IS_VALID(vc_tmp->v[0])) { /*vertex only connected on 1 side */ /*printf("Verts on ONE side (%i %i)\n", vc_tmp->v[0], vc_tmp->v[1]);*/ if (tmpf1[ltmd->axis] < vc_tmp->co[ltmd->axis]) { /* best is above */ ed_loop_flip = 1; @@ -577,7 +607,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /* If this is the vert off the best vert and * the best vert has 2 edges connected too it * then swap the flip direction */ - if (j == 1 && (vc_tmp->v[0] > -1) && (vc_tmp->v[1] > -1)) + if (j == 1 && SV_IS_VALID(vc_tmp->v[0]) && SV_IS_VALID(vc_tmp->v[1])) ed_loop_flip = !ed_loop_flip; while (lt_iter.v_poin && lt_iter.v_poin->flag != 2) { @@ -622,8 +652,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, * * calculate vertex normals that can be propagated on lathing * use edge connectivity work this out */ - if (vc->v[0] >= 0) { - if (vc->v[1] >= 0) { + if (SV_IS_VALID(vc->v[0])) { + if (SV_IS_VALID(vc->v[1])) { /* 2 edges connedted */ /* make 2 connecting vert locations relative to the middle vert */ sub_v3_v3v3(tmp_vec1, mvert_new[vc->v[0]].co, mvert_new[i].co); @@ -689,12 +719,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /* Add Faces */ for (step = 1; step < step_tot; step++) { - const int varray_stride = totvert * step; + const unsigned int varray_stride = totvert * step; float step_angle; float nor_tx[3]; float mat[4][4]; /* Rotation Matrix */ - step_angle = (angle / (step_tot - (!close))) * step; + step_angle = (angle / (float)(step_tot - (!close))) * (float)step; if (ltmd->ob_axis) { axis_angle_normalized_to_mat3(mat3, axis_vec, step_angle); @@ -710,7 +740,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, madd_v3_v3fl(mat[3], axis_vec, screw_ofs * ((float)step / (float)(step_tot - 1))); /* copy a slice */ - DM_copy_vert_data(dm, result, 0, varray_stride, totvert); + DM_copy_vert_data(dm, result, 0, (int)varray_stride, (int)totvert); mv_new_base = mvert_new; mv_new = &mvert_new[varray_stride]; /* advance to the next slice */ @@ -757,7 +787,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, if (close) { /* last loop of edges, previous loop dosnt account for the last set of edges */ - const int varray_stride = (step_tot - 1) * totvert; + const unsigned int varray_stride = (step_tot - 1) * totvert; for (i = 0; i < totvert; i++) { med_new->v1 = i; @@ -775,10 +805,19 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, edge_offset = totedge + (totvert * (step_tot - (close ? 0 : 1))); for (i = 0; i < totedge; i++, med_new_firstloop++) { + short mat_nr; + /* for each edge, make a cylinder of quads */ i1 = med_new_firstloop->v1; i2 = med_new_firstloop->v2; + if (totpoly && (edge_poly_map[i] != UINT_MAX)) { + mat_nr = mpoly_orig[edge_poly_map[i]].mat_nr; + } + else { + mat_nr = 0; + } + for (step = 0; step < step_tot - 1; step++) { /* new face */ @@ -808,6 +847,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, mp_new->loopstart = mpoly_index * 4; mp_new->totloop = 4; + mp_new->mat_nr = mat_nr; mp_new->flag = mpoly_flag; origindex[mpoly_index] = ORIGINDEX_NONE; mp_new++; @@ -853,6 +893,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, mp_new->loopstart = mpoly_index * 4; mp_new->totloop = 4; + mp_new->mat_nr = mat_nr; mp_new->flag = mpoly_flag; origindex[mpoly_index] = ORIGINDEX_NONE; mp_new++; @@ -871,10 +912,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /* validate loop edges */ #if 0 { - i = 0; + unsigned i = 0; printf("\n"); for (; i < maxPolys * 4; i += 4) { - int ii; + unsigned int ii; ml_new = mloop_new + i; ii = findEd(medge_new, maxEdges, ml_new[0].v, ml_new[1].v); printf("%d %d -- ", ii, ml_new[0].e); @@ -896,6 +937,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, } #endif + if (edge_poly_map) { + MEM_freeN(edge_poly_map); + } + if ((ltmd->flag & MOD_SCREW_NORMAL_CALC) == 0) { result->dirty |= DM_DIRTY_NORMALS; } diff --git a/source/blender/modifiers/intern/MOD_triangulate.c b/source/blender/modifiers/intern/MOD_triangulate.c index ffc813068b8..d519c981a23 100644 --- a/source/blender/modifiers/intern/MOD_triangulate.c +++ b/source/blender/modifiers/intern/MOD_triangulate.c @@ -36,7 +36,7 @@ #include "bmesh.h" #include "bmesh_tools.h" -static DerivedMesh *triangulate_dm(DerivedMesh *dm, const int flag) +static DerivedMesh *triangulate_dm(DerivedMesh *dm, const int quad_method, const int ngon_method) { DerivedMesh *result; BMesh *bm; @@ -45,7 +45,7 @@ static DerivedMesh *triangulate_dm(DerivedMesh *dm, const int flag) bm = DM_to_bmesh(dm, true); - BM_mesh_triangulate(bm, (flag & MOD_TRIANGULATE_BEAUTY), false, NULL, NULL); + BM_mesh_triangulate(bm, quad_method, ngon_method, false, NULL, NULL); result = CDDM_from_bmesh(bm, FALSE); BM_mesh_free(bm); @@ -69,7 +69,8 @@ static void initData(ModifierData *md) /* Enable in editmode by default */ md->mode |= eModifierMode_Editmode; - tmd->flag = MOD_TRIANGULATE_BEAUTY; + tmd->quad_method = MOD_TRIANGULATE_QUAD_SHORTEDGE; + tmd->ngon_method = MOD_TRIANGULATE_NGON_BEAUTY; } @@ -88,7 +89,7 @@ static DerivedMesh *applyModifier(ModifierData *md, { TriangulateModifierData *tmd = (TriangulateModifierData *)md; DerivedMesh *result; - if (!(result = triangulate_dm(dm, tmd->flag))) { + if (!(result = triangulate_dm(dm, tmd->quad_method, tmd->ngon_method))) { return dm; } diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index 230931a1a33..e9fabcd1fd0 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -70,30 +70,6 @@ void modifier_init_texture(Scene *scene, Tex *tex) BKE_image_user_frame_calc(&tex->iuser, scene->r.cfra, 0); } -void get_texture_value(Scene *scene, Tex *texture, float *tex_co, TexResult *texres, bool use_color_management) -{ - int result_type; - bool do_color_manage = false; - - if (use_color_management) { - do_color_manage = BKE_scene_check_color_management_enabled(scene); - } - - /* no node textures for now */ - result_type = multitex_ext_safe(texture, tex_co, texres, NULL, do_color_manage); - - /* if the texture gave an RGB value, we assume it didn't give a valid - * intensity, since this is in the context of modifiers don't use perceptual color conversion. - * if the texture didn't give an RGB value, copy the intensity across - */ - if (result_type & TEX_RGB) { - texres->tin = (1.0f / 3.0f) * (texres->tr + texres->tg + texres->tb); - } - else { - copy_v3_fl(&texres->tr, texres->tin); - } -} - void get_texture_coords(MappingInfoModifierData *dmd, Object *ob, DerivedMesh *dm, float (*co)[3], float (*texco)[3], diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h index 25632eb5b80..b4dcdc1721a 100644 --- a/source/blender/modifiers/intern/MOD_util.h +++ b/source/blender/modifiers/intern/MOD_util.h @@ -41,7 +41,6 @@ struct Tex; struct TexResult; void modifier_init_texture(struct Scene *scene, struct Tex *texture); -void get_texture_value(struct Scene *scene, struct Tex *texture, float *tex_co, struct TexResult *texres, bool do_color_manage); void get_texture_coords(struct MappingInfoModifierData *dmd, struct Object *ob, struct DerivedMesh *dm, float (*co)[3], float (*texco)[3], int numVerts); void modifier_vgroup_cache(struct ModifierData *md, float (*vertexCos)[3]); diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 4fac201377a..83b05ae708a 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -282,7 +282,7 @@ static void warpModifier_do(WarpModifierData *wmd, Object *ob, if (tex_co) { TexResult texres; texres.nor = NULL; - get_texture_value(wmd->modifier.scene, wmd->texture, tex_co[i], &texres, false); + BKE_texture_get_value(wmd->modifier.scene, wmd->texture, tex_co[i], &texres, false); fac *= texres.tin; } diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c index 43dc1ba4eb9..168907e293c 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.c @@ -48,6 +48,7 @@ #include "BKE_library.h" #include "BKE_object.h" #include "BKE_scene.h" +#include "BKE_texture.h" #include "depsgraph_private.h" @@ -306,7 +307,7 @@ static void waveModifier_do(WaveModifierData *md, if (wmd->texture) { TexResult texres; texres.nor = NULL; - get_texture_value(wmd->modifier.scene, wmd->texture, tex_co[i], &texres, false); + BKE_texture_get_value(wmd->modifier.scene, wmd->texture, tex_co[i], &texres, false); amplit *= texres.tin; } diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.c b/source/blender/modifiers/intern/MOD_weightvg_util.c index e2267addd53..5c3b87bd92c 100644 --- a/source/blender/modifiers/intern/MOD_weightvg_util.c +++ b/source/blender/modifiers/intern/MOD_weightvg_util.c @@ -164,7 +164,7 @@ void weightvg_do_mask(int num, const int *indices, float *org_w, const float *ne do_color_manage = tex_use_channel != MOD_WVG_MASK_TEX_USE_INT; texres.nor = NULL; - get_texture_value(scene, texture, tex_co[idx], &texres, do_color_manage); + BKE_texture_get_value(scene, texture, tex_co[idx], &texres, do_color_manage); /* Get the good channel value... */ switch (tex_use_channel) { case MOD_WVG_MASK_TEX_USE_INT: |