|
Blender
V2.93
|
#include <stdlib.h>#include "MEM_guardedalloc.h"#include "BLI_ghash.h"#include "BLI_kdopbvh.h"#include "BLI_listbase.h"#include "BLI_math.h"#include "BLI_memarena.h"#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_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 |
| struct | SnapObjectData |
| struct | SnapObjectContext |
| struct | RayCastAll_Data |
| struct | RaycastObjUserData |
| struct | Nearest2dUserData |
| struct | SnapObjUserData |
Functions | |
Utilities | |
| static bool | editmesh_eval_final_is_bmesh (const BMEditMesh *em) |
Snap Object Data | |
| static void | bm_mesh_minmax (BMesh *bm, float r_min[3], float r_max[3]) |
| static void | snap_object_data_mesh_clear (SnapObjectData *sod) |
| static void | snap_object_data_editmesh_clear (SnapObjectData *sod) |
| static void | snap_object_data_clear (SnapObjectData *sod) |
| static SnapObjectData * | snap_object_data_lookup (SnapObjectContext *sctx, Object *ob) |
| static SnapObjectData * | snap_object_data_mesh_get (SnapObjectContext *sctx, Object *ob) |
| static struct Mesh_Runtime * | snap_object_data_editmesh_runtime_get (Object *ob) |
| static SnapObjectData * | snap_object_data_editmesh_get (SnapObjectContext *sctx, Object *ob, BMEditMesh *em) |
Ray Cast Funcs | |
| static struct SnapObjectHitDepth * | hit_depth_create (const float depth, const float co[3], const float no[3], int index, Object *ob, 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 float ray_start[3], const float ray_dir[3], Object *ob, Mesh *me, const float obmat[4][4], const uint ob_index, bool use_hide, bool use_backface_culling, float *ray_depth, float r_loc[3], float r_no[3], int *r_index, ListBase *r_hit_list) |
| static bool | raycastEditMesh (SnapObjectContext *sctx, const float ray_start[3], const float ray_dir[3], Object *ob, BMEditMesh *em, const float obmat[4][4], const uint ob_index, bool use_backface_culling, 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, Object *ob, float obmat[4][4], bool use_obedit, bool use_backface_culling, bool is_object_active, void *data) |
| static bool | raycastObjects (SnapObjectContext *sctx, Depsgraph *depsgraph, const struct 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) |
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) |
| static void | cb_mvert_co_get (const int index, const float **co, const BVHTreeFromMesh *data) |
| static void | cb_bvert_co_get (const int index, const float **co, const BMEditMesh *data) |
| static void | cb_mvert_no_copy (const int index, float r_no[3], const BVHTreeFromMesh *data) |
| static void | cb_bvert_no_copy (const int index, float r_no[3], const BMEditMesh *data) |
| static void | cb_medge_verts_get (const int index, int v_index[2], const BVHTreeFromMesh *data) |
| static void | cb_bedge_verts_get (const int index, int v_index[2], const BMEditMesh *data) |
| static void | cb_mlooptri_edges_get (const int index, int v_index[3], const BVHTreeFromMesh *data) |
| static void | cb_mlooptri_verts_get (const int index, int v_index[3], const BVHTreeFromMesh *data) |
| static bool | test_projected_vert_dist (const struct 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 struct 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]) |
Internal Object Snapping API | |
| static short | snap_mesh_polygon (SnapObjectContext *sctx, SnapData *snapdata, Object *ob, const float obmat[4][4], bool use_backface_culling, float *dist_px, float r_loc[3], float r_no[3], int *r_index) |
| static short | snap_mesh_edge_verts_mixed (SnapObjectContext *sctx, SnapData *snapdata, Object *ob, const float obmat[4][4], float original_dist_px, const float prev_co[3], bool use_backface_culling, float *dist_px, float r_loc[3], float r_no[3], int *r_index) |
| static short | snapArmature (SnapData *snapdata, Object *ob, const float obmat[4][4], bool use_obedit, float *dist_px, float r_loc[3], float *UNUSED(r_no), int *r_index) |
| static short | snapCurve (SnapData *snapdata, Object *ob, const float obmat[4][4], bool use_obedit, float *dist_px, float r_loc[3], float *UNUSED(r_no), int *r_index) |
| static short | snap_object_center (SnapData *snapdata, Object *ob, const float obmat[4][4], float *dist_px, float r_loc[3], float *UNUSED(r_no), int *r_index) |
| static short | snapCamera (const SnapObjectContext *sctx, SnapData *snapdata, Object *object, float obmat[4][4], float *dist_px, float r_loc[3], float *r_no, int *r_index) |
| static short | snapMesh (SnapObjectContext *sctx, SnapData *snapdata, Object *ob, Mesh *me, const float obmat[4][4], bool use_backface_culling, float *dist_px, float r_loc[3], float r_no[3], int *r_index) |
| static short | snapEditMesh (SnapObjectContext *sctx, SnapData *snapdata, Object *ob, BMEditMesh *em, const float obmat[4][4], bool use_backface_culling, float *dist_px, float r_loc[3], float r_no[3], int *r_index) |
| static void | snap_obj_fn (SnapObjectContext *sctx, Object *ob, float obmat[4][4], bool use_obedit, bool use_backface_culling, bool UNUSED(is_object_active), void *data) |
| static short | snapObjectsRay (SnapObjectContext *sctx, Depsgraph *depsgraph, SnapData *snapdata, const struct 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 | |
| SnapObjectContext * | ED_transform_snap_object_context_create (Scene *scene, int flag) |
| SnapObjectContext * | ED_transform_snap_object_context_create_view3d (Scene *scene, int flag, const ARegion *region, const View3D *v3d) |
| static void | snap_object_data_free (void *sod_v) |
| 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 struct 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 struct 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 struct 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 struct SnapObjectParams *params, const float ray_origin[3], const float ray_direction[3], float *ray_depth, float r_co[3], float r_no[3]) |
| static short | transform_snap_context_project_view3d_mixed_impl (SnapObjectContext *sctx, Depsgraph *depsgraph, const ushort snap_to_flag, const struct SnapObjectParams *params, 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]) |
| short | ED_transform_snap_object_project_view3d_ex (SnapObjectContext *sctx, Depsgraph *depsgraph, const ushort snap_to, const struct SnapObjectParams *params, 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]) |
| bool | ED_transform_snap_object_project_view3d (SnapObjectContext *sctx, Depsgraph *depsgraph, const ushort snap_to, const struct SnapObjectParams *params, 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 struct 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 } |
| typedef struct SnapData | SnapData |
| typedef struct SnapObjectData | SnapObjectData |
Iterator | |
| typedef void(* | IterSnapObjsCallback) (SnapObjectContext *sctx, Object *ob, float obmat[4][4], bool use_obedit, bool use_backface_culling, bool is_object_active, void *data) |
| static void | iter_snap_objects (SnapObjectContext *sctx, Depsgraph *depsgraph, const struct SnapObjectParams *params, IterSnapObjsCallback sob_callback, void *data) |
Walk DFS | |
| typedef void(* | Nearest2DGetVertCoCallback) (const int index, const float **co, void *data) |
| typedef void(* | Nearest2DGetEdgeVertsCallback) (const int index, const int v_index[2], void *data) |
| typedef void(* | Nearest2DGetTriVertsCallback) (const int index, const int v_index[3], void *data) |
| typedef void(* | Nearest2DGetTriEdgesCallback) (const int index, const int e_index[3], void *data) |
| typedef void(* | Nearest2DCopyVertNoCallback) (const int index, const float r_no[3], void *data) |
| typedef struct Nearest2dUserData | Nearest2dUserData |
| static void | cb_snap_vert (void *userdata, int index, const struct DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest) |
| static void | cb_snap_edge (void *userdata, int index, const struct 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 struct 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 struct 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 struct DistProjectedAABBPrecalc *precalc, const float(*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest) |
| #define MAX_CLIPPLANE_LEN 3 |
Definition at line 63 of file transform_snap_object.c.
| typedef void(* IterSnapObjsCallback) (SnapObjectContext *sctx, Object *ob, float obmat[4][4], bool use_obedit, bool use_backface_culling, bool is_object_active, void *data) |
Definition at line 370 of file transform_snap_object.c.
Definition at line 1312 of file transform_snap_object.c.
| typedef void(* Nearest2DGetEdgeVertsCallback) (const int index, const int v_index[2], void *data) |
Definition at line 1308 of file transform_snap_object.c.
| typedef void(* Nearest2DGetTriEdgesCallback) (const int index, const int e_index[3], void *data) |
Definition at line 1311 of file transform_snap_object.c.
| typedef void(* Nearest2DGetTriVertsCallback) (const int index, const int v_index[3], void *data) |
Definition at line 1309 of file transform_snap_object.c.
Definition at line 1307 of file transform_snap_object.c.
| typedef struct Nearest2dUserData Nearest2dUserData |
| typedef struct SnapObjectData SnapObjectData |
| enum eViewProj |
| Enumerator | |
|---|---|
| VIEW_PROJ_NONE | |
| VIEW_PROJ_ORTHO | |
| VIEW_PROJ_PERSP | |
Definition at line 65 of file transform_snap_object.c.
Calculate the minimum and maximum coordinates of the box that encompasses this mesh.
Definition at line 162 of file transform_snap_object.c.
References bm, BM_ITER_MESH, BM_VERTS_OF_MESH, BMVert::co, INIT_MINMAX, minmax_v3v3_v3(), and v.
Referenced by snap_object_data_editmesh_get().
|
static |
Definition at line 1205 of file transform_snap_object.c.
References BM_edge_at_index(), BM_elem_index_get, data, BMEdge::v1, and BMEdge::v2.
Referenced by snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), and snapEditMesh().
|
static |
Definition at line 1177 of file transform_snap_object.c.
References BM_vert_at_index(), BMVert::co, and data.
Referenced by snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), and snapEditMesh().
|
static |
Definition at line 1190 of file transform_snap_object.c.
References BM_vert_at_index(), copy_v3_v3(), data, and BMVert::no.
Referenced by snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), and snapEditMesh().
|
static |
Definition at line 1197 of file transform_snap_object.c.
References data, MEdge::v1, and MEdge::v2.
Referenced by snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), and snapMesh().
|
static |
Definition at line 1213 of file transform_snap_object.c.
References data, MLoop::e, ELEM, MLoopTri::tri, MLoop::v, MEdge::v1, and MEdge::v2.
Referenced by snapMesh().
|
static |
Definition at line 1231 of file transform_snap_object.c.
References data, MLoopTri::tri, and MLoop::v.
Referenced by snapMesh().
|
static |
Definition at line 1172 of file transform_snap_object.c.
References data.
Referenced by snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), and snapMesh().
|
static |
Definition at line 1183 of file transform_snap_object.c.
References data, MVert::no, and normal_short_to_float_v3().
Referenced by snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), and snapMesh().
|
static |
Definition at line 1350 of file transform_snap_object.c.
References BVHTreeNearest::co, data, BVHTreeNearest::dist_sq, BVHTreeNearest::index, BVHTreeNearest::no, sub_v3_v3v3(), test_projected_edge_dist(), and Nearest2dUserData::userdata.
Referenced by cb_snap_tri_edges(), snap_mesh_polygon(), snapEditMesh(), and snapMesh().
|
static |
Definition at line 1379 of file transform_snap_object.c.
References cb_snap_vert(), data, BVHTreeNearest::index, and Nearest2dUserData::userdata.
Referenced by snapMesh().
|
static |
Definition at line 1399 of file transform_snap_object.c.
References cb_snap_edge(), data, BVHTreeNearest::index, DistProjectedAABBPrecalc::ray_direction, raycast_tri_backface_culling_test(), and Nearest2dUserData::userdata.
Referenced by snapMesh().
|
static |
Definition at line 1434 of file transform_snap_object.c.
References cb_snap_vert(), data, BVHTreeNearest::index, DistProjectedAABBPrecalc::ray_direction, raycast_tri_backface_culling_test(), and Nearest2dUserData::userdata.
Referenced by snapMesh().
|
static |
Definition at line 1326 of file transform_snap_object.c.
References BVHTreeNearest::co, data, BVHTreeNearest::dist_sq, BVHTreeNearest::index, BVHTreeNearest::no, test_projected_vert_dist(), and Nearest2dUserData::userdata.
Referenced by cb_snap_edge_verts(), cb_snap_tri_verts(), snap_mesh_polygon(), snapEditMesh(), and snapMesh().
| SnapObjectContext* ED_transform_snap_object_context_create | ( | Scene * | scene, |
| int | flag | ||
| ) |
Definition at line 2824 of file transform_snap_object.c.
References BLI_ghash_ptr_new(), BLI_memarena_new(), BLI_MEMARENA_STD_BUFSIZE, SnapObjectContext::cache, SnapObjectContext::data_to_object_map, SnapObjectContext::flag, SnapObjectContext::mem_arena, MEM_callocN, NULL, SnapObjectContext::object_map, scene, and SnapObjectContext::scene.
Referenced by ED_transform_snap_object_context_create_view3d().
| SnapObjectContext* ED_transform_snap_object_context_create_view3d | ( | Scene * | scene, |
| int | flag, | ||
| const ARegion * | region, | ||
| const View3D * | v3d | ||
| ) |
Definition at line 2840 of file transform_snap_object.c.
References ED_transform_snap_object_context_create(), SnapObjectContext::region, scene, SnapObjectContext::use_v3d, SnapObjectContext::v3d, and SnapObjectContext::v3d_data.
| void ED_transform_snap_object_context_destroy | ( | SnapObjectContext * | sctx | ) |
Definition at line 2861 of file transform_snap_object.c.
References BLI_ghash_free(), BLI_memarena_free(), SnapObjectContext::cache, SnapObjectContext::data_to_object_map, SnapObjectContext::mem_arena, MEM_freeN, NULL, SnapObjectContext::object_map, and snap_object_data_free().
Referenced by add_vertex_invoke(), ED_view3d_cursor3d_position_rotation(), EDBM_project_snap_verts(), freeSnapping(), gizmo_move_exit(), gpencil_strokes_reproject_exec(), snap_gizmo_free(), view3d_interactive_add_calc_plane(), and walkEnd().
| 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 | ||
| ) |
Definition at line 2872 of file transform_snap_object.c.
References SnapObjectContext::callbacks, SnapObjectContext::edit_mesh, and user_data.
| bool ED_transform_snap_object_project_all_view3d_ex | ( | SnapObjectContext * | sctx, |
| Depsgraph * | depsgraph, | ||
| const struct SnapObjectParams * | params, | ||
| const float | mval[2], | ||
| float | ray_depth, | ||
| bool | sort, | ||
| ListBase * | r_hit_list | ||
| ) |
see: ED_transform_snap_object_project_ray_all
Definition at line 3253 of file transform_snap_object.c.
References depsgraph, ED_transform_snap_object_project_ray_all(), ED_view3d_win_to_ray_clipped_ex(), NULL, params, SnapObjectContext::region, sort(), SnapObjectContext::v3d, and SnapObjectContext::v3d_data.
Referenced by peelObjectsTransform().
| bool ED_transform_snap_object_project_ray | ( | SnapObjectContext * | sctx, |
| Depsgraph * | depsgraph, | ||
| const struct SnapObjectParams * | params, | ||
| const float | ray_origin[3], | ||
| const float | ray_direction[3], | ||
| float * | ray_depth, | ||
| float | r_co[3], | ||
| float | r_no[3] | ||
| ) |
Definition at line 2986 of file transform_snap_object.c.
References BVH_RAYCAST_DIST_MAX, depsgraph, NULL, params, SnapObjUserData::r_no, and transform_snap_context_project_ray_impl().
Referenced by ED_gpencil_stroke_reproject(), view3d_ruler_item_mousemove(), walk_floor_distance_get(), and walk_ray_cast().
| bool ED_transform_snap_object_project_ray_all | ( | SnapObjectContext * | sctx, |
| Depsgraph * | depsgraph, | ||
| const struct SnapObjectParams * | params, | ||
| const float | ray_start[3], | ||
| const float | ray_normal[3], | ||
| float | ray_depth, | ||
| bool | sort, | ||
| ListBase * | r_hit_list | ||
| ) |
Fill in a list of all hits.
| ray_depth | Only depths in this range are considered, -1.0 for maximum. |
| sort | Optionally sort the hits by depth. |
| r_hit_list | List of SnapObjectHitDepth (caller must free). |
Definition at line 2919 of file transform_snap_object.c.
References BLI_assert, BLI_listbase_sort(), BVH_RAYCAST_DIST_MAX, depsgraph, hit_depth_cmp(), NULL, params, raycastObjects(), and sort().
Referenced by ED_transform_snap_object_project_all_view3d_ex().
| bool ED_transform_snap_object_project_ray_ex | ( | SnapObjectContext * | sctx, |
| Depsgraph * | depsgraph, | ||
| const struct 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] | ||
| ) |
Definition at line 2886 of file transform_snap_object.c.
References depsgraph, NULL, params, SnapObjUserData::r_index, SnapObjUserData::r_loc, SnapObjUserData::r_no, SnapObjUserData::r_ob, SnapObjUserData::r_obmat, and raycastObjects().
Referenced by transform_snap_context_project_ray_impl().
| bool ED_transform_snap_object_project_view3d | ( | SnapObjectContext * | sctx, |
| Depsgraph * | depsgraph, | ||
| const ushort | snap_to, | ||
| const struct SnapObjectParams * | params, | ||
| const float | mval[2], | ||
| const float | prev_co[3], | ||
| float * | dist_px, | ||
| float | r_loc[3], | ||
| float | r_no[3] | ||
| ) |
Convenience function for performing snapping.
Given a 2D region value, snap to vert/edge/face.
| sctx | Snap context. |
| mval | Screenspace coordinate. |
| prev_co | Coordinate for perpendicular point calculation (optional). |
| dist_px | Maximum distance to snap (in pixels). |
| r_loc | hit location. |
| r_no | hit normal (optional). |
Definition at line 3226 of file transform_snap_object.c.
References depsgraph, SnapObjUserData::dist_px, ED_transform_snap_object_project_view3d_ex(), NULL, params, SnapObjUserData::r_loc, and SnapObjUserData::r_no.
Referenced by add_vertex_invoke(), applyProject(), EDBM_project_snap_verts(), gizmo_move_modal(), view3d_interactive_add_calc_plane(), and view3d_ruler_item_mousemove().
| short ED_transform_snap_object_project_view3d_ex | ( | SnapObjectContext * | sctx, |
| Depsgraph * | depsgraph, | ||
| const ushort | snap_to, | ||
| const struct SnapObjectParams * | params, | ||
| 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] | ||
| ) |
Definition at line 3186 of file transform_snap_object.c.
References depsgraph, SnapObjUserData::dist_px, params, SnapObjUserData::r_index, SnapObjUserData::r_loc, SnapObjUserData::r_no, SnapObjUserData::r_ob, SnapObjUserData::r_obmat, and transform_snap_context_project_view3d_mixed_impl().
Referenced by ED_gizmotypes_snap_3d_update(), ED_transform_snap_object_project_view3d(), ED_view3d_cursor3d_position_rotation(), idp_poject_surface_normal(), and snapObjectsTransform().
|
static |
Definition at line 148 of file transform_snap_object.c.
References ME_WRAPPER_TYPE_BMESH, BMEditMesh::mesh_eval_final, Mesh::runtime, and Mesh_Runtime::wrapper_type.
Referenced by raycast_obj_fn(), and snap_obj_fn().
|
static |
Definition at line 572 of file transform_snap_object.c.
References bvhtree_ray_tri_intersection(), BVHTreeRayHit::co, BMVert::co, data, BVHTreeRay::direction, BVHTreeRayHit::dist, BVHTreeRayHit::index, SnapObjectHitDepth::index, BMEditMesh::looptris, madd_v3_v3v3fl(), BVHTreeRayHit::no, SnapObjectHitDepth::no, normalize_v3_v3(), BVHTreeRay::origin, raycast_tri_backface_culling_test(), and BMLoop::v.
Referenced by raycastEditMesh().
|
static |
Definition at line 497 of file transform_snap_object.c.
References SnapObjectHitDepth::depth.
Referenced by ED_transform_snap_object_project_ray_all().
|
static |
Definition at line 475 of file transform_snap_object.c.
References SnapObjectHitDepth::co, copy_m4_m4(), copy_v3_v3(), SnapObjectHitDepth::depth, SnapObjectHitDepth::index, MEM_mallocN, SnapObjectHitDepth::no, SnapObjectHitDepth::ob, SnapObjectHitDepth::ob_uuid, and SnapObjectHitDepth::obmat.
Referenced by raycast_all_cb().
|
static |
Walks through all objects in the scene to create the list of objects to snap.
Definition at line 381 of file transform_snap_object.c.
References BA_SNAP_FIX_DEPS_FIASCO, BA_TRANSFORM_LOCKED_IN_PLACE, BA_WAS_SEL, ViewLayer::basact, BASE_SELECTED, BASE_VISIBLE, BKE_geometry_set_has_instances(), BLI_assert, data, DEG_get_evaluated_object(), DEG_get_input_view_layer(), DEG_is_evaluated_object(), depsgraph, ListBase::first, free_object_duplilist(), Object_Runtime::geometry_set_eval, NULL, OB_DUPLI, ViewLayer::object_bases, object_duplilist(), Object::obmat, params, Object::runtime, SnapObjectContext::scene, SNAP_NOT_ACTIVE, SNAP_NOT_SELECTED, Object::transflag, SnapObjectContext::v3d, and SnapObjectContext::v3d_data.
Referenced by raycastObjects(), and snapObjectsRay().
|
static |
Definition at line 545 of file transform_snap_object.c.
References bvhtree_ray_tri_intersection(), BVHTreeRayHit::co, MVert::co, data, BVHTreeRay::direction, BVHTreeRayHit::dist, BVHTreeRayHit::index, SnapObjectHitDepth::index, madd_v3_v3v3fl(), BVHTreeRayHit::no, SnapObjectHitDepth::no, normalize_v3_v3(), BVHTreeRay::origin, raycast_tri_backface_culling_test(), MLoopTri::tri, and UNPACK3.
Referenced by raycastMesh().
|
static |
Definition at line 513 of file transform_snap_object.c.
References BLI_addtail(), BVHTreeRayHit::co, copy_v3_v3(), data, SnapObjectHitDepth::depth, BVHTreeRayHit::dist, hit_depth_create(), BVHTreeRayHit::index, mul_m3_v3(), mul_v3_m4v3(), BVHTreeRayHit::no, normal, and normalize_v3().
Referenced by raycastEditMesh(), and raycastMesh().
|
static |
| use_obedit | Uses the coordinates of BMesh (if any) to do the snapping; |
Definition at line 969 of file transform_snap_object.c.
References BKE_editmesh_from_object(), BKE_object_get_evaluated_mesh(), BKE_object_is_in_editmode(), copy_m4_m4(), data, Object::data, DEG_get_original_object(), Object::dt, Mesh::edit_mesh, editmesh_eval_final_is_bmesh(), ELEM, BMEditMesh::mesh_eval_final, OB_BOUNDBOX, OB_CURVE, OB_FONT, RaycastObjUserData::ob_index, OB_MESH, OB_SURF, OB_WIRE, RaycastObjUserData::r_hit_list, RaycastObjUserData::r_index, RaycastObjUserData::r_loc, RaycastObjUserData::r_no, RaycastObjUserData::r_ob, RaycastObjUserData::r_obmat, RaycastObjUserData::ray_depth, RaycastObjUserData::ray_dir, RaycastObjUserData::ray_start, raycastEditMesh(), raycastMesh(), RaycastObjUserData::ret, Object::type, RaycastObjUserData::use_occlusion_test, SnapObjectContext::use_v3d, SnapObjectContext::v3d, SnapObjectContext::v3d_data, and XRAY_FLAG_ENABLED.
Referenced by raycastObjects().
|
static |
Definition at line 537 of file transform_snap_object.c.
References cross_tri_v3(), dot_v3v3(), SnapObjectHitDepth::no, v1, and v2.
Referenced by cb_snap_tri_edges(), cb_snap_tri_verts(), editmesh_looptri_raycast_backface_culling_cb(), and mesh_looptri_raycast_backface_culling_cb().
|
static |
Definition at line 776 of file transform_snap_object.c.
References BKE_bvhtree_from_editmesh_get(), BKE_editmesh_from_object(), BLI_assert, BLI_BITMAP_NEW, BLI_bvhtree_ray_cast(), BLI_bvhtree_ray_cast_all(), BMEditMesh::bm, bm, BM_elem_index_get, BM_iter_mesh_bitmap_from_filter_tessface(), Mesh_Runtime::bvh_cache, BVH_RAYCAST_DIST_MAX, bvhtree_from_editmesh_looptri_ex(), BVHTREE_FROM_EM_LOOPTRI, SnapObjectContext::callbacks, BVHTreeRayHit::co, copy_v3_v3(), data, DEG_get_original_object(), BVHTreeRayHit::dist, SnapObjectContext::edit_mesh, editmesh_looptri_raycast_backface_culling_cb(), BVHTreeFromEditMesh::em, Mesh_Runtime::eval_mutex, BMLoop::f, BVHTreeRayHit::index, invert_m4_m4(), isect_ray_aabb_v3_simple(), RayCastAll_Data::len_diff, RayCastAll_Data::local_scale, BMEditMesh::looptris, madd_v3_v3fl(), SnapObjectData::max, MEM_freeN, SnapObjectData::mesh_runtime, SnapObjectData::min, mul_m3_v3(), mul_m4_v3(), mul_mat3_m4_v3(), BVHTreeRayHit::no, normalize_v3(), NULL, RayCastAll_Data::ob, RayCastAll_Data::obmat, poly_to_tri_count(), raycast_all_cb(), BVHTreeFromEditMesh::raycast_callback, RayCastAll_Data::retval, snap_object_data_editmesh_get(), RayCastAll_Data::timat, BMesh::totface, BMesh::totloop, BMEditMesh::tottri, transpose_m3_m4(), BVHTreeFromEditMesh::tree, and SnapObjectData::treedata_editmesh.
Referenced by raycast_obj_fn().
|
static |
Definition at line 601 of file transform_snap_object.c.
References BKE_bvhtree_from_mesh_get(), BKE_mesh_boundbox_get(), BKE_mesh_runtime_looptri_ensure(), BLI_assert, BLI_bvhtree_ray_cast(), BLI_bvhtree_ray_cast_all(), Mesh_Runtime::bvh_cache, BVH_RAYCAST_DIST_MAX, bvhcache_has_tree(), BVHTREE_FROM_LOOPTRI, BVHTREE_FROM_LOOPTRI_NO_HIDDEN, BVHTreeFromMesh::cached, BVHTreeRayHit::co, copy_v3_v3(), data, BVHTreeRayHit::dist, BVHTreeFromMesh::edge, free_bvhtree_from_mesh(), BVHTreeRayHit::index, invert_m4_m4(), isect_ray_aabb_v3_simple(), RayCastAll_Data::len_diff, RayCastAll_Data::local_scale, BVHTreeFromMesh::loop, BVHTreeFromMesh::loop_allocated, BVHTreeFromMesh::looptri, BVHTreeFromMesh::looptri_allocated, madd_v3_v3fl(), Mesh::medge, mesh_looptri_raycast_backface_culling_cb(), Mesh::mloop, Mesh::mpoly, mul_m3_v3(), mul_m4_v3(), mul_mat3_m4_v3(), Mesh::mvert, BVHTreeRayHit::no, normalize_v3(), NULL, SnapObjectHitDepth::ob, RayCastAll_Data::ob, RayCastAll_Data::obmat, SnapObjectHitDepth::obmat, SnapObjectData::poly, MLoopTri::poly, raycast_all_cb(), BVHTreeFromMesh::raycast_callback, RayCastAll_Data::retval, Mesh::runtime, snap_object_data_mesh_get(), RayCastAll_Data::timat, Mesh::totpoly, transpose_m3_m4(), BVHTreeFromMesh::tree, SnapObjectData::treedata_mesh, BoundBox::vec, BVHTreeFromMesh::vert, and BVHTreeFromMesh::vert_allocated.
Referenced by raycast_obj_fn().
|
static |
Walks through all objects in the scene to find the hit on object surface.
| sctx | Snap context to store data. |
| params | Snapping behavior. |
| ray_depth | maximum depth allowed for r_co, elements deeper than this value will be ignored. |
| r_loc | Hit location. |
| r_no | Hit normal (optional). |
| r_index | Hit index or -1 when no valid index is found. (currently only set to the polygon index when when using snap_to == SCE_SNAP_MODE_FACE). |
| r_ob | Hit object. |
| r_obmat | Object matrix (may not be Object.obmat with dupli-instances). |
| r_hit_list | List of SnapObjectHitDepth (caller must free). |
Definition at line 1106 of file transform_snap_object.c.
References data, depsgraph, iter_snap_objects(), params, RaycastObjUserData::r_hit_list, RaycastObjUserData::r_index, RaycastObjUserData::r_loc, RaycastObjUserData::r_no, RaycastObjUserData::r_ob, RaycastObjUserData::r_obmat, RaycastObjUserData::ray_depth, RaycastObjUserData::ray_dir, RaycastObjUserData::ray_start, and raycast_obj_fn().
Referenced by ED_transform_snap_object_project_ray_all(), ED_transform_snap_object_project_ray_ex(), and transform_snap_context_project_view3d_mixed_impl().
|
static |
Definition at line 1150 of file transform_snap_object.c.
References dist_squared_to_projected_aabb(), dist_squared_to_projected_aabb_precalc(), max, min, and DistProjectedAABBPrecalc::mval.
Referenced by snapArmature(), snapCurve(), snapEditMesh(), and snapMesh().
|
static |
Definition at line 1609 of file transform_snap_object.c.
References BLI_assert, cb_bedge_verts_get(), cb_bvert_co_get(), cb_bvert_no_copy(), cb_medge_verts_get(), cb_mvert_co_get(), cb_mvert_no_copy(), BVHTreeNearest::co, copy_v3_v3(), Nearest2dUserData::copy_vert_no, BVHTreeNearest::dist_sq, dist_squared_to_projected_aabb_precalc(), BVHTreeFromEditMesh::em, Nearest2dUserData::get_edge_verts_index, Nearest2dUserData::get_vert_co, IN_RANGE, BVHTreeNearest::index, interp_v3_v3v3(), invert_m4_m4(), Nearest2dUserData::is_persp, isect_ray_line_v3(), len_squared_v3v3(), line_point_factor_v3(), mid_v3_v3v3(), mul_m4_m4m4(), mul_m4_v3(), mul_transposed_mat3_m4_v3(), mul_v3_m4v3(), SnapData::mval, normalize_v3(), NULL, OB_MESH, SnapData::pmat, DistProjectedAABBPrecalc::ray_direction, DistProjectedAABBPrecalc::ray_origin, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_EDGE_MIDPOINT, SCE_SNAP_MODE_EDGE_PERPENDICULAR, SCE_SNAP_MODE_VERTEX, snap_object_data_lookup(), SnapData::snap_to_flag, sqrtf, square_f(), test_projected_vert_dist(), SnapObjectData::treedata_editmesh, SnapObjectData::treedata_mesh, SnapObjectData::type, Object::type, Nearest2dUserData::use_backface_culling, Nearest2dUserData::userdata, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by transform_snap_context_project_view3d_mixed_impl().
|
static |
Definition at line 1471 of file transform_snap_object.c.
References BLI_assert, BMEditMesh::bm, BM_EDGE, BM_elem_index_get, BM_FACE, BM_face_at_index(), BM_FACE_FIRST_LOOP, BM_mesh_elem_index_ensure(), BM_mesh_elem_table_ensure(), BM_VERT, cb_bedge_verts_get(), cb_bvert_co_get(), cb_bvert_no_copy(), cb_medge_verts_get(), cb_mvert_co_get(), cb_mvert_no_copy(), cb_snap_edge(), cb_snap_vert(), SnapData::clip_plane, SnapData::clip_plane_len, BVHTreeNearest::co, copy_v3_v3(), Nearest2dUserData::copy_vert_no, BVHTreeNearest::dist_sq, dist_squared_to_projected_aabb_precalc(), BMLoop::e, MLoop::e, BVHTreeFromMesh::edge, BVHTreeFromEditMesh::em, Nearest2dUserData::get_edge_verts_index, Nearest2dUserData::get_vert_co, BVHTreeNearest::index, invert_m4_m4(), Nearest2dUserData::is_persp, BVHTreeFromMesh::loop, MPoly::loopstart, MAX_CLIPPLANE_LEN, mul_m4_m4m4(), mul_m4_v3(), mul_transposed_mat3_m4_v3(), mul_v4_m4v4(), SnapData::mval, BMLoop::next, BVHTreeNearest::no, normalize_v3(), NULL, SnapData::pmat, SnapObjectData::poly, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_VERTEX, snap_object_data_lookup(), SnapData::snap_to_flag, sqrtf, square_f(), MPoly::totloop, transpose_m4_m4(), SnapObjectData::treedata_editmesh, SnapObjectData::treedata_mesh, SnapObjectData::type, Nearest2dUserData::userdata, BMLoop::v, MLoop::v, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by transform_snap_context_project_view3d_mixed_impl().
|
static |
| use_obedit | Uses the coordinates of BMesh (if any) to do the snapping; |
Definition at line 2661 of file transform_snap_object.c.
References BKE_editmesh_from_object(), BKE_object_get_evaluated_mesh(), BKE_object_is_in_editmode(), copy_m4_m4(), data, Object::data, DEG_get_original_object(), SnapObjUserData::dist_px, Object::dt, Mesh::edit_mesh, editmesh_eval_final_is_bmesh(), BMEditMesh::mesh_eval_final, OB_ARMATURE, OB_BOUNDBOX, OB_CAMERA, OB_CURVE, OB_EMPTY, OB_FONT, OB_GPENCIL, OB_LAMP, OB_MESH, OB_SURF, SnapObjUserData::r_index, SnapObjUserData::r_loc, SnapObjUserData::r_no, SnapObjUserData::r_ob, SnapObjUserData::r_obmat, SnapObjUserData::ret, snap_object_center(), snapArmature(), snapCamera(), snapCurve(), SnapObjUserData::snapdata, snapEditMesh(), snapMesh(), and Object::type.
Referenced by snapObjectsRay().
|
static |
Definition at line 2070 of file transform_snap_object.c.
References SnapData::clip_plane, SnapData::clip_plane_len, copy_v3_v3(), dist_squared_to_projected_aabb_precalc(), MAX_CLIPPLANE_LEN, mul_v4_m4v4(), SnapData::mval, OB_DUPLI, SnapData::pmat, SCE_SNAP_MODE_VERTEX, SnapData::snap_to_flag, sqrtf, square_f(), test_projected_vert_dist(), Object::transflag, transpose_m4_m4(), SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by snap_obj_fn(), and snapCamera().
|
static |
Definition at line 197 of file transform_snap_object.c.
References snap_object_data_editmesh_clear(), snap_object_data_mesh_clear(), SnapObjectData::type, and type.
Referenced by snap_object_data_editmesh_get(), snap_object_data_free(), and snap_object_data_mesh_get().
|
static |
Definition at line 185 of file transform_snap_object.c.
References ARRAY_SIZE, BLI_assert, BLI_bvhtree_free(), SnapObjectData::bvhtree, SnapObjectData::cached, free_bvhtree_from_editmesh(), NULL, SnapObjectData::treedata_editmesh, and SnapObjectData::type.
Referenced by snap_object_data_clear().
|
static |
Definition at line 269 of file transform_snap_object.c.
References ARRAY_SIZE, BLI_ghash_ensure_p(), BLI_ghash_ptr_new(), BLI_memarena_calloc(), BMEditMesh::bm, bm_mesh_minmax(), Mesh_Runtime::bvh_cache, bvhcache_has_tree(), SnapObjectData::bvhtree, SnapObjectContext::cache, BVHTreeFromEditMesh::cached, SnapObjectData::cached, clear(), Object::data, SnapObjectContext::data_to_object_map, BVHTreeFromEditMesh::em, init, SnapObjectData::max, SnapObjectContext::mem_arena, SnapObjectData::mesh_runtime, SnapObjectData::min, NULL, SnapObjectContext::object_map, snap_object_data_clear(), snap_object_data_editmesh_runtime_get(), BVHTreeFromEditMesh::tree, SnapObjectData::treedata_editmesh, and SnapObjectData::type.
Referenced by raycastEditMesh(), and snapEditMesh().
|
static |
Definition at line 256 of file transform_snap_object.c.
References BKE_editmesh_from_object(), Object::data, BMEditMesh::mesh_eval_cage, BMEditMesh::mesh_eval_final, and Mesh::runtime.
Referenced by snap_object_data_editmesh_get().
|
static |
Definition at line 2855 of file transform_snap_object.c.
References snap_object_data_clear().
Referenced by ED_transform_snap_object_context_destroy().
|
static |
Definition at line 212 of file transform_snap_object.c.
References BLI_ghash_lookup(), SnapObjectContext::cache, Object::data, SnapObjectContext::data_to_object_map, NULL, and SnapObjectContext::object_map.
Referenced by snap_mesh_edge_verts_mixed(), and snap_mesh_polygon().
|
static |
Definition at line 173 of file transform_snap_object.c.
References ARRAY_SIZE, BLI_assert, BLI_bvhtree_free(), SnapObjectData::bvhtree, SnapObjectData::cached, free_bvhtree_from_mesh(), NULL, SnapObjectData::treedata_mesh, and SnapObjectData::type.
Referenced by snap_object_data_clear().
|
static |
Definition at line 227 of file transform_snap_object.c.
References BLI_ghash_ensure_p(), BLI_memarena_calloc(), SnapObjectContext::cache, SnapObjectData::has_looptris, SnapObjectData::has_loose_edge, SnapObjectData::has_loose_vert, init, SnapObjectContext::mem_arena, SnapObjectContext::object_map, snap_object_data_clear(), and SnapObjectData::type.
Referenced by raycastMesh(), and snapMesh().
|
static |
Definition at line 1774 of file transform_snap_object.c.
References BKE_armature_boundbox_get(), BKE_object_is_in_editmode(), BONE_HIDDEN_A, BONE_HIDDEN_P, BONE_HIDDEN_PG, BONE_ROOTSEL, BONE_TIPSEL, bPose::chanbase, SnapData::clip_plane, SnapData::clip_plane_len, Object::data, dist_squared_to_projected_aabb_precalc(), bArmature::edbo, ListBase::first, Bone::flag, bArmature::layer, LISTBASE_FOREACH, MAX_CLIPPLANE_LEN, mul_m4_m4m4(), mul_m4_v3(), mul_v4_m4v4(), SnapData::mval, SnapData::pmat, Object::pose, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_FACE, SCE_SNAP_MODE_VERTEX, snap_bound_box_check_dist(), SnapData::snap_to_flag, sqrtf, square_f(), test_projected_edge_dist(), test_projected_vert_dist(), transpose_m4_m4(), BoundBox::vec, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by snap_obj_fn().
|
static |
Definition at line 2125 of file transform_snap_object.c.
References BKE_object_movieclip_get(), BKE_tracking_camera_get_reconstructed_interpolate(), BKE_tracking_get_camera_object_matrix(), BKE_tracking_object_get_tracks(), MovieTrackingTrack::bundle_pos, CFRA, SnapData::clip_plane, SnapData::clip_plane_len, copy_v3_v3(), dist_squared_to_projected_aabb_precalc(), ListBase::first, MovieTrackingTrack::flag, MovieTrackingObject::flag, float(), invert_m4_m4(), mul_m4_v3(), SnapData::mval, MovieTrackingTrack::next, MovieTrackingObject::next, NULL, OB_DUPLI, MovieTracking::objects, SnapData::pmat, SCE_SNAP_MODE_VERTEX, scene, SnapObjectContext::scene, snap_object_center(), SnapData::snap_to_flag, sqrtf, square_f(), test_projected_vert_dist(), TRACK_HAS_BUNDLE, MovieClip::tracking, TRACKING_OBJECT_CAMERA, Object::transflag, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by snap_obj_fn().
|
static |
Definition at line 1919 of file transform_snap_object.c.
References BKE_curve_boundbox_get(), BKE_object_is_in_editmode(), SnapData::clip_plane, SnapData::clip_plane_len, Object::data, dist_squared_to_projected_aabb_precalc(), Curve::editnurb, ListBase::first, float(), SnapData::has_occlusion_plane, HD_ALIGN, MAX_CLIPPLANE_LEN, mul_m4_m4m4(), mul_m4_v3(), mul_v4_m4v4(), SnapData::mval, Nurb::next, Curve::nurb, EditNurb::nurbs, SnapData::pmat, SCE_SNAP_MODE_VERTEX, SELECT, snap_bound_box_check_dist(), SnapData::snap_to_flag, sqrtf, square_f(), test_projected_vert_dist(), transpose_m4_m4(), BoundBox::vec, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by snap_obj_fn().
|
static |
Definition at line 2456 of file transform_snap_object.c.
References BKE_bvhtree_from_editmesh_get(), BLI_assert, BLI_BITMAP_NEW, BLI_bvhtree_find_nearest_projected(), BMEditMesh::bm, BM_EDGE, BM_EDGES_OF_MESH, BM_iter_mesh_bitmap_from_filter(), BM_mesh_elem_index_ensure(), BM_mesh_elem_table_ensure(), BM_VERT, BM_VERTS_OF_MESH, Mesh_Runtime::bvh_cache, SnapObjectData::bvhtree, bvhtree_from_editmesh_edges_ex(), bvhtree_from_editmesh_verts_ex(), BVHTREE_FROM_EM_EDGES, BVHTREE_FROM_EM_VERTS, BVHTreeFromEditMesh::cached, SnapObjectData::cached, SnapObjectContext::callbacks, cb_bedge_verts_get(), cb_bvert_co_get(), cb_bvert_no_copy(), cb_snap_edge(), cb_snap_vert(), SnapData::clip_plane, SnapData::clip_plane_len, BVHTreeNearest::co, copy_v3_v3(), BVHTreeNearest::dist_sq, SnapObjectContext::edit_mesh, Mesh_Runtime::eval_mutex, BVHTreeNearest::index, invert_m4_m4(), SnapObjectData::max, MAX_CLIPPLANE_LEN, MEM_freeN, SnapObjectData::mesh_runtime, SnapObjectData::min, mul_m4_m4m4(), mul_m4_v3(), mul_transposed_mat3_m4_v3(), mul_v4_m4v4(), SnapData::mval, BVHTreeNearest::no, normalize_v3(), NULL, SnapData::pmat, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_FACE, SCE_SNAP_MODE_VERTEX, snap_bound_box_check_dist(), snap_object_data_editmesh_get(), SnapData::snap_to_flag, sqrtf, square_f(), BMesh::totedge, BMesh::totvert, transpose_m4_m4(), BVHTreeFromEditMesh::tree, Nearest2dUserData::userdata, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by snap_obj_fn().
|
static |
Definition at line 2223 of file transform_snap_object.c.
References BKE_bvhtree_from_mesh_get(), BKE_mesh_boundbox_get(), BKE_mesh_runtime_looptri_ensure(), BLI_assert, BLI_bvhtree_find_nearest_projected(), Mesh_Runtime::bvh_cache, bvhcache_has_tree(), SnapObjectData::bvhtree, BVHTREE_FROM_LOOPTRI, BVHTREE_FROM_LOOSEEDGES, BVHTREE_FROM_LOOSEVERTS, BVHTreeFromMesh::cached, SnapObjectData::cached, cb_medge_verts_get(), cb_mlooptri_edges_get(), cb_mlooptri_verts_get(), cb_mvert_co_get(), cb_mvert_no_copy(), cb_snap_edge(), cb_snap_edge_verts(), cb_snap_tri_edges(), cb_snap_tri_verts(), cb_snap_vert(), SnapData::clip_plane, SnapData::clip_plane_len, BVHTreeNearest::co, copy_v3_v3(), BVHTreeNearest::dist_sq, BVHTreeFromMesh::edge, BVHTreeFromMesh::edge_allocated, free_bvhtree_from_mesh(), SnapObjectData::has_looptris, SnapObjectData::has_loose_edge, SnapObjectData::has_loose_vert, BVHTreeNearest::index, invert_m4_m4(), BVHTreeFromMesh::loop, BVHTreeFromMesh::loop_allocated, BVHTreeFromMesh::looptri, BVHTreeFromMesh::looptri_allocated, MAX_CLIPPLANE_LEN, Mesh::medge, Mesh::mloop, mul_m4_m4m4(), mul_m4_v3(), mul_transposed_mat3_m4_v3(), mul_v4_m4v4(), SnapData::mval, Mesh::mvert, BVHTreeNearest::no, normalize_v3(), NULL, SnapData::pmat, Mesh::runtime, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_FACE, SCE_SNAP_MODE_VERTEX, snap_bound_box_check_dist(), snap_object_data_mesh_get(), SnapData::snap_to_flag, sqrtf, square_f(), Mesh::totedge, Mesh::totvert, transpose_m4_m4(), BVHTreeFromMesh::tree, SnapObjectData::treedata_mesh, Nearest2dUserData::userdata, BoundBox::vec, BVHTreeFromMesh::vert, BVHTreeFromMesh::vert_allocated, SnapData::view_proj, VIEW_PROJ_PERSP, and SnapData::win_size.
Referenced by snap_obj_fn().
|
static |
Walks through all objects in the scene to find the closest snap element ray.
| sctx | Snap context to store data. |
| snapdata | struct generated in get_snapdata. |
| params | Parameters for control snap behavior. |
| dist_px | Maximum threshold distance (in pixels). |
| r_loc | Hit location. |
| r_no | Hit normal (optional). |
| r_index | Hit index or -1 when no valid index is found. (currently only set to the polygon index when when using snap_to == SCE_SNAP_MODE_FACE). |
| r_ob | Hit object. |
| r_obmat | Object matrix (may not be Object.obmat with dupli-instances). |
Definition at line 2787 of file transform_snap_object.c.
References data, depsgraph, SnapObjUserData::dist_px, iter_snap_objects(), params, SnapObjUserData::r_index, SnapObjUserData::r_loc, SnapObjUserData::r_no, SnapObjUserData::r_ob, SnapObjUserData::r_obmat, snap_obj_fn(), and SnapObjUserData::snapdata.
Referenced by transform_snap_context_project_view3d_mixed_impl().
|
static |
Definition at line 1272 of file transform_snap_object.c.
References copy_v3_v3(), interp_v3_v3v3(), isect_ray_line_v3(), DistProjectedAABBPrecalc::ray_direction, DistProjectedAABBPrecalc::ray_origin, and test_projected_vert_dist().
Referenced by cb_snap_edge(), and snapArmature().
|
static |
Definition at line 1241 of file transform_snap_object.c.
References copy_v3_v3(), dot_m4_v3_row_x(), dot_m4_v3_row_y(), isect_point_planes_v3_negated(), len_squared_v2v2(), mul_project_m4_v3_zfac(), mul_v2_fl(), DistProjectedAABBPrecalc::mval, DistProjectedAABBPrecalc::pmat, and w().
Referenced by cb_snap_vert(), snap_mesh_edge_verts_mixed(), snap_object_center(), snapArmature(), snapCamera(), snapCurve(), and test_projected_edge_dist().
|
static |
Convenience function for snap ray-casting.
Given a ray, cast it into the scene (snapping to faces).
Definition at line 2968 of file transform_snap_object.c.
References depsgraph, ED_transform_snap_object_project_ray_ex(), NULL, params, SnapObjUserData::r_no, and ret.
Referenced by ED_transform_snap_object_project_ray().
|
static |
Definition at line 3005 of file transform_snap_object.c.
References BLI_assert, BVH_RAYCAST_DIST_MAX, SnapData::clip_plane, SnapData::clip_plane_len, copy_m4_m4(), copy_v2_v2(), copy_v3_v3(), copy_v4_v4(), depsgraph, SnapObjUserData::dist_px, dot_v3v3(), ED_view3d_win_to_ray_clipped_ex(), SnapData::has_occlusion_plane, RegionView3D::is_persp, SnapData::mval, negate_v4(), NULL, OB_CURVE, params, RegionView3D::persmat, plane_from_point_normal_v3(), planes_from_projmat(), SnapData::pmat, SnapObjUserData::r_index, SnapObjUserData::r_loc, SnapObjUserData::r_no, SnapObjUserData::r_ob, SnapObjUserData::r_obmat, raycastObjects(), SnapObjectContext::region, ARegion::regiondata, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_EDGE_MIDPOINT, SCE_SNAP_MODE_EDGE_PERPENDICULAR, SCE_SNAP_MODE_FACE, SCE_SNAP_MODE_VERTEX, snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), SnapData::snap_to_flag, SnapObjUserData::snapdata, snapObjectsRay(), Object::type, SnapObjectContext::v3d, SnapObjectContext::v3d_data, SnapData::view_proj, VIEW_PROJ_ORTHO, VIEW_PROJ_PERSP, SnapData::win_size, ARegion::winx, ARegion::winy, and XRAY_ENABLED.
Referenced by ED_transform_snap_object_project_view3d_ex().