Commit: 77d8950b242d5eb6756285b2a5b867e0beef85e5
Author: Bastien Montagne
Date:   Fri Nov 7 13:12:44 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rB77d8950b242d5eb6756285b2a5b867e0beef85e5

Add 'specific' from-layer selection to transfer operator too.

Note we do not offer specific to-layer selection, since we may transfer
to several selected objects at once.

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

M       source/blender/editors/object/object_data_transfer.c
M       source/blender/makesrna/intern/rna_modifier.c

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

diff --git a/source/blender/editors/object/object_data_transfer.c 
b/source/blender/editors/object/object_data_transfer.c
index 0ac7b6b..d94c82e 100644
--- a/source/blender/editors/object/object_data_transfer.c
+++ b/source/blender/editors/object/object_data_transfer.c
@@ -90,7 +90,7 @@ static EnumPropertyItem DT_layer_items[] = {
 static EnumPropertyItem *dt_fromlayers_select_itemf(
         bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
 {
-       EnumPropertyItem *item = NULL;
+       EnumPropertyItem *item = NULL, tmp_item = {0};
        int totitem = 0;
 
        const int data_type = RNA_enum_get(ptr, "data_type");
@@ -103,11 +103,74 @@ static EnumPropertyItem *dt_fromlayers_select_itemf(
        RNA_enum_items_add_value(&item, &totitem, DT_fromlayers_select_items, 
DT_FROMLAYERS_ALL);
 
        if (data_type == DT_DATA_MDEFORMVERT) {
-               Object *ob = CTX_data_active_object(C);
-               if (BKE_object_pose_armature_get(ob)) {
+               Object *ob_src = CTX_data_active_object(C);
+
+               if (BKE_object_pose_armature_get(ob_src)) {
                        RNA_enum_items_add_value(&item, &totitem, 
DT_fromlayers_select_items, DT_FROMLAYERS_VGROUP_BONE_SELECTED);
                        RNA_enum_items_add_value(&item, &totitem, 
DT_fromlayers_select_items, DT_FROMLAYERS_VGROUP_BONE_DEFORM);
                }
+
+               if (ob_src) {
+                       bDeformGroup *dg;
+                       int i;
+
+                       RNA_enum_item_add_separator(&item, &totitem);
+
+                       for (i = 0, dg = ob_src->defbase.first; dg; i++, dg = 
dg->next) {
+                               tmp_item.value = i;
+                               tmp_item.identifier = tmp_item.name = dg->name;
+                               RNA_enum_item_add(&item, &totitem, &tmp_item);
+                       }
+               }
+       }
+       else if (data_type == DT_DATA_SHAPEKEY) {
+               /* TODO */
+       }
+       else if (data_type == DT_DATA_UV) {
+               Object *ob_src = CTX_data_active_object(C);
+               Scene *scene = CTX_data_scene(C);
+
+               if (ob_src) {
+                       DerivedMesh *dm_src;
+                       CustomData *pdata;
+                       int num_data, i;
+
+                       /* XXX Is this OK? */
+                       dm_src = mesh_get_derived_final(scene, ob_src, 
CD_MASK_BAREMESH | CD_MTEXPOLY);
+                       pdata = dm_src->getPolyDataLayout(dm_src);
+                       num_data = CustomData_number_of_layers(pdata, 
CD_MTEXPOLY);
+
+                       RNA_enum_item_add_separator(&item, &totitem);
+
+                       for (i = 0; i < num_data; i++) {
+                               tmp_item.value = i;
+                               tmp_item.identifier = tmp_item.name = 
CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
+                               RNA_enum_item_add(&item, &totitem, &tmp_item);
+                       }
+               }
+       }
+       else if (data_type == DT_DATA_VCOL) {
+               Object *ob_src = CTX_data_active_object(C);
+               Scene *scene = CTX_data_scene(C);
+
+               if (ob_src) {
+                       DerivedMesh *dm_src;
+                       CustomData *ldata;
+                       int num_data, i;
+
+                       /* XXX Is this OK? */
+                       dm_src = mesh_get_derived_final(scene, ob_src, 
CD_MASK_BAREMESH | CD_MLOOPCOL);
+                       ldata = dm_src->getLoopDataLayout(dm_src);
+                       num_data = CustomData_number_of_layers(ldata, 
CD_MLOOPCOL);
+
+                       RNA_enum_item_add_separator(&item, &totitem);
+
+                       for (i = 0; i < num_data; i++) {
+                               tmp_item.value = i;
+                               tmp_item.identifier = tmp_item.name = 
CustomData_get_layer_name(ldata, CD_MLOOPCOL, i);
+                               RNA_enum_item_add(&item, &totitem, &tmp_item);
+                       }
+               }
        }
 
        RNA_enum_item_end(&item, &totitem);
@@ -128,12 +191,14 @@ static EnumPropertyItem 
*dt_tolayers_select_itemf(bContext *C, PointerRNA *ptr,
                return DT_tolayers_select_items;
        }
 
-       if (fromlayers_select == DT_FROMLAYERS_ACTIVE) {
+       if (fromlayers_select == DT_FROMLAYERS_ACTIVE || fromlayers_select >= 
0) {
                RNA_enum_items_add_value(&item, &totitem, 
DT_tolayers_select_items, DT_TOLAYERS_ACTIVE);
        }
        RNA_enum_items_add_value(&item, &totitem, DT_tolayers_select_items, 
DT_TOLAYERS_NAME);
        RNA_enum_items_add_value(&item, &totitem, DT_tolayers_select_items, 
DT_TOLAYERS_INDEX);
 
+       /* No 'specific' to-layers here, since we may transfer to several 
objects at once! */
+
        RNA_enum_item_end(&item, &totitem);
        *r_free = true;
 
diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index da5870c..2484817 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -730,12 +730,9 @@ static EnumPropertyItem 
*dt_fromlayers_select_itemf(bContext *C, PointerRNA *ptr
                Object *ob_src = dtmd->ob_source;
 
 #if 0  /* XXX Don't think we want this in modifier version... */
-               { 
-                       Object *ob = CTX_data_active_object(C); /* XXX Is this 
OK? */
-                       if (BKE_object_pose_armature_get(ob)) {
-                               RNA_enum_items_add_value(&item, &totitem, 
DT_fromlayers_select_items, DT_FROMLAYERS_VGROUP_BONE_SELECTED);
-                               RNA_enum_items_add_value(&item, &totitem, 
DT_fromlayers_select_items, DT_FROMLAYERS_VGROUP_BONE_DEFORM);
-                       }
+               if (BKE_object_pose_armature_get(ob_src)) {
+                       RNA_enum_items_add_value(&item, &totitem, 
DT_fromlayers_select_items, DT_FROMLAYERS_VGROUP_BONE_SELECTED);
+                       RNA_enum_items_add_value(&item, &totitem, 
DT_fromlayers_select_items, DT_FROMLAYERS_VGROUP_BONE_DEFORM);
                }
 #endif

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to