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:
authorBastien Montagne <montagne29@wanadoo.fr>2018-06-19 20:12:37 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2018-06-19 20:15:11 +0300
commitcc3c91c27fca0ec6e6b15042563a25ca29062bf5 (patch)
tree0c1e88efd266350d6781470452e1fd6428c142b1 /source/blender/editors/sculpt_paint
parentdb0563e995f4bb63e7a05faee3c08ea18d5a28eb (diff)
Cleanup: remove DerivedMesh from WPaint Gradient tool code.
Name cleanup to follow.
Diffstat (limited to 'source/blender/editors/sculpt_paint')
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
index 7c2977a0788..4e808230f37 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
@@ -726,8 +726,6 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
Depsgraph *depsgraph = CTX_data_depsgraph(C);
- DerivedMesh *dm = mesh_get_derived_final(depsgraph, scene, ob, scene->customdata_mask);
-
DMGradient_userData data = {NULL};
if (is_interactive) {
@@ -786,16 +784,32 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
ED_view3d_init_mats_rv3d(ob, ar->regiondata);
+ Mesh *me_eval = mesh_get_eval_final(depsgraph, scene, ob, scene->customdata_mask | CD_MASK_ORIGINDEX);
+ int *mv_orig_indices = CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX);
+ MVert *mv = me_eval->mvert;
+ /* NULL origindex is valid when wehave no generative modifiers... */
+ BLI_assert(mv_orig_indices != NULL || me_eval->totvert == me->totvert);
if (data.is_init) {
data.vert_visit = BLI_BITMAP_NEW(me->totvert, __func__);
- dm->foreachMappedVert(dm, gradientVertInit__mapFunc, &data, DM_FOREACH_NOP);
+ /* TODO add some similar helpers as DM's foreachMappedXXX callbacks, for evaluated mesh? */
+ for (int mv_idx = 0; mv_idx < me_eval->totvert; mv_idx++, mv++) {
+ const int mv_orig_idx = mv_orig_indices != NULL ? mv_orig_indices[mv_idx] : mv_idx;
+ if (mv_orig_idx != ORIGINDEX_NONE) {
+ gradientVertInit__mapFunc(&data, mv_orig_idx, mv->co, NULL, NULL);
+ }
+ }
MEM_freeN(data.vert_visit);
data.vert_visit = NULL;
}
else {
- dm->foreachMappedVert(dm, gradientVertUpdate__mapFunc, &data, DM_FOREACH_NOP);
+ for (int mv_idx = 0; mv_idx < me_eval->totvert; mv_idx++, mv++) {
+ const int mv_orig_idx = mv_orig_indices != NULL ? mv_orig_indices[mv_idx] : mv_idx;
+ if (mv_orig_idx != ORIGINDEX_NONE) {
+ gradientVertUpdate__mapFunc(&data, mv_orig_idx, mv->co, NULL, NULL);
+ }
+ }
}
DEG_id_tag_update(&ob->id, OB_RECALC_DATA);