|
Blender V4.3
|
#include "BLI_math_matrix.h"#include "BLI_math_rotation.h"#include "BLI_math_vector_types.hh"#include "BLI_offset_indices.hh"#include "BKE_mesh_mapping.hh"Go to the source code of this file.
Classes | |
| struct | MeshPairRemapItem |
| struct | MeshPairRemap |
Enumerations | |
| enum | { MREMAP_USE_VERT = 1 << 4 , MREMAP_USE_EDGE = 1 << 5 , MREMAP_USE_LOOP = 1 << 6 , MREMAP_USE_POLY = 1 << 7 , MREMAP_USE_NEAREST = 1 << 8 , MREMAP_USE_NORPROJ = 1 << 9 , MREMAP_USE_INTERP = 1 << 10 , MREMAP_USE_NORMAL = 1 << 11 , MREMAP_MODE_VERT = 1 << 24 , MREMAP_MODE_VERT_NEAREST = MREMAP_MODE_VERT | MREMAP_USE_VERT | MREMAP_USE_NEAREST , MREMAP_MODE_VERT_EDGE_NEAREST = MREMAP_MODE_VERT | MREMAP_USE_EDGE | MREMAP_USE_NEAREST , MREMAP_MODE_VERT_EDGEINTERP_NEAREST , MREMAP_MODE_VERT_FACE_NEAREST = MREMAP_MODE_VERT | MREMAP_USE_POLY | MREMAP_USE_NEAREST , MREMAP_MODE_VERT_POLYINTERP_NEAREST , MREMAP_MODE_VERT_POLYINTERP_VNORPROJ , MREMAP_MODE_EDGE = 1 << 25 , MREMAP_MODE_EDGE_VERT_NEAREST = MREMAP_MODE_EDGE | MREMAP_USE_VERT | MREMAP_USE_NEAREST , MREMAP_MODE_EDGE_NEAREST = MREMAP_MODE_EDGE | MREMAP_USE_EDGE | MREMAP_USE_NEAREST , MREMAP_MODE_EDGE_POLY_NEAREST = MREMAP_MODE_EDGE | MREMAP_USE_POLY | MREMAP_USE_NEAREST , MREMAP_MODE_EDGE_EDGEINTERP_VNORPROJ , MREMAP_MODE_LOOP = 1 << 26 , MREMAP_MODE_LOOP_NEAREST_LOOPNOR , MREMAP_MODE_LOOP_NEAREST_POLYNOR , MREMAP_MODE_LOOP_POLY_NEAREST = MREMAP_MODE_LOOP | MREMAP_USE_POLY | MREMAP_USE_NEAREST , MREMAP_MODE_LOOP_POLYINTERP_NEAREST , MREMAP_MODE_LOOP_POLYINTERP_LNORPROJ , MREMAP_MODE_POLY = 1 << 27 , MREMAP_MODE_POLY_NEAREST = MREMAP_MODE_POLY | MREMAP_USE_POLY | MREMAP_USE_NEAREST , MREMAP_MODE_POLY_NOR = MREMAP_MODE_POLY | MREMAP_USE_POLY | MREMAP_USE_NORMAL , MREMAP_MODE_POLY_POLYINTERP_PNORPROJ , MREMAP_MODE_TOPOLOGY = MREMAP_MODE_VERT | MREMAP_MODE_EDGE | MREMAP_MODE_LOOP | MREMAP_MODE_POLY } |
Functions | |
| void | BKE_mesh_remap_init (MeshPairRemap *map, int items_num) |
| void | BKE_mesh_remap_free (MeshPairRemap *map) |
| void | BKE_mesh_remap_item_define_invalid (MeshPairRemap *map, int index) |
| float | BKE_mesh_remap_calc_difference_from_mesh (const SpaceTransform *space_transform, const float(*vert_positions_dst)[3], int numverts_dst, const Mesh *me_src) |
| void | BKE_mesh_remap_find_best_match_from_mesh (const float(*vert_positions_dst)[3], int numverts_dst, const Mesh *me_src, SpaceTransform *r_space_transform) |
| void | BKE_mesh_remap_calc_verts_from_mesh (int mode, const SpaceTransform *space_transform, float max_dist, float ray_radius, const float(*vert_positions_dst)[3], int numverts_dst, const Mesh *me_src, Mesh *me_dst, MeshPairRemap *r_map) |
| void | BKE_mesh_remap_calc_edges_from_mesh (int mode, const SpaceTransform *space_transform, float max_dist, float ray_radius, const float(*vert_positions_dst)[3], int numverts_dst, const blender::int2 *edges_dst, int numedges_dst, const Mesh *me_src, Mesh *me_dst, MeshPairRemap *r_map) |
| void | BKE_mesh_remap_calc_loops_from_mesh (int mode, const SpaceTransform *space_transform, float max_dist, float ray_radius, const Mesh *mesh_dst, const float(*vert_positions_dst)[3], int numverts_dst, const int *corner_verts_dst, int numloops_dst, const blender::OffsetIndices< int > faces_dst, const Mesh *me_src, MeshRemapIslandsCalc gen_islands_src, float islands_precision_src, MeshPairRemap *r_map) |
| void | BKE_mesh_remap_calc_faces_from_mesh (int mode, const SpaceTransform *space_transform, float max_dist, float ray_radius, const Mesh *mesh_dst, const float(*vert_positions_dst)[3], int numverts_dst, const int *corner_verts, const blender::OffsetIndices< int > faces_dst, const Mesh *me_src, MeshPairRemap *r_map) |
| anonymous enum |
Definition at line 55 of file BKE_mesh_remap.hh.
| float BKE_mesh_remap_calc_difference_from_mesh | ( | const SpaceTransform * | space_transform, |
| const float(*) | vert_positions_dst[3], | ||
| int | numverts_dst, | ||
| const Mesh * | me_src ) |
Compute a value of the difference between both given meshes. The smaller the result, the better the match.
We return the inverse of the average of the inversed shortest distance from each dst vertex to src ones. In other words, beyond a certain (relatively small) distance, all differences have more or less the same weight in final result, which allows to reduce influence of a few high differences, in favor of a global good matching.
Definition at line 115 of file mesh_remap.cc.
References BKE_bvhtree_from_mesh_get(), BLI_space_transform_apply(), BVHTREE_FROM_VERTS, copy_v3_v3(), float, FLT_MAX, mesh_remap_bvhtree_query_nearest(), printf, and result.
Referenced by BKE_mesh_remap_find_best_match_from_mesh().
| void BKE_mesh_remap_calc_edges_from_mesh | ( | int | mode, |
| const SpaceTransform * | space_transform, | ||
| float | max_dist, | ||
| float | ray_radius, | ||
| const float(*) | vert_positions_dst[3], | ||
| int | numverts_dst, | ||
| const blender::int2 * | edges_dst, | ||
| int | numedges_dst, | ||
| const Mesh * | me_src, | ||
| Mesh * | me_dst, | ||
| MeshPairRemap * | r_map ) |
Definition at line 673 of file mesh_remap.cc.
References BKE_bvhtree_from_mesh_get(), BKE_mesh_remap_init(), BKE_mesh_remap_item_define_invalid(), BLI_assert, BLI_space_transform_apply(), BLI_space_transform_apply_normal(), BVHTREE_FROM_CORNER_TRIS, BVHTREE_FROM_EDGES, BVHTREE_FROM_VERTS, CLAMP, CLOG_WARN, copy_v3_v3(), copy_vn_fl(), blender::offset_indices::GroupedSpan< T >::data, blender::bke::mesh::edge_other_vert(), Mesh::edges_num, float, FLT_MAX, free_bvhtree_from_mesh(), BVHTreeRayHit::index, int, interp_v3_v3v3(), interp_v3_v3v3_slerp_safe(), isect_line_line_v3(), MeshPairRemap::items, len_squared_v3v3(), len_v3v3(), line_point_factor_v3(), LOG, MEM_freeN(), MEM_mallocN, mesh_remap_bvhtree_query_nearest(), mesh_remap_bvhtree_query_raycast(), mesh_remap_item_define(), min_ii(), MREMAP_MODE_EDGE, MREMAP_MODE_EDGE_EDGEINTERP_VNORPROJ, MREMAP_MODE_EDGE_NEAREST, MREMAP_MODE_EDGE_POLY_NEAREST, MREMAP_MODE_EDGE_VERT_NEAREST, MREMAP_MODE_TOPOLOGY, MREMAP_RAYCAST_APPROXIMATE_FAC, MREMAP_RAYCAST_APPROXIMATE_NR, blender::IndexRange::size(), size(), blender::IndexRange::start(), Mesh::verts_num, and w().
Referenced by BKE_object_data_transfer_ex().
| void BKE_mesh_remap_calc_faces_from_mesh | ( | int | mode, |
| const SpaceTransform * | space_transform, | ||
| float | max_dist, | ||
| float | ray_radius, | ||
| const Mesh * | mesh_dst, | ||
| const float(*) | vert_positions_dst[3], | ||
| int | numverts_dst, | ||
| const int * | corner_verts, | ||
| const blender::OffsetIndices< int > | faces_dst, | ||
| const Mesh * | me_src, | ||
| MeshPairRemap * | r_map ) |
Definition at line 2033 of file mesh_remap.cc.
References area_poly_v2(), area_tri_v2(), axis_dominant_v3_to_m3(), BKE_bvhtree_from_mesh_get(), BKE_mesh_remap_init(), BKE_mesh_remap_item_define_invalid(), BLI_assert, BLI_polyfill_calc(), BLI_rng_free(), BLI_rng_get_tri_sample_float_v2(), BLI_rng_new(), BLI_space_transform_apply(), BLI_space_transform_apply_normal(), BVHTREE_FROM_CORNER_TRIS, CLAMP, CLOG_WARN, copy_v3_v3(), copy_vn_fl(), blender::bke::mesh::face_center_calc(), Mesh::faces_num, float, FLT_MAX, free_bvhtree_from_mesh(), BVHTreeRayHit::index, blender::offset_indices::OffsetIndices< T >::index_range(), INIT_MINMAX2, int, invert_m3_m3(), MeshPairRemap::items, LOG, max_ff(), max_ii(), MEM_freeN(), MEM_mallocN, MEM_reallocN, mesh_remap_bvhtree_query_nearest(), mesh_remap_bvhtree_query_raycast(), mesh_remap_item_define(), minmax_v2v2_v2(), MREMAP_DEFAULT_BUFSIZE, MREMAP_MODE_POLY, MREMAP_MODE_POLY_NEAREST, MREMAP_MODE_POLY_NOR, MREMAP_MODE_POLY_POLYINTERP_PNORPROJ, MREMAP_MODE_TOPOLOGY, MREMAP_RAYCAST_APPROXIMATE_FAC, MREMAP_RAYCAST_APPROXIMATE_NR, MREMAP_RAYCAST_TRI_SAMPLES_MAX, MREMAP_RAYCAST_TRI_SAMPLES_MIN, MREMAP_USE_NORMAL, MREMAP_USE_NORPROJ, mul_m3_v3(), mul_v2_m3v3(), blender::offset_indices::OffsetIndices< T >::size(), sub_v2_v2v2(), UNLIKELY, v2, and w().
Referenced by BKE_object_data_transfer_ex().
| void BKE_mesh_remap_calc_loops_from_mesh | ( | int | mode, |
| const SpaceTransform * | space_transform, | ||
| float | max_dist, | ||
| float | ray_radius, | ||
| const Mesh * | mesh_dst, | ||
| const float(*) | vert_positions_dst[3], | ||
| int | numverts_dst, | ||
| const int * | corner_verts_dst, | ||
| int | numloops_dst, | ||
| const blender::OffsetIndices< int > | faces_dst, | ||
| const Mesh * | me_src, | ||
| MeshRemapIslandsCalc | gen_islands_src, | ||
| float | islands_precision_src, | ||
| MeshPairRemap * | r_map ) |
Definition at line 1210 of file mesh_remap.cc.
References ASTAR_STEPS_MAX, BKE_bvhtree_from_mesh_get(), BKE_mesh_loop_islands_free(), BKE_mesh_origindex_map_create_corner_tri(), BKE_mesh_remap_init(), BKE_mesh_remap_item_define_invalid(), BLI_assert, BLI_astar_graph_free(), BLI_astar_graph_solve(), BLI_astar_solution_clear(), BLI_astar_solution_free(), BLI_astar_solution_init(), BLI_space_transform_apply(), BLI_space_transform_apply_normal(), BVHTREE_FROM_CORNER_TRIS, bvhtree_from_mesh_corner_tris_ex(), bvhtree_from_mesh_verts_ex(), BVHTREE_FROM_VERTS, CD_PROP_BOOL, closest_on_tri_to_point_v3(), BVHTreeRayHit::co, copy_v3_v3(), Mesh::corners_num, count, MeshElemMap::count, BLI_AStarGNLink::custom_data, BLI_AStarGraph::custom_data, BLI_AStarSolution::custom_data, CustomData_get_layer_named(), blender::Span< T >::data(), dot(), dot_v3v3(), Mesh::edge_data, ELEM, blender::bke::mesh::face_center_calc(), IslandResult::factor, blender::bits::BitVector< InlineBufferCapacity, Allocator >::fill(), float, FLT_MAX, free_bvhtree_from_mesh(), IslandResult::hit_dist, IslandResult::hit_point, BVHTreeRayHit::index, blender::offset_indices::OffsetIndices< T >::index_range(), blender::Span< T >::index_range(), IslandResult::index_src, MeshElemMap::indices, MeshIslandStore::innercut_type, int, MeshIslandStore::island_type, MeshIslandStore::islands, MeshIslandStore::islands_num, MeshIslandStore::item_type, MeshIslandStore::items_to_islands, len_squared_v3v3(), max_ii(), MEM_callocN, MEM_freeN(), MEM_mallocN, MEM_reallocN, mesh_island_to_astar_graph(), mesh_remap_bvhtree_query_nearest(), mesh_remap_bvhtree_query_raycast(), mesh_remap_calc_loops_astar_f_cost(), mesh_remap_interp_face_data_get(), mesh_remap_item_define(), MISLAND_TYPE_EDGE, MISLAND_TYPE_LOOP, MISLAND_TYPE_POLY, MREMAP_DEFAULT_BUFSIZE, MREMAP_MODE_LOOP, MREMAP_MODE_LOOP_NEAREST_LOOPNOR, MREMAP_MODE_LOOP_NEAREST_POLYNOR, MREMAP_MODE_LOOP_POLY_NEAREST, MREMAP_MODE_TOPOLOGY, MREMAP_RAYCAST_APPROXIMATE_FAC, MREMAP_RAYCAST_APPROXIMATE_NR, MREMAP_USE_LOOP, MREMAP_USE_NORMAL, MREMAP_USE_NORPROJ, MREMAP_USE_POLY, MREMAP_USE_VERT, POINTER_AS_INT, POINTER_FROM_INT, BLI_AStarSolution::prev_links, BLI_AStarSolution::prev_nodes, blender::Array< T, InlineBufferCapacity, Allocator >::reinitialize(), blender::IndexRange::size(), blender::offset_indices::OffsetIndices< T >::size(), blender::Span< T >::size(), blender::Span< T >::slice(), blender::IndexRange::start(), BLI_AStarSolution::steps, Mesh::verts_num, and w().
Referenced by BKE_object_data_transfer_ex().
| void BKE_mesh_remap_calc_verts_from_mesh | ( | int | mode, |
| const SpaceTransform * | space_transform, | ||
| float | max_dist, | ||
| float | ray_radius, | ||
| const float(*) | vert_positions_dst[3], | ||
| int | numverts_dst, | ||
| const Mesh * | me_src, | ||
| Mesh * | me_dst, | ||
| MeshPairRemap * | r_map ) |
Definition at line 449 of file mesh_remap.cc.
References BKE_bvhtree_from_mesh_get(), BKE_mesh_remap_init(), BKE_mesh_remap_item_define_invalid(), BLI_assert, BLI_space_transform_apply(), BLI_space_transform_apply_normal(), BVHTREE_FROM_CORNER_TRIS, BVHTREE_FROM_EDGES, BVHTREE_FROM_VERTS, CLAMP, CLOG_WARN, BVHTreeRayHit::co, copy_v3_v3(), ELEM, float, FLT_MAX, free_bvhtree_from_mesh(), BVHTreeRayHit::index, MeshPairRemap::items, len_squared_v3v3(), line_point_factor_v3(), LOG, MEM_freeN(), MEM_mallocN, mesh_remap_bvhtree_query_nearest(), mesh_remap_bvhtree_query_raycast(), mesh_remap_interp_face_data_get(), mesh_remap_item_define(), MREMAP_DEFAULT_BUFSIZE, MREMAP_MODE_TOPOLOGY, MREMAP_MODE_VERT, MREMAP_MODE_VERT_EDGE_NEAREST, MREMAP_MODE_VERT_EDGEINTERP_NEAREST, MREMAP_MODE_VERT_FACE_NEAREST, MREMAP_MODE_VERT_NEAREST, MREMAP_MODE_VERT_POLYINTERP_NEAREST, MREMAP_MODE_VERT_POLYINTERP_VNORPROJ, and Mesh::verts_num.
Referenced by BKE_object_data_transfer_ex().
| void BKE_mesh_remap_find_best_match_from_mesh | ( | const float(*) | vert_positions_dst[3], |
| int | numverts_dst, | ||
| const Mesh * | me_src, | ||
| SpaceTransform * | r_space_transform ) |
Set r_space_transform so that best bbox of dst matches best bbox of src.
Definition at line 245 of file mesh_remap.cc.
References BKE_mesh_remap_calc_difference_from_mesh(), BLI_space_transform_global_from_matrices(), copy_m4_m4(), blender::Span< T >::data(), float, FLT_MAX, mesh_calc_eigen_matrix(), mul_v3_fl(), and Mesh::verts_num.
Referenced by BKE_object_data_transfer_ex().
| void BKE_mesh_remap_free | ( | MeshPairRemap * | map | ) |
Definition at line 316 of file mesh_remap.cc.
References BLI_memarena_free().
Referenced by BKE_mesh_remap_init(), and BKE_object_data_transfer_ex().
| void BKE_mesh_remap_init | ( | MeshPairRemap * | map, |
| int | items_num ) |
Definition at line 303 of file mesh_remap.cc.
References BKE_mesh_remap_free(), BLI_memarena_alloc(), BLI_memarena_new(), and BLI_MEMARENA_STD_BUFSIZE.
Referenced by BKE_mesh_remap_calc_edges_from_mesh(), BKE_mesh_remap_calc_faces_from_mesh(), BKE_mesh_remap_calc_loops_from_mesh(), and BKE_mesh_remap_calc_verts_from_mesh().
| void BKE_mesh_remap_item_define_invalid | ( | MeshPairRemap * | map, |
| int | index ) |
Definition at line 356 of file mesh_remap.cc.
References FLT_MAX, and mesh_remap_item_define().
Referenced by BKE_mesh_remap_calc_edges_from_mesh(), BKE_mesh_remap_calc_faces_from_mesh(), BKE_mesh_remap_calc_loops_from_mesh(), and BKE_mesh_remap_calc_verts_from_mesh().