Blender  V2.93
Classes | Macros
transform_convert_mesh.c File Reference
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_alloca.h"
#include "BLI_linklist_stack.h"
#include "BLI_math.h"
#include "BLI_memarena.h"
#include "BKE_context.h"
#include "BKE_crazyspace.h"
#include "BKE_editmesh.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_scene.h"
#include "ED_mesh.h"
#include "DEG_depsgraph_query.h"
#include "transform.h"
#include "transform_orientations.h"
#include "transform_snap.h"
#include "transform_convert.h"

Go to the source code of this file.

Classes

struct  TransCustomDataMergeGroup
 
struct  TransCustomDataLayer
 

Macros

#define USE_FACE_SUBSTITUTE
 

Functions

Island Creation
void transform_convert_mesh_islands_calc (struct BMEditMesh *em, const bool calc_single_islands, const bool calc_island_center, const bool calc_island_axismtx, struct TransIslandData *r_island_data)
 
void transform_convert_mesh_islanddata_free (struct TransIslandData *island_data)
 
Connectivity Distance for Proportional Editing
static bool bmesh_test_dist_add (BMVert *v0, BMVert *v1, BMVert *v2, float *dists, int *index, const float mtx[3][3])
 
static bool bmesh_test_loose_edge (BMEdge *edge)
 
void transform_convert_mesh_connectivity_distance (struct BMesh *bm, const float mtx[3][3], float *dists, int *index)
 
Crazy Space
void transform_convert_mesh_crazyspace_detect (TransInfo *t, struct TransDataContainer *tc, struct BMEditMesh *em, struct TransMeshDataCrazySpace *r_crazyspace_data)
 
void transform_convert_mesh_crazyspace_transdata_set (const float mtx[3][3], const float smtx[3][3], const float defmat[3][3], const float quat[4], struct TransData *r_td)
 
void transform_convert_mesh_crazyspace_free (struct TransMeshDataCrazySpace *r_crazyspace_data)
 
Edit Mesh Verts Transform Creation
static void transdata_center_get (const struct TransIslandData *island_data, const int island_index, const float iloc[3], float r_center[3])
 
static void VertsToTransData (TransInfo *t, TransData *td, TransDataExtension *tx, BMEditMesh *em, BMVert *eve, float *bweight, const struct TransIslandData *island_data, const int island_index)
 
void createTransEditVerts (TransInfo *t)
 
Recalc Mesh Data
static void mesh_apply_to_mirror (TransInfo *t)
 
void recalcData_mesh (TransInfo *t)
 
Special After Transform Mesh
void special_aftertrans_update__mesh (bContext *UNUSED(C), TransInfo *t)
 

TransDataMirror Creation

#define TRANSFORM_MAXDIST_MIRROR   0.00002f
 
static bool is_in_quadrant_v3 (const float co[3], const int quadrant[3], const float epsilon)
 
void transform_convert_mesh_mirrordata_calc (struct BMEditMesh *em, const bool use_select, const bool use_topology, const bool mirror_axis[3], struct TransMirrorData *r_mirror_data)
 
void transform_convert_mesh_mirrordata_free (struct TransMirrorData *mirror_data)
 

CustomData Layer Correction

#define FACE_SUBSTITUTE_INDEX   INT_MIN
 
static void mesh_customdatacorrect_free_cb (struct TransInfo *UNUSED(t), struct TransDataContainer *UNUSED(tc), struct TransCustomData *custom_data)
 
static BMFacemesh_customdatacorrect_find_best_face_substitute (BMFace *f)
 
static void mesh_customdatacorrect_face_substitute_set (struct TransCustomDataLayer *tcld, BMFace *f, BMFace *f_copy)
 
static BMFacemesh_customdatacorrect_face_substitute_get (BMFace *f_copy)
 
static void mesh_customdatacorrect_init_vert (struct TransCustomDataLayer *tcld, struct TransDataBasic *td, const int index)
 
static void mesh_customdatacorrect_init_container_generic (TransDataContainer *UNUSED(tc), struct TransCustomDataLayer *tcld)
 
static void mesh_customdatacorrect_init_container_merge_group (TransDataContainer *tc, struct TransCustomDataLayer *tcld)
 
static void mesh_customdatacorrect_init_container (TransDataContainer *tc, const bool use_merge_group)
 
void mesh_customdatacorrect_init (TransInfo *t)
 
static const floattrans_vert_orig_co_get (struct TransCustomDataLayer *tcld, BMVert *v)
 
static void mesh_customdatacorrect_apply_vert (struct TransCustomDataLayer *tcld, struct TransDataBasic *td, struct TransCustomDataMergeGroup *merge_data, bool do_loop_mdisps)
 
static void mesh_customdatacorrect_apply (TransInfo *t, bool is_final)
 
static void mesh_customdatacorrect_restore (struct TransInfo *t)
 

Macro Definition Documentation

