[Bf-blender-cvs] [77d8950] mesh-transfer-data: Add 'specific' from-layer selection to transfer operator too.
Bastien Montagne
noreply at git.blender.org
Fri Nov 7 13:13:44 CET 2014
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
More information about the Bf-blender-cvs
mailing list