Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/object/object_data_transfer.c
| Show First 20 Lines • Show All 117 Lines • ▼ Show 20 Lines | static const EnumPropertyItem *dt_layers_select_src_itemf(bContext *C, | ||||
| if (!reverse_transfer || layers_select_dst == DT_LAYERS_ACTIVE_DST || layers_select_dst >= 0) { | if (!reverse_transfer || layers_select_dst == DT_LAYERS_ACTIVE_DST || layers_select_dst >= 0) { | ||||
| RNA_enum_items_add_value( | RNA_enum_items_add_value( | ||||
| &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ACTIVE_SRC); | &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ACTIVE_SRC); | ||||
| } | } | ||||
| RNA_enum_items_add_value( | RNA_enum_items_add_value( | ||||
| &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ALL_SRC); | &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ALL_SRC); | ||||
| if (data_type == DT_TYPE_MDEFORMVERT) { | |||||
| Object *ob_src = CTX_data_active_object(C); | Object *ob_src = CTX_data_active_object(C); | ||||
| if (ob_src == NULL) { | |||||
| RNA_enum_item_end(&item, &totitem); | |||||
| *r_free = true; | |||||
| return item; | |||||
| } | |||||
| if (data_type == DT_TYPE_MDEFORMVERT && BKE_object_supports_vertex_groups(ob_src)) { | |||||
| if (BKE_object_pose_armature_get(ob_src)) { | if (BKE_object_pose_armature_get(ob_src)) { | ||||
| RNA_enum_items_add_value( | RNA_enum_items_add_value( | ||||
| &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_SELECT); | &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_SELECT); | ||||
| RNA_enum_items_add_value( | RNA_enum_items_add_value( | ||||
| &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_DEFORM); | &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_DEFORM); | ||||
| } | } | ||||
| if (ob_src) { | |||||
| const bDeformGroup *dg; | const bDeformGroup *dg; | ||||
| int i; | int i; | ||||
| RNA_enum_item_add_separator(&item, &totitem); | RNA_enum_item_add_separator(&item, &totitem); | ||||
| const ListBase *defbase = BKE_object_defgroup_list(ob_src); | const ListBase *defbase = BKE_object_defgroup_list(ob_src); | ||||
| for (i = 0, dg = defbase->first; dg; i++, dg = dg->next) { | for (i = 0, dg = defbase->first; dg; i++, dg = dg->next) { | ||||
| tmp_item.value = i; | tmp_item.value = i; | ||||
| tmp_item.identifier = tmp_item.name = dg->name; | tmp_item.identifier = tmp_item.name = dg->name; | ||||
| RNA_enum_item_add(&item, &totitem, &tmp_item); | RNA_enum_item_add(&item, &totitem, &tmp_item); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| else if (data_type == DT_TYPE_SHAPEKEY) { | else if (data_type == DT_TYPE_SHAPEKEY) { | ||||
| /* TODO */ | /* TODO */ | ||||
| } | } | ||||
| else if (data_type == DT_TYPE_UV) { | else if (data_type == DT_TYPE_UV) { | ||||
| Object *ob_src = CTX_data_active_object(C); | |||||
| if (ob_src) { | |||||
| Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | ||||
| Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | ||||
| Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | ||||
| CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | ||||
| cddata_masks.lmask |= CD_MASK_MLOOPUV; | cddata_masks.lmask |= CD_MASK_MLOOPUV; | ||||
| Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | ||||
| int num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPUV); | int num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPUV); | ||||
| RNA_enum_item_add_separator(&item, &totitem); | RNA_enum_item_add_separator(&item, &totitem); | ||||
| for (int i = 0; i < num_data; i++) { | for (int i = 0; i < num_data; i++) { | ||||
| tmp_item.value = i; | tmp_item.value = i; | ||||
| tmp_item.identifier = tmp_item.name = CustomData_get_layer_name( | tmp_item.identifier = tmp_item.name = CustomData_get_layer_name( | ||||
| &me_eval->ldata, CD_MLOOPUV, i); | &me_eval->ldata, CD_MLOOPUV, i); | ||||
| RNA_enum_item_add(&item, &totitem, &tmp_item); | RNA_enum_item_add(&item, &totitem, &tmp_item); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| else if (data_type == DT_TYPE_VCOL) { | else if (data_type == DT_TYPE_VCOL) { | ||||
| Object *ob_src = CTX_data_active_object(C); | |||||
| if (ob_src) { | |||||
| Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | ||||
| Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | ||||
| Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | ||||
| CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | ||||
| cddata_masks.lmask |= CD_MASK_MLOOPCOL; | cddata_masks.lmask |= CD_MASK_MLOOPCOL; | ||||
| Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | ||||
| int num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPCOL); | int num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPCOL); | ||||
| RNA_enum_item_add_separator(&item, &totitem); | RNA_enum_item_add_separator(&item, &totitem); | ||||
| for (int i = 0; i < num_data; i++) { | for (int i = 0; i < num_data; i++) { | ||||
| tmp_item.value = i; | tmp_item.value = i; | ||||
| tmp_item.identifier = tmp_item.name = CustomData_get_layer_name( | tmp_item.identifier = tmp_item.name = CustomData_get_layer_name( | ||||
| &me_eval->ldata, CD_MLOOPCOL, i); | &me_eval->ldata, CD_MLOOPCOL, i); | ||||
| RNA_enum_item_add(&item, &totitem, &tmp_item); | RNA_enum_item_add(&item, &totitem, &tmp_item); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| RNA_enum_item_end(&item, &totitem); | RNA_enum_item_end(&item, &totitem); | ||||
| *r_free = true; | *r_free = true; | ||||
| return item; | return item; | ||||
| } | } | ||||
| /* NOTE: #rna_enum_dt_layers_select_dst_items enum is from `rna_modifier.c`. */ | /* NOTE: #rna_enum_dt_layers_select_dst_items enum is from `rna_modifier.c`. */ | ||||
| ▲ Show 20 Lines • Show All 714 Lines • Show Last 20 Lines | |||||