Commit: 73de6c2725e8c483dafa265531250e5e82feb708 Author: Antonioya Date: Tue Aug 28 12:35:26 2018 +0200 Branches: greasepencil-object https://developer.blender.org/rB73de6c2725e8c483dafa265531250e5e82feb708
Use default armature of Modifier By default try to use the armature of first modifier, but allows to select different armatures. This is required for special configurations with several armature modifiers. =================================================================== M source/blender/editors/gpencil/gpencil_armature.c =================================================================== diff --git a/source/blender/editors/gpencil/gpencil_armature.c b/source/blender/editors/gpencil/gpencil_armature.c index 20f98b58b16..dcbbeaeaf57 100644 --- a/source/blender/editors/gpencil/gpencil_armature.c +++ b/source/blender/editors/gpencil/gpencil_armature.c @@ -569,18 +569,27 @@ static int gpencil_generate_weights_exec(bContext *C, wmOperator *op) /* get armature */ const int arm_idx = RNA_enum_get(op->ptr, "armature"); - if (arm_idx > -1) { - Base *base = BLI_findlink(&view_layer->object_bases, arm_idx); + if (arm_idx > 0) { + Base *base = BLI_findlink(&view_layer->object_bases, arm_idx - 1); ob_arm = base->object; } else { - for (Base *base = view_layer->object_bases.first; base; base = base->next) { - Object *ob = base->object; - if (ob->type == OB_ARMATURE) { - ob_arm = ob; - break; - } + /* get armature from modifier */ + GpencilModifierData *md = BKE_gpencil_modifiers_findByType(ob_eval, eGpencilModifierType_Armature); + if (md == NULL) { + BKE_report(op->reports, RPT_ERROR, + "The grease pencil object need an Armature modifier"); + return OPERATOR_CANCELLED; } + + ArmatureGpencilModifierData *mmd = (ArmatureGpencilModifierData *)md; + if (mmd->object == NULL) { + BKE_report(op->reports, RPT_ERROR, + "Armature modifier is not valid or wrong defined"); + return OPERATOR_CANCELLED; + } + + ob_arm = mmd->object; } if (ob_arm == NULL) { @@ -612,8 +621,9 @@ static const EnumPropertyItem *gpencil_armatures_enum_itemf(bContext *C, Pointer } /* add default */ - item_tmp.identifier = item_tmp.name = "Default"; - item_tmp.value = -1; + item_tmp.identifier = "DEFAULT"; + item_tmp.name = "Default"; + item_tmp.value = 0; RNA_enum_item_add(&item, &totitem, &item_tmp); i++; @@ -621,7 +631,7 @@ static const EnumPropertyItem *gpencil_armatures_enum_itemf(bContext *C, Pointer Object *ob = base->object; if (ob->type == OB_ARMATURE) { item_tmp.identifier = item_tmp.name = ob->id.name + 2; - item_tmp.value = i - 1; + item_tmp.value = i; RNA_enum_item_add(&item, &totitem, &item_tmp); } i++; @@ -656,7 +666,7 @@ void GPENCIL_OT_generate_weights(wmOperatorType *ot) ot->prop = RNA_def_enum(ot->srna, "mode", mode_type, 0, "Mode", ""); - prop = RNA_def_enum(ot->srna, "armature", DummyRNA_DEFAULT_items, -1, "Armature", "Armature to use"); + prop = RNA_def_enum(ot->srna, "armature", DummyRNA_DEFAULT_items, 0, "Armature", "Armature to use"); RNA_def_enum_funcs(prop, gpencil_armatures_enum_itemf); RNA_def_float(ot->srna, "ratio", DEFAULT_RATIO, 0.0f, 2.0f, "Ratio", _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs