Blender  V3.3
Classes
transform_snap_object.cc File Reference
#include <cstdlib>
#include "MEM_guardedalloc.h"
#include "BLI_float4x4.hh"
#include "BLI_kdopbvh.h"
#include "BLI_listbase.h"
#include "BLI_map.hh"
#include "BLI_math.h"
#include "BLI_math_vector.hh"
#include "BLI_utildefines.h"
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
#include "BKE_armature.h"
#include "BKE_bvhutils.h"
#include "BKE_curve.h"
#include "BKE_duplilist.h"
#include "BKE_editmesh.h"
#include "BKE_geometry_set.h"
#include "BKE_global.h"
#include "BKE_layer.h"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
#include "BKE_object.h"
#include "BKE_tracking.h"
#include "DEG_depsgraph_query.h"
#include "ED_armature.h"
#include "ED_transform_snap_object_context.h"
#include "ED_view3d.h"

Go to the source code of this file.

Classes

struct  SnapData_Mesh
 
struct  SnapData_EditMesh
 
struct  SnapObjectContext
 
struct  RayCastAll_Data
 
struct  RaycastObjUserData
 
struct  NearestWorldObjUserData
 
struct  Nearest2dUserData
 
struct  SnapObjUserData
 

Functions

Utilities
static const Meshmesh_for_snap (Object *ob_eval, eSnapEditType edit_mode_type, bool *r_use_hide)
 
Snap Object Data
static void snap_editmesh_minmax (SnapObjectContext *sctx, BMesh *bm, float r_min[3], float r_max[3])
 
static SnapData_Meshsnap_object_data_mesh_get (SnapObjectContext *sctx, Object *ob_eval, const Mesh *me_eval, bool use_hide)
 
static Mesh_Runtimesnap_object_data_editmesh_runtime_get (Object *ob_eval)
 
static SnapData_EditMeshsnap_object_data_editmesh_get (SnapObjectContext *sctx, Object *ob_eval, BMEditMesh *em)
 
static BVHTreeFromMeshsnap_object_data_mesh_treedata_get (SnapObjectContext *sctx, Object *ob_eval, const Mesh *me_eval, bool use_hide)
 
static BVHTreeFromEditMeshsnap_object_data_editmesh_treedata_get (SnapObjectContext *sctx, Object *ob_eval, BMEditMesh *em)
 
Ray Cast Funcs
static SnapObjectHitDepthhit_depth_create (const float depth, const float co[3], const float no[3], int index, Object *ob_eval, const float obmat[4][4], uint ob_uuid)
 
static int hit_depth_cmp (const void *arg1, const void *arg2)
 
static void raycast_all_cb (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
 
static bool raycast_tri_backface_culling_test (const float dir[3], const float v0[3], const float v1[3], const float v2[3], float no[3])
 
static void mesh_looptri_raycast_backface_culling_cb (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
 
static void editmesh_looptri_raycast_backface_culling_cb (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
 
static bool raycastMesh (SnapObjectContext *sctx, const SnapObjectParams *params, const float ray_start[3], const float ray_dir[3], Object *ob_eval, const Mesh *me_eval, const float obmat[4][4], const uint ob_index, bool use_hide, float *ray_depth, float r_loc[3], float r_no[3], int *r_index, ListBase *r_hit_list)
 
static bool raycastEditMesh (SnapObjectContext *sctx, const SnapObjectParams *params, const float ray_start[3], const float ray_dir[3], Object *ob_eval, BMEditMesh *em, const float obmat[4][4], const uint ob_index, float *ray_depth, float r_loc[3], float r_no[3], int *r_index, ListBase *r_hit_list)
 
static void raycast_obj_fn (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], bool is_object_active, void *data)
 
static bool raycastObjects (SnapObjectContext *sctx, const SnapObjectParams *params, const float ray_start[3], const float ray_dir[3], float *ray_depth, float r_loc[3], float r_no[3], int *r_index, Object **r_ob, float r_obmat[4][4], ListBase *r_hit_list)
 
Surface Snap Funcs
static void nearest_world_tree_co (BVHTree *tree, BVHTree_NearestPointCallback nearest_cb, void *treedata, float co[3], float r_co[3], float r_no[3], int *r_index, float *r_dist_sq)
 
static bool nearest_world_tree (SnapObjectContext *UNUSED(sctx), const struct SnapObjectParams *params, BVHTree *tree, BVHTree_NearestPointCallback nearest_cb, void *treedata, const float(*obmat)[4], const float init_co[3], const float curr_co[3], float *r_dist_sq, float *r_loc, float *r_no, int *r_index)
 
static bool nearest_world_mesh (SnapObjectContext *sctx, const struct SnapObjectParams *params, Object *ob_eval, const Mesh *me_eval, const float(*obmat)[4], bool use_hide, const float init_co[3], const float curr_co[3], float *r_dist_sq, float *r_loc, float *r_no, int *r_index)
 
static bool nearest_world_editmesh (SnapObjectContext *sctx, const struct SnapObjectParams *params, Object *ob_eval, BMEditMesh *em, const float(*obmat)[4], const float init_co[3], const float curr_co[3], float *r_dist_sq, float *r_loc, float *r_no, int *r_index)
 
static void nearest_world_object_fn (SnapObjectContext *sctx, const struct SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], bool is_object_active, void *data)
 
static bool nearestWorldObjects (SnapObjectContext *sctx, const struct SnapObjectParams *params, const float init_co[3], const float curr_co[3], float *r_loc, float *r_no, int *r_index, Object **r_ob, float r_obmat[4][4])
 
Snap Nearest utilities
static bool snap_bound_box_check_dist (const float min[3], const float max[3], const float lpmat[4][4], const float win_size[2], const float mval[2], float dist_px_sq)
 
Internal Object Snapping API
static eSnapMode snap_mesh_polygon (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], float *dist_px, float r_loc[3], float r_no[3], int *r_index)
 