◆ FACE_SUBSTITUTE_INDEX

#define FACE_SUBSTITUTE_INDEX   INT_MIN

Definition at line 1111 of file transform_convert_mesh.c.

◆ TRANSFORM_MAXDIST_MIRROR

#define TRANSFORM_MAXDIST_MIRROR   0.00002f

Definition at line 498 of file transform_convert_mesh.c.

◆ USE_FACE_SUBSTITUTE

#define USE_FACE_SUBSTITUTE

Definition at line 51 of file transform_convert_mesh.c.

Function Documentation

◆ bmesh_test_dist_add()

static bool bmesh_test_dist_add ( BMVert v0,
BMVert v1,
BMVert v2,
float dists,
int *  index,
const float  mtx[3][3] 
)
static

◆ bmesh_test_loose_edge()

static bool bmesh_test_loose_edge ( BMEdge edge)
static

◆ createTransEditVerts()

void createTransEditVerts ( TransInfo t)

Quick check if we can transform.

Note
ignore modes here, even in edge/face modes, transform data is created by selected vertices.

Definition at line 814 of file transform_convert_mesh.c.

References Freestyle::a, BKE_editmesh_from_object(), BKE_mesh_from_object(), BLI_assert, BMEditMesh::bm, bm, BM_ELEM_CD_GET_VOID_P, BM_elem_flag_test, BM_ELEM_HIDDEN, BM_ELEM_SELECT, BM_ELEM_TAG, BM_ITER_MESH, BM_ITER_MESH_INDEX, BM_mesh_cd_flag_ensure(), BM_vert_at_index(), BM_VERTS_OF_MESH, CD_BWEIGHT, BMVert::co, copy_m3_m4(), copy_v3_v3(), CustomData_get_offset(), TransMeshDataCrazySpace::defmats, TransData::dist, Mesh::editflag, ELEM, fabsf, MirrorDataVert::flag, FOREACH_TRANS_DATA_CONTAINER, MirrorDataVert::index, TransIslandData::island_vert_map, TransDataMirror::loc_src, ME_CDFLAG_VERT_BWEIGHT, ME_EDIT_MIRROR_TOPO, MEM_callocN, MEM_freeN, MEM_mallocN, TransMirrorData::mirror_elem_len, NULL, PSEUDOINVERSE_EPSILON, pseudoinverse_m3_m3(), TransMeshDataCrazySpace::quats, SCE_SELECT_VERTEX, SCE_SNAP_ROTATE, BMEditMesh::selectmode, t, T_PROP_CONNECTED, T_PROP_EDIT, T_PROP_EDIT_ALL, TD_MIRROR_EDGE_X, TD_MIRROR_EDGE_Y, TD_MIRROR_EDGE_Z, TD_NOTCONNECTED, TD_SELECTED, TFM_BWEIGHT, TFM_SHRINKFATTEN, TFM_TRANSLATION, BMesh::totvert, BMesh::totvertsel, transdata_center_get(), transform_convert_mesh_connectivity_distance(), transform_convert_mesh_crazyspace_detect(), transform_convert_mesh_crazyspace_free(), transform_convert_mesh_crazyspace_transdata_set(), transform_convert_mesh_islanddata_free(), transform_convert_mesh_islands_calc(), transform_convert_mesh_mirrordata_calc(), transform_convert_mesh_mirrordata_free(), TRANSFORM_MAXDIST_MIRROR, usingSnappingNormal(), V3D_AROUND_LOCAL_ORIGINS, BMesh::vdata, TransMirrorData::vert_map, and VertsToTransData().

Referenced by createTransData().

◆ is_in_quadrant_v3()

static bool is_in_quadrant_v3 ( const float  co[3],
const int  quadrant[3],
const float  epsilon 
)
static

◆ mesh_apply_to_mirror()

static void mesh_apply_to_mirror ( TransInfo t)
static

◆ mesh_customdatacorrect_apply()

static void mesh_customdatacorrect_apply ( TransInfo t,
bool  is_final 
)
static

◆ mesh_customdatacorrect_apply_vert()

static void mesh_customdatacorrect_apply_vert ( struct TransCustomDataLayer tcld,
struct TransDataBasic td,
struct TransCustomDataMergeGroup merge_data,
bool  do_loop_mdisps 
)
static

◆ mesh_customdatacorrect_face_substitute_get()

static BMFace* mesh_customdatacorrect_face_substitute_get ( BMFace f_copy)
static

◆ mesh_customdatacorrect_face_substitute_set()

static void mesh_customdatacorrect_face_substitute_set ( struct TransCustomDataLayer tcld,
BMFace f,
BMFace f_copy 
)
static

◆ mesh_customdatacorrect_find_best_face_substitute()

static BMFace* mesh_customdatacorrect_find_best_face_substitute ( BMFace f)
static

Search for a neighboring face with area and preferably without selected vertex. Used to replace area-less faces in custom-data correction.

