|
Blender V4.3
|
#include "MEM_guardedalloc.h"#include "DNA_customdata_types.h"#include "DNA_mesh_types.h"#include "DNA_meshdata_types.h"#include "DNA_object_types.h"#include "DNA_scene_types.h"#include "BLI_blenlib.h"#include "BLI_math_matrix.h"#include "BLI_utildefines.h"#include "BKE_attribute.hh"#include "BKE_customdata.hh"#include "BKE_data_transfer.h"#include "BKE_deform.hh"#include "BKE_mesh.hh"#include "BKE_mesh_mapping.hh"#include "BKE_mesh_remap.hh"#include "BKE_mesh_runtime.hh"#include "BKE_mesh_wrapper.hh"#include "BKE_modifier.hh"#include "BKE_object.hh"#include "BKE_object_deform.h"#include "BKE_report.hh"#include "DEG_depsgraph_query.hh"#include "data_transfer_intern.h"Go to the source code of this file.
Macros | |
| #define | VDATA 0 |
| #define | EDATA 1 |
| #define | LDATA 2 |
| #define | PDATA 3 |
| #define | DATAMAX 4 |
Functions | |
| void | BKE_object_data_transfer_dttypes_to_cdmask (const int dtdata_types, CustomData_MeshMasks *r_data_masks) |
| bool | BKE_object_data_transfer_get_dttypes_capacity (const int dtdata_types, bool *r_advanced_mixing, bool *r_threshold) |
| int | BKE_object_data_transfer_get_dttypes_item_types (const int dtdata_types) |
| int | BKE_object_data_transfer_dttype_to_cdtype (const int dtdata_type) |
| int | BKE_object_data_transfer_dttype_to_srcdst_index (const int dtdata_type) |
| static void | data_transfer_mesh_attributes_transfer_active_color_string (Mesh *mesh_dst, const Mesh *mesh_src, const AttrDomainMask mask_domain, const int data_type) |
| static void | data_transfer_mesh_attributes_transfer_default_color_string (Mesh *mesh_dst, const Mesh *mesh_src, const AttrDomainMask mask_domain, const int data_type) |
| static void | data_transfer_dtdata_type_postprocess (Mesh *me_dst, const int dtdata_type, const bool changed) |
| static MeshRemapIslandsCalc | data_transfer_get_loop_islands_generator (const int cddata_type) |
| float | data_transfer_interp_float_do (const int mix_mode, const float val_dst, const float val_src, const float mix_factor) |
| void | data_transfer_layersmapping_add_item (ListBase *r_map, const int cddata_type, const int mix_mode, const float mix_factor, const float *mix_weights, const void *data_src, void *data_dst, const int data_src_n, const int data_dst_n, const size_t elem_size, const size_t data_size, const size_t data_offset, const uint64_t data_flag, cd_datatransfer_interp interp, void *interp_data) |
| static void | data_transfer_layersmapping_add_item_cd (ListBase *r_map, const int cddata_type, const int mix_mode, const float mix_factor, const float *mix_weights, const void *data_src, void *data_dst, cd_datatransfer_interp interp, void *interp_data) |
| static bool | data_transfer_layersmapping_cdlayers_multisrc_to_dst (ListBase *r_map, const eCustomDataType cddata_type, const int mix_mode, const float mix_factor, const float *mix_weights, const int num_elem_dst, const bool use_create, const bool use_delete, const CustomData *cd_src, CustomData *cd_dst, const int tolayers, const bool *use_layers_src, const int num_layers_src, cd_datatransfer_interp interp, void *interp_data) |
| static bool | data_transfer_layersmapping_cdlayers (ListBase *r_map, const eCustomDataType cddata_type, const int mix_mode, const float mix_factor, const float *mix_weights, const int num_elem_dst, const bool use_create, const bool use_delete, const CustomData *cd_src, CustomData *cd_dst, const int fromlayers, const int tolayers, cd_datatransfer_interp interp, void *interp_data) |
| static bool | data_transfer_layersmapping_generate (ListBase *r_map, Object *ob_src, Object *ob_dst, const Mesh *me_src, Mesh *me_dst, const int elem_type, int cddata_type, int mix_mode, float mix_factor, const float *mix_weights, const int num_elem_dst, const bool use_create, const bool use_delete, const int fromlayers, const int tolayers, SpaceTransform *space_transform) |
| void | BKE_object_data_transfer_layout (Depsgraph *depsgraph, Object *ob_src, Object *ob_dst, const int data_types, const bool use_delete, const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX]) |
| bool | BKE_object_data_transfer_ex (Depsgraph *depsgraph, Object *ob_src, Object *ob_dst, Mesh *me_dst, const int data_types, bool use_create, const int map_vert_mode, const int map_edge_mode, const int map_loop_mode, const int map_face_mode, SpaceTransform *space_transform, const bool auto_transform, const float max_distance, const float ray_radius, const float islands_handling_precision, const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX], const int mix_mode, const float mix_factor, const char *vgroup_name, const bool invert_vgroup, ReportList *reports) |
| bool | BKE_object_data_transfer_mesh (Depsgraph *depsgraph, Object *ob_src, Object *ob_dst, const int data_types, const bool use_create, const int map_vert_mode, const int map_edge_mode, const int map_loop_mode, const int map_face_mode, SpaceTransform *space_transform, const bool auto_transform, const float max_distance, const float ray_radius, const float islands_handling_precision, const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX], const int mix_mode, const float mix_factor, const char *vgroup_name, const bool invert_vgroup, ReportList *reports) |
| #define DATAMAX 4 |
Referenced by BKE_object_data_transfer_ex().
| #define EDATA 1 |
Referenced by BKE_object_data_transfer_ex().
| #define LDATA 2 |
Referenced by BKE_object_data_transfer_ex().
| #define PDATA 3 |
Referenced by BKE_object_data_transfer_ex().
| #define VDATA 0 |
Referenced by BKE_object_data_transfer_ex().
Definition at line 184 of file data_transfer.cc.
References BLI_assert_unreachable, CD_FAKE_BWEIGHT, CD_FAKE_CREASE, CD_FAKE_LNOR, CD_FAKE_MDEFORMVERT, CD_FAKE_SEAM, CD_FAKE_SHAPEKEY, CD_FAKE_SHARP, CD_FAKE_UV, CD_FREESTYLE_EDGE, CD_FREESTYLE_FACE, CD_MVERT_SKIN, CD_PROP_BYTE_COLOR, CD_PROP_COLOR, DT_TYPE_BWEIGHT_EDGE, DT_TYPE_BWEIGHT_VERT, DT_TYPE_CREASE, DT_TYPE_FREESTYLE_EDGE, DT_TYPE_FREESTYLE_FACE, DT_TYPE_LNOR, DT_TYPE_MDEFORMVERT, DT_TYPE_MLOOPCOL_LOOP, DT_TYPE_MLOOPCOL_VERT, DT_TYPE_MPROPCOL_LOOP, DT_TYPE_MPROPCOL_VERT, DT_TYPE_SEAM, DT_TYPE_SHAPEKEY, DT_TYPE_SHARP_EDGE, DT_TYPE_SHARP_FACE, DT_TYPE_SKIN, and DT_TYPE_UV.
Referenced by BKE_object_data_transfer_dttypes_to_cdmask(), BKE_object_data_transfer_ex(), and BKE_object_data_transfer_layout().
Definition at line 227 of file data_transfer.cc.
References DT_MULTILAYER_INDEX_INVALID, DT_MULTILAYER_INDEX_MDEFORMVERT, DT_MULTILAYER_INDEX_SHAPEKEY, DT_MULTILAYER_INDEX_UV, DT_MULTILAYER_INDEX_VCOL_LOOP, DT_MULTILAYER_INDEX_VCOL_VERT, DT_TYPE_MDEFORMVERT, DT_TYPE_MLOOPCOL_LOOP, DT_TYPE_MLOOPCOL_VERT, DT_TYPE_MPROPCOL_LOOP, DT_TYPE_MPROPCOL_VERT, DT_TYPE_SHAPEKEY, and DT_TYPE_UV.
Referenced by BKE_object_data_transfer_ex(), BKE_object_data_transfer_layout(), blender::ed::object::data_transfer_exec(), and blender::ed::object::datalayout_transfer_exec().
| void BKE_object_data_transfer_dttypes_to_cdmask | ( | const int | dtdata_types, |
| CustomData_MeshMasks * | r_data_masks ) |
Definition at line 39 of file data_transfer.cc.
References BKE_object_data_transfer_dttype_to_cdtype(), CD_FAKE, CD_FAKE_LNOR, CD_FAKE_MDEFORMVERT, CD_FAKE_UV, CD_MASK_CUSTOMLOOPNORMAL, CD_MASK_MDEFORMVERT, CD_MASK_PROP_FLOAT2, DT_DATATYPE_IS_EDGE, DT_DATATYPE_IS_FACE, DT_DATATYPE_IS_LOOP, DT_DATATYPE_IS_VERT, DT_TYPE_MAX, CustomData_MeshMasks::emask, CustomData_MeshMasks::lmask, CustomData_MeshMasks::pmask, and CustomData_MeshMasks::vmask.
Referenced by required_data_mask(), and update_depsgraph().
| bool BKE_object_data_transfer_ex | ( | Depsgraph * | depsgraph, |
| Object * | ob_src, | ||
| Object * | ob_dst, | ||
| Mesh * | me_dst, | ||
| const int | data_types, | ||
| bool | use_create, | ||
| const int | map_vert_mode, | ||
| const int | map_edge_mode, | ||
| const int | map_loop_mode, | ||
| const int | map_face_mode, | ||
| SpaceTransform * | space_transform, | ||
| const bool | auto_transform, | ||
| const float | max_distance, | ||
| const float | ray_radius, | ||
| const float | islands_handling_precision, | ||
| const int | fromlayers_select[DT_MULTILAYER_INDEX_MAX], | ||
| const int | tolayers_select[DT_MULTILAYER_INDEX_MAX], | ||
| const int | mix_mode, | ||
| const float | mix_factor, | ||
| const char * | vgroup_name, | ||
| const bool | invert_vgroup, | ||
| ReportList * | reports ) |
Definition at line 1306 of file data_transfer.cc.
References BKE_defvert_extract_vgroup_to_edgeweights(), BKE_defvert_extract_vgroup_to_faceweights(), BKE_defvert_extract_vgroup_to_loopweights(), BKE_defvert_extract_vgroup_to_vertweights(), BKE_id_defgroup_name_index(), BKE_mesh_remap_calc_edges_from_mesh(), BKE_mesh_remap_calc_faces_from_mesh(), BKE_mesh_remap_calc_loops_from_mesh(), BKE_mesh_remap_calc_verts_from_mesh(), BKE_mesh_remap_find_best_match_from_mesh(), BKE_mesh_remap_free(), BKE_mesh_wrapper_ensure_mdata(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), BKE_object_data_transfer_dttype_to_cdtype(), BKE_object_data_transfer_dttype_to_srcdst_index(), BKE_object_get_evaluated_mesh(), BKE_report(), BLI_assert, BLI_freelistN(), CD_MDEFORMVERT, Mesh::corners_num, CustomData_data_transfer(), CustomData_get_layer(), blender::MutableSpan< T >::data(), blender::Span< T >::data(), Object::data, data_transfer_dtdata_type_postprocess(), data_transfer_get_loop_islands_generator(), data_transfer_layersmapping_generate(), DATAMAX, DEG_get_evaluated_object(), depsgraph, DT_DATATYPE_IS_EDGE, DT_DATATYPE_IS_FACE, DT_DATATYPE_IS_LOOP, DT_DATATYPE_IS_VERT, DT_MULTILAYER_INDEX_INVALID, DT_TYPE_MAX, EDATA, Mesh::edges_num, ELEM, Mesh::faces_num, ListBase::first, Mesh::id, LDATA, LISTBASE_FOREACH, ME_EDGE, ME_LOOP, ME_POLY, ME_VERT, MEM_mallocN, MEM_SAFE_FREE, MREMAP_MODE_TOPOLOGY, MREMAP_USE_EDGE, MREMAP_USE_POLY, OB_MESH, PDATA, RPT_ERROR, blender::offset_indices::OffsetIndices< T >::size(), blender::Span< T >::size(), Object::type, VDATA, Mesh::vert_data, and Mesh::verts_num.
Referenced by BKE_object_data_transfer_mesh(), and modify_mesh().
| bool BKE_object_data_transfer_get_dttypes_capacity | ( | int | dtdata_types, |
| bool * | r_advanced_mixing, | ||
| bool * | r_threshold ) |
Check what can do each layer type (if it is actually handled by transfer-data, if it supports advanced mixing.
Definition at line 77 of file data_transfer.cc.
References DT_TYPE_BWEIGHT_EDGE, DT_TYPE_BWEIGHT_VERT, DT_TYPE_CREASE, DT_TYPE_FREESTYLE_EDGE, DT_TYPE_FREESTYLE_FACE, DT_TYPE_LNOR, DT_TYPE_MAX, DT_TYPE_MDEFORMVERT, DT_TYPE_MLOOPCOL_LOOP, DT_TYPE_MLOOPCOL_VERT, DT_TYPE_MPROPCOL_LOOP, DT_TYPE_MPROPCOL_VERT, DT_TYPE_SEAM, DT_TYPE_SHARP_EDGE, DT_TYPE_SHARP_FACE, DT_TYPE_SKIN, DT_TYPE_UV, and ret.
Referenced by blender::ed::object::dt_mix_mode_itemf().
Definition at line 156 of file data_transfer.cc.
References DT_DATATYPE_IS_EDGE, DT_DATATYPE_IS_FACE, DT_DATATYPE_IS_LOOP, DT_DATATYPE_IS_VERT, DT_TYPE_MAX, ME_EDGE, ME_LOOP, ME_POLY, ME_VERT, and ret.
| void BKE_object_data_transfer_layout | ( | struct Depsgraph * | depsgraph, |
| struct Object * | ob_src, | ||
| struct Object * | ob_dst, | ||
| int | data_types, | ||
| bool | use_delete, | ||
| const int | fromlayers_select[DT_MULTILAYER_INDEX_MAX], | ||
| const int | tolayers_select[DT_MULTILAYER_INDEX_MAX] ) |
Transfer data layout of selected types from source to destination object. By default, it only creates new data layers if needed on ob_dst. If use_delete is true, it will also delete data layers on ob_dst that do not match those from ob_src, to get (as much as possible) exact copy of source data layout.
Definition at line 1162 of file data_transfer.cc.
References ATTR_DOMAIN_MASK_CORNER, ATTR_DOMAIN_MASK_POINT, BKE_object_data_transfer_dttype_to_cdtype(), BKE_object_data_transfer_dttype_to_srcdst_index(), BKE_object_get_evaluated_mesh(), BLI_assert, CD_PROP_BYTE_COLOR, CD_PROP_COLOR, Mesh::corners_num, Object::data, data_transfer_layersmapping_generate(), data_transfer_mesh_attributes_transfer_active_color_string(), data_transfer_mesh_attributes_transfer_default_color_string(), DEG_get_evaluated_object(), depsgraph, DT_DATATYPE_IS_EDGE, DT_DATATYPE_IS_FACE, DT_DATATYPE_IS_LOOP, DT_DATATYPE_IS_VERT, DT_MULTILAYER_INDEX_INVALID, DT_TYPE_MAX, Mesh::edges_num, ELEM, Mesh::faces_num, ME_EDGE, ME_LOOP, ME_POLY, ME_VERT, OB_MESH, Object::type, and Mesh::verts_num.
Referenced by blender::ed::object::datalayout_transfer_exec().
| bool BKE_object_data_transfer_mesh | ( | Depsgraph * | depsgraph, |
| Object * | ob_src, | ||
| Object * | ob_dst, | ||
| const int | data_types, | ||
| const bool | use_create, | ||
| const int | map_vert_mode, | ||
| const int | map_edge_mode, | ||
| const int | map_loop_mode, | ||
| const int | map_face_mode, | ||
| SpaceTransform * | space_transform, | ||
| const bool | auto_transform, | ||
| const float | max_distance, | ||
| const float | ray_radius, | ||
| const float | islands_handling_precision, | ||
| const int | fromlayers_select[DT_MULTILAYER_INDEX_MAX], | ||
| const int | tolayers_select[DT_MULTILAYER_INDEX_MAX], | ||
| const int | mix_mode, | ||
| const float | mix_factor, | ||
| const char * | vgroup_name, | ||
| const bool | invert_vgroup, | ||
| ReportList * | reports ) |
Definition at line 1777 of file data_transfer.cc.
References BKE_object_data_transfer_ex(), and depsgraph.
Referenced by blender::ed::object::data_transfer_exec().
|
static |
Definition at line 355 of file data_transfer.cc.
References CD_CUSTOMLOOPNORMAL, CD_NORMAL, CD_SET_DEFAULT, Mesh::corner_data, Mesh::corners_num, CustomData_add_layer(), CustomData_free_layers(), CustomData_get_layer_for_write(), DT_TYPE_LNOR, blender::bke::SpanAttributeWriter< T >::finish(), blender::bke::mesh::normals_corner_custom_set(), and blender::bke::SpanAttributeWriter< T >::span.
Referenced by BKE_object_data_transfer_ex().
|
static |
Definition at line 400 of file data_transfer.cc.
References BKE_mesh_calc_islands_loop_face_edgeseam(), and CD_FAKE_UV.
Referenced by BKE_object_data_transfer_ex().
| float data_transfer_interp_float_do | ( | const int | mix_mode, |
| const float | val_dst, | ||
| const float | val_src, | ||
| const float | mix_factor ) |
Definition at line 411 of file data_transfer.cc.
References CDT_MIX_ADD, CDT_MIX_MIX, CDT_MIX_MUL, CDT_MIX_REPLACE_ABOVE_THRESHOLD, CDT_MIX_REPLACE_BELOW_THRESHOLD, CDT_MIX_SUB, CDT_MIX_TRANSFER, and interpf().
Referenced by vgroups_datatransfer_interp().
| void data_transfer_layersmapping_add_item | ( | ListBase * | r_map, |
| const int | cddata_type, | ||
| const int | mix_mode, | ||
| const float | mix_factor, | ||
| const float * | mix_weights, | ||
| const void * | data_src, | ||
| void * | data_dst, | ||
| const int | data_src_n, | ||
| const int | data_dst_n, | ||
| const size_t | elem_size, | ||
| const size_t | data_size, | ||
| const size_t | data_offset, | ||
| const uint64_t | data_flag, | ||
| cd_datatransfer_interp | interp, | ||
| void * | interp_data ) |
Definition at line 451 of file data_transfer.cc.
References BLI_addtail(), BLI_assert, CustomDataTransferLayerMap::data_dst, CustomDataTransferLayerMap::data_dst_n, CustomDataTransferLayerMap::data_flag, CustomDataTransferLayerMap::data_offset, CustomDataTransferLayerMap::data_size, CustomDataTransferLayerMap::data_src, CustomDataTransferLayerMap::data_src_n, CustomDataTransferLayerMap::data_type, CustomDataTransferLayerMap::elem_size, CustomDataTransferLayerMap::interp, interp(), CustomDataTransferLayerMap::interp_data, CustomDataTransferLayerMap::mix_factor, CustomDataTransferLayerMap::mix_mode, and CustomDataTransferLayerMap::mix_weights.
Referenced by data_transfer_layersmapping_add_item_cd(), data_transfer_layersmapping_vgroups(), and data_transfer_layersmapping_vgroups_multisrc_to_dst().
|
static |
Definition at line 492 of file data_transfer.cc.
References CD_FREESTYLE_EDGE, CD_FREESTYLE_FACE, data_transfer_layersmapping_add_item(), FREESTYLE_EDGE_MARK, FREESTYLE_FACE_MARK, and interp().
Referenced by data_transfer_layersmapping_cdlayers(), data_transfer_layersmapping_cdlayers_multisrc_to_dst(), and data_transfer_layersmapping_generate().
|
static |
Definition at line 684 of file data_transfer.cc.
References CD_SET_DEFAULT, CustomData_add_layer(), CustomData_add_layer_named(), CustomData_free_layer(), CustomData_get_active_layer(), CustomData_get_layer(), CustomData_get_layer_for_write(), CustomData_get_layer_n(), CustomData_get_layer_n_for_write(), CustomData_get_layer_name(), CustomData_get_named_layer(), CustomData_layertype_is_singleton(), CustomData_number_of_layers(), data_transfer_layersmapping_add_item_cd(), data_transfer_layersmapping_cdlayers_multisrc_to_dst(), DT_LAYERS_ACTIVE_DST, DT_LAYERS_ACTIVE_SRC, DT_LAYERS_ALL_SRC, DT_LAYERS_INDEX_DST, DT_LAYERS_NAME_DST, interp(), MEM_freeN(), MEM_mallocN, and ret.
Referenced by data_transfer_layersmapping_generate().
|
static |
Definition at line 535 of file data_transfer.cc.
References CD_SET_DEFAULT, CustomData_add_layer(), CustomData_add_layer_named(), CustomData_free_layer(), CustomData_get_layer_n(), CustomData_get_layer_n_for_write(), CustomData_get_layer_name(), CustomData_get_named_layer(), CustomData_number_of_layers(), data_transfer_layersmapping_add_item_cd(), DT_LAYERS_INDEX_DST, DT_LAYERS_NAME_DST, interp(), MEM_freeN(), and MEM_mallocN.
Referenced by data_transfer_layersmapping_cdlayers().
|
static |
Definition at line 849 of file data_transfer.cc.
References CD_FAKE, CD_FAKE_BWEIGHT, CD_FAKE_CREASE, CD_FAKE_LNOR, CD_FAKE_MDEFORMVERT, CD_FAKE_SEAM, CD_FAKE_SHAPEKEY, CD_FAKE_SHARP, CD_FAKE_UV, CD_NORMAL, CD_PROP_BOOL, CD_PROP_FLOAT, CD_PROP_FLOAT2, CD_SET_DEFAULT, blender::MutableSpan< T >::copy_from(), Mesh::corner_data, Mesh::corners_num, CustomData_add_layer(), CustomData_add_layer_named(), customdata_data_transfer_interp_normal_normals(), CustomData_get_layer_for_write(), CustomData_get_layer_named(), CustomData_get_layer_named_for_write(), CustomData_has_layer_named(), Object::data, data_transfer_layersmapping_add_item_cd(), data_transfer_layersmapping_cdlayers(), data_transfer_layersmapping_vgroups(), Mesh::edge_data, Mesh::edges_num, Mesh::face_data, Mesh::faces_num, interp(), ME_EDGE, ME_LOOP, ME_POLY, ME_VERT, ret, Mesh::vert_data, and Mesh::verts_num.
Referenced by BKE_object_data_transfer_ex(), and BKE_object_data_transfer_layout().
|
static |
When transferring color attributes, also transfer the active color attribute string. If a match can't be found, use the first color layer that can be found (to ensure a valid string is set).
Definition at line 256 of file data_transfer.cc.
References Mesh::active_color_attribute, ATTR_DOMAIN_MASK_COLOR, BKE_attribute_from_index(), BKE_attribute_search(), BKE_id_attributes_active_color_name(), BLI_strdup(), CD_MASK_COLOR_ALL, CD_MASK_PROP_BYTE_COLOR, CD_MASK_PROP_COLOR, CD_PROP_BYTE_COLOR, CD_PROP_COLOR, AttributeOwner::from_id(), Mesh::id, and CustomDataLayer::name.
Referenced by BKE_object_data_transfer_layout().
|
static |
When transferring color attributes, also transfer the default color attribute string. If a match cant be found, use the first color layer that can be found (to ensure a valid string is set).
Definition at line 307 of file data_transfer.cc.
References ATTR_DOMAIN_MASK_COLOR, BKE_attribute_from_index(), BKE_attribute_search(), BKE_id_attributes_default_color_name(), BLI_strdup(), CD_MASK_COLOR_ALL, CD_MASK_PROP_BYTE_COLOR, CD_MASK_PROP_COLOR, CD_PROP_BYTE_COLOR, CD_PROP_COLOR, Mesh::default_color_attribute, AttributeOwner::from_id(), Mesh::id, and CustomDataLayer::name.
Referenced by BKE_object_data_transfer_layout().