static eSnapMode snap_mesh_edge_verts_mixed (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], float original_dist_px, const float prev_co[3], float *dist_px, float r_loc[3], float r_no[3], int *r_index)
 
static eSnapMode snapArmature (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], bool is_object_active, float *dist_px, float r_loc[3], float *UNUSED(r_no), int *r_index)
 
static eSnapMode snapCurve (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], float *dist_px, float r_loc[3], float *UNUSED(r_no), int *r_index)
 
static eSnapMode snap_object_center (const SnapObjectContext *sctx, Object *ob_eval, const float obmat[4][4], float *dist_px, float r_loc[3], float *UNUSED(r_no), int *r_index)
 
static eSnapMode snapCamera (const SnapObjectContext *sctx, Object *object, const float obmat[4][4], float *dist_px, float r_loc[3], float *r_no, int *r_index)
 
static eSnapMode snapMesh (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const Mesh *me_eval, const float obmat[4][4], bool use_hide, float *dist_px, float r_loc[3], float r_no[3], int *r_index)
 
static eSnapMode snapEditMesh (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, BMEditMesh *em, const float obmat[4][4], float *dist_px, float r_loc[3], float r_no[3], int *r_index)
 
static void snap_obj_fn (SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], bool is_object_active, void *data)
 
static eSnapMode snapObjectsRay (SnapObjectContext *sctx, const SnapObjectParams *params, float *dist_px, float r_loc[3], float r_no[3], int *r_index, Object **r_ob, float r_obmat[4][4])
 
Public Object Snapping API
SnapObjectContextED_transform_snap_object_context_create (Scene *scene, int flag)
 
void ED_transform_snap_object_context_destroy (SnapObjectContext *sctx)
 
void ED_transform_snap_object_context_set_editmesh_callbacks (SnapObjectContext *sctx, bool(*test_vert_fn)(BMVert *, void *user_data), bool(*test_edge_fn)(BMEdge *, void *user_data), bool(*test_face_fn)(BMFace *, void *user_data), void *user_data)
 
bool ED_transform_snap_object_project_ray_ex (SnapObjectContext *sctx, Depsgraph *depsgraph, const View3D *v3d, const SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], float *ray_depth, float r_loc[3], float r_no[3], int *r_index, Object **r_ob, float r_obmat[4][4])
 
bool ED_transform_snap_object_project_ray_all (SnapObjectContext *sctx, Depsgraph *depsgraph, const View3D *v3d, const SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], float ray_depth, bool sort, ListBase *r_hit_list)
 
static bool transform_snap_context_project_ray_impl (SnapObjectContext *sctx, Depsgraph *depsgraph, const View3D *v3d, const SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], float *ray_depth, float r_co[3], float r_no[3])
 
bool ED_transform_snap_object_project_ray (SnapObjectContext *sctx, Depsgraph *depsgraph, const View3D *v3d, const SnapObjectParams *params, const float ray_origin[3], const float ray_direction[3], float *ray_depth, float r_co[3], float r_no[3])
 
static eSnapMode transform_snap_context_project_view3d_mixed_impl (SnapObjectContext *sctx, Depsgraph *depsgraph, const ARegion *region, const View3D *v3d, const eSnapMode snap_to_flag, const SnapObjectParams *params, const float init_co[3], const float mval[2], const float prev_co[3], float *dist_px, float r_loc[3], float r_no[3], int *r_index, Object **r_ob, float r_obmat[4][4], float r_face_nor[3])
 