Definition at line 1117 of file transform_convert_mesh.c.

References BM_elem_flag_test, BM_ELEM_SELECT, BM_ITER_ELEM, BM_LOOPS_OF_FACE, BMLoop::f, is_zero_v3(), l, BMLoop::next, BMFace::no, NULL, BMLoop::radial_next, and BMLoop::v.

Referenced by mesh_customdatacorrect_face_substitute_set().

◆ mesh_customdatacorrect_free_cb()

static void mesh_customdatacorrect_free_cb ( struct TransInfo UNUSEDt,
struct TransDataContainer UNUSEDtc,
struct TransCustomData custom_data 
)
static

◆ mesh_customdatacorrect_init()

void mesh_customdatacorrect_init ( TransInfo t)

◆ mesh_customdatacorrect_init_container()

static void mesh_customdatacorrect_init_container ( TransDataContainer tc,
const bool  use_merge_group 
)
static

◆ mesh_customdatacorrect_init_container_generic()

static void mesh_customdatacorrect_init_container_generic ( TransDataContainer UNUSEDtc,
struct TransCustomDataLayer tcld 
)
static

◆ mesh_customdatacorrect_init_container_merge_group()

static void mesh_customdatacorrect_init_container_merge_group ( TransDataContainer tc,
struct TransCustomDataLayer tcld 
)
static

◆ mesh_customdatacorrect_init_vert()

static void mesh_customdatacorrect_init_vert ( struct TransCustomDataLayer tcld,
struct TransDataBasic td,
const int  index 
)
static

◆ mesh_customdatacorrect_restore()

static void mesh_customdatacorrect_restore ( struct TransInfo t)
static

◆ recalcData_mesh()

void recalcData_mesh ( TransInfo t)

◆ special_aftertrans_update__mesh()

void special_aftertrans_update__mesh ( bContext UNUSEDC,
TransInfo t 
)

◆ trans_vert_orig_co_get()

static const float* trans_vert_orig_co_get ( struct TransCustomDataLayer tcld,
BMVert v 
)
static

If we're sliding the vert, return its original location, if not, the current location is good.

Definition at line 1388 of file transform_convert_mesh.c.

References BLI_ghash_lookup(), BMVert::co, TransCustomDataLayer::merge_group, TransCustomDataLayer::origverts, and v.

Referenced by mesh_customdatacorrect_apply_vert().

◆ transdata_center_get()

static void transdata_center_get ( const struct TransIslandData island_data,
const int  island_index,
const float  iloc[3],
float  r_center[3] 
)
static

Definition at line 744 of file transform_convert_mesh.c.

References TransIslandData::center, and copy_v3_v3().

Referenced by createTransEditVerts(), and VertsToTransData().

◆ transform_convert_mesh_connectivity_distance()

void transform_convert_mesh_connectivity_distance ( struct BMesh bm,
const float  mtx[3][3],
float dists,
int *  index 
)

◆ transform_convert_mesh_crazyspace_detect()

void transform_convert_mesh_crazyspace_detect ( TransInfo t,
struct TransDataContainer tc,
struct BMEditMesh em,
struct TransMeshDataCrazySpace r_crazyspace_data 
)

◆ transform_convert_mesh_crazyspace_free()

void transform_convert_mesh_crazyspace_free ( struct TransMeshDataCrazySpace r_crazyspace_data)

◆ transform_convert_mesh_crazyspace_transdata_set()

void transform_convert_mesh_crazyspace_transdata_set ( const float  mtx[3][3],
const float  smtx[3][3],
const float  defmat[3][3],
const float  quat[4],
struct TransData r_td 
)

◆ transform_convert_mesh_islanddata_free()

void transform_convert_mesh_islanddata_free ( struct TransIslandData island_data)

◆ transform_convert_mesh_islands_calc()

void transform_convert_mesh_islands_calc ( struct BMEditMesh em,
const bool  calc_single_islands,
const bool  calc_island_center,
const bool  calc_island_axismtx,
struct TransIslandData r_island_data 
)

◆ transform_convert_mesh_mirrordata_calc()

void transform_convert_mesh_mirrordata_calc ( struct BMEditMesh em,
const bool  use_select,
const bool  use_topology,
const bool  mirror_axis[3],
struct TransMirrorData r_mirror_data 
)

◆ transform_convert_mesh_mirrordata_free()

void transform_convert_mesh_mirrordata_free ( struct TransMirrorData mirror_data)

Definition at line 626 of file transform_convert_mesh.c.

References MEM_freeN, and TransMirrorData::vert_map.

Referenced by createTransEditVerts(), and createTransMeshSkin().

◆ VertsToTransData()

static void VertsToTransData ( TransInfo t,
TransData td,
TransDataExtension tx,
BMEditMesh em,
BMVert eve,
float bweight,
const struct TransIslandData island_data,
const int  island_index 
)
static