Commit: 4fa55703dca64b3fab4ef8772c6c14a993867b98
Author: Bastien Montagne
Date:   Tue Mar 6 15:58:22 2018 +0100
Branches: soc-2017-normal-tools
https://developer.blender.org/rB4fa55703dca64b3fab4ef8772c6c14a993867b98

Fix critical issue with usage of unamed CD_PROP_INT layer.

Those types are generic, specific usages should always use named layers
with a specific 'id name'.

Also, make weightednormals modifier to show edited normals in 3DView in
edit mode.

===================================================================

M       source/blender/editors/mesh/editmesh_tools.c
M       source/blender/makesdna/DNA_modifier_types.h
M       source/blender/modifiers/intern/MOD_weighted_normal.c

===================================================================

diff --git a/source/blender/editors/mesh/editmesh_tools.c 
b/source/blender/editors/mesh/editmesh_tools.c
index d518b5e84ca..e70fd431a6a 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -7302,11 +7302,14 @@ static int edbm_mod_weighted_strength_exec(bContext *C, 
wmOperator *op)
 
        BM_select_history_clear(bm);
 
-       int cd_prop_int_offset = CustomData_get_offset(&bm->pdata, CD_PROP_INT);
-       if (cd_prop_int_offset == -1) {
-               BM_data_layer_add(bm, &bm->pdata, CD_PROP_INT);
-               cd_prop_int_offset = CustomData_get_offset(&bm->pdata, 
CD_PROP_INT);
-       }
+       const char *layer_id = MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID;
+       int cd_prop_int_index = CustomData_get_named_layer_index(&bm->pdata, 
CD_PROP_INT, layer_id);
+       if (cd_prop_int_index == -1) {
+               BM_data_layer_add_named(bm, &bm->pdata, CD_PROP_INT, layer_id);
+               cd_prop_int_index = 
CustomData_get_named_layer_index(&bm->pdata, CD_PROP_INT, layer_id);
+       }
+       cd_prop_int_index -= CustomData_get_layer_index(&bm->pdata, 
CD_PROP_INT);
+       const int cd_prop_int_offset = CustomData_get_n_offset(&bm->pdata, 
CD_PROP_INT, cd_prop_int_index);
 
        const int face_strength = scene->toolsettings->face_strength;
        const bool set = RNA_boolean_get(op->ptr, "set");
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index 6991d5edb6f..1602ac9aac3 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1629,6 +1629,9 @@ typedef struct WeightedNormalModifierData {
        float thresh;
 } WeightedNormalModifierData;
 
+/* Name/id of the generic PROP_INT cdlayer storing face weights. */
+#define MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID 
"__mod_weightednormals_faceweight"
+
 /* WeightedNormalModifierData.mode */
 enum {
        MOD_WEIGHTEDNORMAL_MODE_FACE = 0,
diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.c 
b/source/blender/modifiers/intern/MOD_weighted_normal.c
index 2bed6eb6d8a..b4664b4aa9d 100644
--- a/source/blender/modifiers/intern/MOD_weighted_normal.c
+++ b/source/blender/modifiers/intern/MOD_weighted_normal.c
@@ -529,13 +529,13 @@ static DerivedMesh *applyModifier(ModifierData *md, 
Object *ob, DerivedMesh *dm,
        }
 
        short (*clnors)[2];
-
        clnors = CustomData_duplicate_referenced_layer(&dm->loopData, 
CD_CUSTOMLOOPNORMAL, numLoops);
        if (!clnors) {
                DM_add_loop_layer(dm, CD_CUSTOMLOOPNORMAL, CD_CALLOC, NULL);
                clnors = dm->getLoopDataArray(dm, CD_CUSTOMLOOPNORMAL);
        }
-       int *strength = CustomData_get_layer(&dm->polyData, CD_PROP_INT);
+
+       int *strength = CustomData_get_layer_named(&dm->polyData, CD_PROP_INT, 
MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID);
 
        modifier_get_vgroup(ob, dm, wnmd->defgrp_name, &dvert, &defgrp_index);
 
@@ -598,6 +598,7 @@ ModifierTypeInfo modifierType_WeightedNormal = {
        /* structSize */        sizeof(WeightedNormalModifierData),
        /* type */              eModifierTypeType_Constructive,
        /* flags */             eModifierTypeFlag_AcceptsMesh |
+                               eModifierTypeFlag_SupportsMapping |
                                eModifierTypeFlag_SupportsEditmode |
                                eModifierTypeFlag_EnableInEditmode,

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to