eSnapMode ED_transform_snap_object_project_view3d_ex (SnapObjectContext *sctx, Depsgraph *depsgraph, const ARegion *region, const View3D *v3d, const eSnapMode snap_to, const SnapObjectParams *params, const float init_co[3], const float mval[2], const float prev_co[3], float *dist_px, float r_loc[3], float r_no[3], int *r_index, Object **r_ob, float r_obmat[4][4], float r_face_nor[3])
 
eSnapMode ED_transform_snap_object_project_view3d (SnapObjectContext *sctx, Depsgraph *depsgraph, const ARegion *region, const View3D *v3d, const eSnapMode snap_to, const SnapObjectParams *params, const float init_co[3], const float mval[2], const float prev_co[3], float *dist_px, float r_loc[3], float r_no[3])
 
bool ED_transform_snap_object_project_all_view3d_ex (SnapObjectContext *sctx, Depsgraph *depsgraph, const ARegion *region, const View3D *v3d, const SnapObjectParams *params, const float mval[2], float ray_depth, bool sort, ListBase *r_hit_list)
 

Internal Data Types

#define MAX_CLIPPLANE_LEN   3
 
enum  eViewProj { VIEW_PROJ_NONE = -1 , VIEW_PROJ_ORTHO = 0 , VIEW_PROJ_PERSP = -1 }
 

Iterator

using IterSnapObjsCallback = void(*)(SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], bool is_object_active, void *data)
 
static bool snap_object_is_snappable (const SnapObjectContext *sctx, const eSnapTargetSelect snap_target_select, const Base *base_act, const Base *base)
 
static void iter_snap_objects (SnapObjectContext *sctx, const SnapObjectParams *params, IterSnapObjsCallback sob_callback, void *data)
 

Callbacks

using Nearest2DGetVertCoCallback = void(*)(const int index, const Nearest2dUserData *data, const float **r_co)
 
using Nearest2DGetEdgeVertsCallback = void(*)(const int index, const Nearest2dUserData *data, int r_v_index[2])
 
using Nearest2DGetTriVertsCallback = void(*)(const int index, const Nearest2dUserData *data, int r_v_index[3])
 
using Nearest2DGetTriEdgesCallback = void(*)(const int index, const Nearest2dUserData *data, int r_e_index[3])
 
using Nearest2DCopyVertNoCallback = void(*)(const int index, const Nearest2dUserData *data, float r_no[3])
 
static void cb_mvert_co_get (const int index, const Nearest2dUserData *data, const float **r_co)
 
static void cb_bvert_co_get (const int index, const Nearest2dUserData *data, const float **r_co)
 
static void cb_mvert_no_copy (const int index, const Nearest2dUserData *data, float r_no[3])
 
static void cb_bvert_no_copy (const int index, const Nearest2dUserData *data, float r_no[3])
 
static void cb_medge_verts_get (const int index, const Nearest2dUserData *data, int r_v_index[2])
 
static void cb_bedge_verts_get (const int index, const Nearest2dUserData *data, int r_v_index[2])
 
static void cb_mlooptri_edges_get (const int index, const Nearest2dUserData *data, int r_v_index[3])
 
static void cb_mlooptri_verts_get (const int index, const Nearest2dUserData *data, int r_v_index[3])
 
static bool test_projected_vert_dist (const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, const bool is_persp, const float co[3], float *dist_px_sq, float r_co[3])
 
static bool test_projected_edge_dist (const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, const bool is_persp, const float va[3], const float vb[3], float *dist_px_sq, float r_co[3])
 
static void cb_snap_vert (void *userdata, int index, const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest)
 
static void cb_snap_edge (void *userdata, int index, const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest)
 
static void cb_snap_edge_verts (void *userdata, int index, const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest)
 
static void cb_snap_tri_edges (void *userdata, int index, const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest)
 
static void cb_snap_tri_verts (void *userdata, int index, const DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest)
 
static void nearest2d_data_init_mesh (SnapData_Mesh *sod, bool is_persp, bool use_backface_culling, Nearest2dUserData *r_nearest2d)
 
static void nearest2d_data_init_editmesh (SnapData_EditMesh *sod, bool is_persp, bool use_backface_culling, Nearest2dUserData *r_nearest2d)
 

Macro Definition Documentation

◆ MAX_CLIPPLANE_LEN

#define MAX_CLIPPLANE_LEN   3

Definition at line 55 of file transform_snap_object.cc.

Typedef Documentation

◆ IterSnapObjsCallback

using IterSnapObjsCallback = void (*)(SnapObjectContext *sctx, const SnapObjectParams *params, Object *ob_eval, const float obmat[4][4], bool is_object_active, void *data)

Definition at line 470 of file transform_snap_object.cc.

◆ Nearest2DCopyVertNoCallback

using Nearest2DCopyVertNoCallback = void (*)(const int index, const Nearest2dUserData *data, float r_no[3])

Definition at line 1554 of file transform_snap_object.cc.

◆ Nearest2DGetEdgeVertsCallback

using Nearest2DGetEdgeVertsCallback = void (*)(const int index, const Nearest2dUserData *data, int r_v_index[2])

Definition at line 1544 of file transform_snap_object.cc.

◆ Nearest2DGetTriEdgesCallback

using Nearest2DGetTriEdgesCallback = void (*)(const int index, const Nearest2dUserData *data, int r_e_index[3])

Definition at line 1551 of file transform_snap_object.cc.

◆ Nearest2DGetTriVertsCallback

using Nearest2DGetTriVertsCallback = void (*)(const int index, const Nearest2dUserData *data, int r_v_index[3])

Definition at line 1547 of file transform_snap_object.cc.

◆ Nearest2DGetVertCoCallback

using Nearest2DGetVertCoCallback = void (*)(const int index, const Nearest2dUserData *data, const float **r_co)

Definition at line 1541 of file transform_snap_object.cc.

Enumeration Type Documentation

◆ eViewProj

enum eViewProj
Enumerator
VIEW_PROJ_NONE 
VIEW_PROJ_ORTHO 
VIEW_PROJ_PERSP 

Definition at line 57 of file transform_snap_object.cc.

Function Documentation

◆ cb_bedge_verts_get()

static void cb_bedge_verts_get ( const int  index,
const Nearest2dUserData data,
int  r_v_index[2] 
)
static

◆ cb_bvert_co_get()

static void cb_bvert_co_get ( const int  index,
const Nearest2dUserData data,
const float **  r_co 
)
static

Definition at line 1587 of file transform_snap_object.cc.

References BM_vert_at_index(), BMVert::co, and data.

Referenced by nearest2d_data_init_editmesh().

◆ cb_bvert_no_copy()

static void cb_bvert_no_copy ( const int  index,
const Nearest2dUserData data,
float  r_no[3] 
)
static

Definition at line 1598 of file transform_snap_object.cc.

References BM_vert_at_index(), copy_v3_v3(), data, and BMVert::no.

Referenced by nearest2d_data_init_editmesh().

◆ cb_medge_verts_get()

static void cb_medge_verts_get ( const int  index,
const Nearest2dUserData data,
int  r_v_index[2] 
)
static

Definition at line 1605 of file transform_snap_object.cc.

References data.

Referenced by nearest2d_data_init_mesh().

◆ cb_mlooptri_edges_get()

static void cb_mlooptri_edges_get ( const int  index,
const Nearest2dUserData data,
int  r_v_index[3] 
)
static

Definition at line 1621 of file transform_snap_object.cc.

References data, MLoop::e, ELEM, MLoopTri::tri, MLoop::v, MEdge::v1, and MEdge::v2.

Referenced by nearest2d_data_init_mesh().

◆ cb_mlooptri_verts_get()

static void cb_mlooptri_verts_get ( const int  index,
const Nearest2dUserData data,
int  r_v_index[3] 
)
static

Definition at line 1639 of file transform_snap_object.cc.

References data, MLoopTri::tri, and MLoop::v.

Referenced by nearest2d_data_init_mesh().

◆ cb_mvert_co_get()

static void cb_mvert_co_get ( const int  index,
const Nearest2dUserData data,
const float **  r_co 
)
static

Definition at line 1582 of file transform_snap_object.cc.

References data.

Referenced by nearest2d_data_init_mesh().

◆ cb_mvert_no_copy()

static void cb_mvert_no_copy ( const int  index,
const Nearest2dUserData data,
float  r_no[3] 
)
static

Definition at line 1593 of file transform_snap_object.cc.

References copy_v3_v3(), and data.

Referenced by nearest2d_data_init_mesh().

◆ cb_snap_edge()

static void cb_snap_edge ( void userdata,
int  index,
const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
BVHTreeNearest nearest 
)
static

◆ cb_snap_edge_verts()

static void cb_snap_edge_verts ( void userdata,
int  index,
const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
BVHTreeNearest nearest 
)
static

Definition at line 1762 of file transform_snap_object.cc.

References cb_snap_vert(), data, and BVHTreeNearest::index.

Referenced by snapMesh().

◆ cb_snap_tri_edges()

static void cb_snap_tri_edges ( void userdata,
int  index,
const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
BVHTreeNearest nearest 
)
static

◆ cb_snap_tri_verts()

static void cb_snap_tri_verts ( void userdata,
int  index,
const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
BVHTreeNearest nearest 
)
static

◆ cb_snap_vert()

static void cb_snap_vert ( void userdata,
int  index,
const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
BVHTreeNearest nearest 
)
static

◆ ED_transform_snap_object_context_create()

SnapObjectContext* ED_transform_snap_object_context_create ( Scene scene,
int  flag 
)

◆ ED_transform_snap_object_context_destroy()

void ED_transform_snap_object_context_destroy ( SnapObjectContext sctx)

◆ ED_transform_snap_object_context_set_editmesh_callbacks()

void ED_transform_snap_object_context_set_editmesh_callbacks ( SnapObjectContext sctx,
bool(*)(BMVert *, void *user_data test_vert_fn,
bool(*)(BMEdge *, void *user_data test_edge_fn,
bool(*)(BMFace *, void *user_data test_face_fn,
void user_data 
)

◆ ED_transform_snap_object_project_all_view3d_ex()

bool ED_transform_snap_object_project_all_view3d_ex ( SnapObjectContext sctx,
Depsgraph depsgraph,
const ARegion region,
const View3D v3d,
const SnapObjectParams params,
const float  mval[2],
float  ray_depth,
bool  sort,
ListBase r_hit_list 
)

◆ ED_transform_snap_object_project_ray()

bool ED_transform_snap_object_project_ray ( SnapObjectContext sctx,
Depsgraph depsgraph,
const View3D v3d,
const SnapObjectParams params,
const float  ray_origin[3],
const float  ray_direction[3],
float ray_depth,
float  r_co[3],
float  r_no[3] 
)

◆ ED_transform_snap_object_project_ray_all()

bool ED_transform_snap_object_project_ray_all ( SnapObjectContext sctx,
Depsgraph depsgraph,
const View3D v3d,
const SnapObjectParams params,
const float  ray_start[3],
const float  ray_normal[3],
float  ray_depth,
bool  sort,
ListBase r_hit_list 
)

◆ ED_transform_snap_object_project_ray_ex()

bool ED_transform_snap_object_project_ray_ex ( SnapObjectContext sctx,
Depsgraph depsgraph,
const View3D v3d,
const SnapObjectParams params,
const float  ray_start[3],
const float  ray_normal[3],
float ray_depth,
float  r_loc[3],
float  r_no[3],
int *  r_index,
Object **  r_ob,
float  r_obmat[4][4] 
)

◆ ED_transform_snap_object_project_view3d()

eSnapMode ED_transform_snap_object_project_view3d ( SnapObjectContext sctx,
Depsgraph depsgraph,
const ARegion region,
const View3D v3d,
const eSnapMode  snap_to,
const SnapObjectParams params,
const float  init_co[3],
const float  mval[2],
const float  prev_co[3],
float dist_px,
float  r_loc[3],
float  r_no[3] 
)

◆ ED_transform_snap_object_project_view3d_ex()

eSnapMode ED_transform_snap_object_project_view3d_ex ( SnapObjectContext sctx,
Depsgraph depsgraph,
const ARegion region,
const View3D v3d,
const eSnapMode  snap_to,
const SnapObjectParams params,
const float  init_co[3],
const float  mval[2],
const float  prev_co[3],
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index,
Object **  r_ob,
float  r_obmat[4][4],
float  r_face_nor[3] 
)

◆ editmesh_looptri_raycast_backface_culling_cb()

static void editmesh_looptri_raycast_backface_culling_cb ( void userdata,
int  index,
const BVHTreeRay ray,
BVHTreeRayHit hit 
)
static

◆ hit_depth_cmp()

static int hit_depth_cmp ( const void arg1,
const void arg2 
)
static

◆ hit_depth_create()

static SnapObjectHitDepth* hit_depth_create ( const float  depth,
const float  co[3],
const float  no[3],
int  index,
Object ob_eval,
const float  obmat[4][4],
uint  ob_uuid 
)
static

◆ iter_snap_objects()

static void iter_snap_objects ( SnapObjectContext sctx,
const SnapObjectParams params,
IterSnapObjsCallback  sob_callback,
void data 
)
static

◆ mesh_for_snap()

static const Mesh* mesh_for_snap ( Object ob_eval,
eSnapEditType  edit_mode_type,
bool r_use_hide 
)
static

Mesh used for snapping.

  • When the return value is null the BKE_editmesh_from_object(ob_eval) should be used.
  • In rare cases there is no evaluated mesh available and a null result doesn't imply an edit-mesh, so callers need to account for a null edit-mesh too, see: T96536.

Definition at line 178 of file transform_snap_object.cc.

References BKE_object_get_editmesh_eval_cage(), BKE_object_get_editmesh_eval_final(), BKE_object_get_evaluated_mesh(), BKE_object_is_in_editmode(), ME_WRAPPER_TYPE_BMESH, Mesh::runtime, SNAP_GEOM_CAGE, SNAP_GEOM_EDIT, SNAP_GEOM_FINAL, and Mesh_Runtime::wrapper_type.

Referenced by nearest_world_object_fn(), raycast_obj_fn(), and snap_obj_fn().

◆ mesh_looptri_raycast_backface_culling_cb()

static void mesh_looptri_raycast_backface_culling_cb ( void userdata,
int  index,
const BVHTreeRay ray,
BVHTreeRayHit hit 
)
static

◆ nearest2d_data_init_editmesh()

static void nearest2d_data_init_editmesh ( SnapData_EditMesh sod,
bool  is_persp,
bool  use_backface_culling,
Nearest2dUserData r_nearest2d 
)
static

◆ nearest2d_data_init_mesh()

static void nearest2d_data_init_mesh ( SnapData_Mesh sod,
bool  is_persp,
bool  use_backface_culling,
Nearest2dUserData r_nearest2d 
)
static

◆ nearest_world_editmesh()

static bool nearest_world_editmesh ( SnapObjectContext sctx,
const struct SnapObjectParams params,
Object ob_eval,
BMEditMesh em,
const float(*)  obmat[4],
const float  init_co[3],
const float  curr_co[3],
float r_dist_sq,
float r_loc,
float r_no,
int *  r_index 
)
static

◆ nearest_world_mesh()

static bool nearest_world_mesh ( SnapObjectContext sctx,
const struct SnapObjectParams params,
Object ob_eval,
const Mesh me_eval,
const float(*)  obmat[4],
bool  use_hide,
const float  init_co[3],
const float  curr_co[3],
float r_dist_sq,
float r_loc,
float r_no,
int *  r_index 
)
static

◆ nearest_world_object_fn()

static void nearest_world_object_fn ( SnapObjectContext sctx,
const struct SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
bool  is_object_active,
void data 
)
static

◆ nearest_world_tree()

static bool nearest_world_tree ( SnapObjectContext UNUSEDsctx,
const struct SnapObjectParams params,
BVHTree tree,
BVHTree_NearestPointCallback  nearest_cb,
void treedata,
const float(*)  obmat[4],
const float  init_co[3],
const float  curr_co[3],
float r_dist_sq,
float r_loc,
float r_no,
int *  r_index 
)
static

◆ nearest_world_tree_co()

static void nearest_world_tree_co ( BVHTree tree,
BVHTree_NearestPointCallback  nearest_cb,
void treedata,
float  co[3],
float  r_co[3],
float  r_no[3],
int *  r_index,
float r_dist_sq 
)
static

◆ nearestWorldObjects()

static bool nearestWorldObjects ( SnapObjectContext sctx,
const struct SnapObjectParams params,
const float  init_co[3],
const float  curr_co[3],
float r_loc,
float r_no,
int *  r_index,
Object **  r_ob,
float  r_obmat[4][4] 
)
static

Main Nearest World Surface Function

Walks through all objects in the scene to find the nearest location on target surface.

Parameters
sctxSnap context to store data.
paramsSettings for snapping.
init_coInitial location of source point.
prev_coCurrent location of source point after transformation but before snapping.

Output Args

Parameters
r_locLocation of nearest point on target surface.
r_noNormal of nearest point on target surface.
r_indexIndex of nearest polygon on target surface.
r_obNearest target object.
r_obmatNearest target matrix (may not be Object.obmat with dupli-instances).

Definition at line 1479 of file transform_snap_object.cc.

References NearestWorldObjUserData::curr_co, data, NearestWorldObjUserData::init_co, iter_snap_objects(), nearest_world_object_fn(), params, NearestWorldObjUserData::r_index, NearestWorldObjUserData::r_loc, NearestWorldObjUserData::r_no, NearestWorldObjUserData::r_ob, and NearestWorldObjUserData::r_obmat.

Referenced by transform_snap_context_project_view3d_mixed_impl().

◆ raycast_all_cb()

static void raycast_all_cb ( void userdata,
int  index,
const BVHTreeRay ray,
BVHTreeRayHit hit 
)
static

◆ raycast_obj_fn()

static void raycast_obj_fn ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
bool  is_object_active,
void data 
)
static

◆ raycast_tri_backface_culling_test()

static bool raycast_tri_backface_culling_test ( const float  dir[3],
const float  v0[3],
const float  v1[3],
const float  v2[3],
float  no[3] 
)
static

◆ raycastEditMesh()

static bool raycastEditMesh ( SnapObjectContext sctx,
const SnapObjectParams params,
const float  ray_start[3],
const float  ray_dir[3],
Object ob_eval,
BMEditMesh em,
const float  obmat[4][4],
const uint  ob_index,
float ray_depth,
float  r_loc[3],
float  r_no[3],
int *  r_index,
ListBase r_hit_list 
)
static

◆ raycastMesh()

static bool raycastMesh ( SnapObjectContext sctx,
const SnapObjectParams params,
const float  ray_start[3],
const float  ray_dir[3],
Object ob_eval,
const Mesh me_eval,
const float  obmat[4][4],
const uint  ob_index,
bool  use_hide,
float ray_depth,
float  r_loc[3],
float  r_no[3],
int *  r_index,
ListBase r_hit_list 
)
static

◆ raycastObjects()

static bool raycastObjects ( SnapObjectContext sctx,
const SnapObjectParams params,
const float  ray_start[3],
const float  ray_dir[3],
float ray_depth,
float  r_loc[3],
float  r_no[3],
int *  r_index,
Object **  r_ob,
float  r_obmat[4][4],
ListBase r_hit_list 
)
static

Main RayCast Function

Walks through all objects in the scene to find the hit on object surface.

Parameters
sctxSnap context to store data.

Read/Write Args

Parameters
ray_depthmaximum depth allowed for r_co, elements deeper than this value will be ignored.

Output Args

Parameters
r_locHit location.
r_noHit normal (optional).
r_indexHit index or -1 when no valid index is found. (currently only set to the polygon index when using snap_to == SCE_SNAP_MODE_FACE_RAYCAST).
r_obHit object.
r_obmatObject matrix (may not be Object.obmat with dupli-instances).
r_hit_listList of SnapObjectHitDepth (caller must free).

Definition at line 1142 of file transform_snap_object.cc.

References data, iter_snap_objects(), params, raycast_obj_fn(), SnapObjectContext::runtime, SNAP_GEOM_EDIT, SnapObjectContext::v3d, and XRAY_FLAG_ENABLED.

Referenced by ED_transform_snap_object_project_ray_all(), ED_transform_snap_object_project_ray_ex(), and transform_snap_context_project_view3d_mixed_impl().

◆ snap_bound_box_check_dist()

static bool snap_bound_box_check_dist ( const float  min[3],
const float  max[3],
const float  lpmat[4][4],
const float  win_size[2],
const float  mval[2],
float  dist_px_sq 
)
static

◆ snap_editmesh_minmax()

static void snap_editmesh_minmax ( SnapObjectContext sctx,
BMesh bm,
float  r_min[3],
float  r_max[3] 
)
static

Calculate the minimum and maximum coordinates of the box that encompasses this mesh.

Definition at line 220 of file transform_snap_object.cc.

References bm, BM_ITER_MESH, BM_VERTS_OF_MESH, SnapObjectContext::callbacks, BMVert::co, SnapObjectContext::edit_mesh, INIT_MINMAX, minmax_v3v3_v3(), and v.

Referenced by snap_object_data_editmesh_get().

◆ snap_mesh_edge_verts_mixed()

static eSnapMode snap_mesh_edge_verts_mixed ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
float  original_dist_px,
const float  prev_co[3],
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index 
)
static

◆ snap_mesh_polygon()

static eSnapMode snap_mesh_polygon ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index 
)
static

◆ snap_obj_fn()

static void snap_obj_fn ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
bool  is_object_active,
void data 
)
static

◆ snap_object_center()

static eSnapMode snap_object_center ( const SnapObjectContext sctx,
Object ob_eval,
const float  obmat[4][4],
float dist_px,
float  r_loc[3],
float UNUSEDr_no,
int *  r_index 
)
static

◆ snap_object_data_editmesh_get()

static SnapData_EditMesh* snap_object_data_editmesh_get ( SnapObjectContext sctx,
Object ob_eval,
BMEditMesh em 
)
static

◆ snap_object_data_editmesh_runtime_get()

static Mesh_Runtime* snap_object_data_editmesh_runtime_get ( Object ob_eval)
static

◆ snap_object_data_editmesh_treedata_get()

static BVHTreeFromEditMesh* snap_object_data_editmesh_treedata_get ( SnapObjectContext sctx,
Object ob_eval,
BMEditMesh em 
)
static

◆ snap_object_data_mesh_get()

static SnapData_Mesh* snap_object_data_mesh_get ( SnapObjectContext sctx,
Object ob_eval,
const Mesh me_eval,
bool  use_hide 
)
static

◆ snap_object_data_mesh_treedata_get()

static BVHTreeFromMesh* snap_object_data_mesh_treedata_get ( SnapObjectContext sctx,
Object ob_eval,
const Mesh me_eval,
bool  use_hide 
)
static

◆ snap_object_is_snappable()

static bool snap_object_is_snappable ( const SnapObjectContext sctx,
const eSnapTargetSelect  snap_target_select,
const Base base_act,
const Base base 
)
static

◆ snapArmature()

static eSnapMode snapArmature ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
bool  is_object_active,
float dist_px,
float  r_loc[3],
float UNUSEDr_no,
int *  r_index 
)
static

◆ snapCamera()

static eSnapMode snapCamera ( const SnapObjectContext sctx,
Object object,
const float  obmat[4][4],
float dist_px,
float  r_loc[3],
float r_no,
int *  r_index 
)
static

◆ snapCurve()

static eSnapMode snapCurve ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const float  obmat[4][4],
float dist_px,
float  r_loc[3],
float UNUSEDr_no,
int *  r_index 
)
static

◆ snapEditMesh()

static eSnapMode snapEditMesh ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
BMEditMesh em,
const float  obmat[4][4],
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index 
)
static

◆ snapMesh()

static eSnapMode snapMesh ( SnapObjectContext sctx,
const SnapObjectParams params,
Object ob_eval,
const Mesh me_eval,
const float  obmat[4][4],
bool  use_hide,
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index 
)
static

◆ snapObjectsRay()

static eSnapMode snapObjectsRay ( SnapObjectContext sctx,
const SnapObjectParams params,
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index,
Object **  r_ob,
float  r_obmat[4][4] 
)
static

Main Snapping Function

Walks through all objects in the scene to find the closest snap element ray.

Parameters
sctxSnap context to store data.

Read/Write Args

Parameters
dist_pxMaximum threshold distance (in pixels).

Output Args

Parameters
r_locHit location.
r_noHit normal (optional).
r_indexHit index or -1 when no valid index is found. (currently only set to the polygon index when using snap_to == SCE_SNAP_MODE_FACE_RAYCAST).
r_obHit object.
r_obmatObject matrix (may not be Object.obmat with dupli-instances).

Definition at line 3168 of file transform_snap_object.cc.

References data, iter_snap_objects(), params, SCE_SNAP_MODE_NONE, and snap_obj_fn().

Referenced by transform_snap_context_project_view3d_mixed_impl().

◆ test_projected_edge_dist()

static bool test_projected_edge_dist ( const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
const bool  is_persp,
const float  va[3],
const float  vb[3],
float dist_px_sq,
float  r_co[3] 
)
static

◆ test_projected_vert_dist()

static bool test_projected_vert_dist ( const DistProjectedAABBPrecalc precalc,
const float(*)  clip_plane[4],
const int  clip_plane_len,
const bool  is_persp,
const float  co[3],
float dist_px_sq,
float  r_co[3] 
)
static

◆ transform_snap_context_project_ray_impl()

static bool transform_snap_context_project_ray_impl ( SnapObjectContext sctx,
Depsgraph depsgraph,
const View3D v3d,
const SnapObjectParams params,
const float  ray_start[3],
const float  ray_normal[3],
float ray_depth,
float  r_co[3],
float  r_no[3] 
)
static

Convenience function for snap ray-casting.

Given a ray, cast it into the scene (snapping to faces).

Returns
Snap success

Definition at line 3312 of file transform_snap_object.cc.

References depsgraph, ED_transform_snap_object_project_ray_ex(), params, and ret.

Referenced by ED_transform_snap_object_project_ray().

◆ transform_snap_context_project_view3d_mixed_impl()

static eSnapMode transform_snap_context_project_view3d_mixed_impl ( SnapObjectContext sctx,
Depsgraph depsgraph,
const ARegion region,
const View3D v3d,
const eSnapMode  snap_to_flag,
const SnapObjectParams params,
const float  init_co[3],
const float  mval[2],
const float  prev_co[3],
float dist_px,
float  r_loc[3],
float  r_no[3],
int *  r_index,
Object **  r_ob,
float  r_obmat[4][4],
float  r_face_nor[3] 
)
static