Blender  V3.3
view3d_snap.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
#include "BLI_array.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_editmesh.h"
#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_mball.h"
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_tracking.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "ED_keyframing.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_transverts.h"
#include "view3d_intern.h"

Go to the source code of this file.

Functions

Snap Cursor to Selection Operator
static bool snap_curs_to_sel_ex (bContext *C, const int pivot_point, float r_cursor[3])
 
static void bundle_midpoint (Scene *scene, Object *ob, float r_vec[3])
 
static int snap_curs_to_sel_exec (bContext *C, wmOperator *UNUSED(op))
 
void VIEW3D_OT_snap_cursor_to_selected (wmOperatorType *ot)
 
Snap Cursor to Active Operator
static bool snap_calc_active_center (bContext *C, const bool select_only, float r_center[3])
 
static int snap_curs_to_active_exec (bContext *C, wmOperator *UNUSED(op))
 
void VIEW3D_OT_snap_cursor_to_active (wmOperatorType *ot)
 
Snap Selection to Grid Operator
static int snap_sel_to_grid_exec (bContext *C, wmOperator *UNUSED(op))
 
void VIEW3D_OT_snap_selected_to_grid (wmOperatorType *ot)
 
Snap Selection to Location (Utility)
static bool snap_selected_to_location (bContext *C, const float snap_target_global[3], const bool use_offset, const int pivot_point, const bool use_toolsettings)
 
bool ED_view3d_snap_selected_to_location (bContext *C, const float snap_target_global[3], const int pivot_point)
 
Snap Selection to Cursor Operator
static int snap_selected_to_cursor_exec (bContext *C, wmOperator *op)
 
void VIEW3D_OT_snap_selected_to_cursor (wmOperatorType *ot)
 
Snap Selection to Active Operator
static int snap_selected_to_active_exec (bContext *C, wmOperator *op)
 
void VIEW3D_OT_snap_selected_to_active (wmOperatorType *ot)
 
Snap Cursor to Grid Operator
static int snap_curs_to_grid_exec (bContext *C, wmOperator *UNUSED(op))
 
void VIEW3D_OT_snap_cursor_to_grid (wmOperatorType *ot)
 
Snap Cursor to Center Operator
static int snap_curs_to_center_exec (bContext *C, wmOperator *UNUSED(op))
 
void VIEW3D_OT_snap_cursor_to_center (wmOperatorType *ot)
 
Min/Max Object Vertices Utility
bool ED_view3d_minmax_verts (Object *obedit, float r_min[3], float r_max[3])
 

Function Documentation

◆ bundle_midpoint()

static void bundle_midpoint ( Scene *  scene,
Object *  ob,
float  r_vec[3] 
)
static

◆ ED_view3d_minmax_verts()

bool ED_view3d_minmax_verts ( struct Object *  obedit,
float  min[3],
float  max[3] 
)

◆ ED_view3d_snap_selected_to_location()

bool ED_view3d_snap_selected_to_location ( bContext *  C,
const float  snap_target_global[3],
const int  pivot_point 
)

Definition at line 573 of file view3d_snap.c.

References C, and snap_selected_to_location().

Referenced by object_transform_to_mouse_exec().

◆ snap_calc_active_center()

static bool snap_calc_active_center ( bContext *  C,
const bool  select_only,
float  r_center[3] 
)
static

Calculates the center position of the active object in global space.

NOTE: this could be exported to be a generic function. see: calculateCenterActive

Definition at line 920 of file view3d_snap.c.

References C, CTX_data_active_object(), ED_object_calc_active_center(), and NULL.

Referenced by snap_curs_to_active_exec(), snap_selected_to_active_exec(), and snap_selected_to_location().

◆ snap_curs_to_active_exec()

static int snap_curs_to_active_exec ( bContext *  C,
wmOperator *  UNUSEDop 
)
static

◆ snap_curs_to_center_exec()

static int snap_curs_to_center_exec ( bContext *  C,
wmOperator *  UNUSEDop 
)
static

◆ snap_curs_to_grid_exec()

static int snap_curs_to_grid_exec ( bContext *  C,
wmOperator *  UNUSEDop 
)
static

◆ snap_curs_to_sel_ex()

static bool snap_curs_to_sel_ex ( bContext *  C,
const int  pivot_point,
float  r_cursor[3] 
)
static

◆ snap_curs_to_sel_exec()

static int snap_curs_to_sel_exec ( bContext *  C,
wmOperator *  UNUSEDop 
)
static

◆ snap_sel_to_grid_exec()

static int snap_sel_to_grid_exec ( bContext *  C,
wmOperator *  UNUSEDop 
)
static

Snaps every individual object center to its nearest point on the grid.

Definition at line 53 of file view3d_snap.c.

References Freestyle::a, add_v3_v3(), ANIM_get_keyingset_for_autokeying(), ANIM_KS_LOCATION_ID, BKE_armature_loc_pose_to_bone(), BKE_editmesh_from_object(), BKE_object_pose_array_get(), BKE_object_where_is_calc_ex(), BKE_pose_channel_find_name(), BKE_scene_graph_evaluated_ensure(), BKE_view_layer_array_from_objects_in_edit_mode_unique_data, BLI_array_append, BLI_array_declare, BLI_array_len, BMEditMesh::bm, bPoseChannel::bone, BONE_CONNECTED, BONE_SELECTED, C, bPose::chanbase, copy_m3_m4(), copy_v3_v3(), CTX_data_active_object(), CTX_data_ensure_evaluated_depsgraph(), CTX_data_main(), CTX_data_scene(), CTX_data_view_layer(), CTX_wm_region(), CTX_wm_view3d(), Object::data, DEG_get_evaluated_view_layer(), DEG_get_original_object(), DEG_id_tag_update(), depsgraph, ED_autokeyframe_object(), ED_autokeyframe_pchan(), ED_object_data_xform_container_create(), ED_object_data_xform_container_destroy(), ED_object_data_xform_container_item_ensure(), ED_object_data_xform_container_update_all(), ED_object_xform_skip_child_container_create(), ED_object_xform_skip_child_container_destroy(), ED_object_xform_skip_child_container_item_ensure_from_array(), ED_object_xform_skip_child_container_update_all(), ED_transverts_check_obedit(), ED_transverts_create_from_obedit(), ED_transverts_free(), ED_transverts_update_obedit(), ED_view3d_grid_view_scale(), ListBase::first, bPose::flag, Bone::flag, floorf, FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN, FOREACH_SELECTED_EDITABLE_OBJECT_END, Object::id, ID_RECALC_GEOMETRY, ID_RECALC_TRANSFORM, Object::imat, invert_m3_m3(), invert_m4_m4(), Bone::layer, bArmature::layer, TransVert::loc, bPoseChannel::loc, Object::loc, MEM_freeN, MEM_malloc_arrayN, mul_m3_v3(), mul_m4_v3(), bPoseChannel::name, NC_OBJECT, ND_TRANSFORM, bPoseChannel::next, NULL, OB_LOCK_LOCX, OB_LOCK_LOCY, OB_LOCK_LOCZ, OB_MESH, OBEDIT_FROM_OBACT, Object::obmat, OBPOSE_FROM_OBACT, OPERATOR_FINISHED, Object::parent, Object::pose, POSE_DO_UNLOCK, POSE_LOCKED, bPoseChannel::pose_mat, bPoseChannel::protectflag, Object::protectflag, SCE_XFORM_DATA_ORIGIN, SCE_XFORM_SKIP_CHILDREN, scene, sub_v3_v3(), Scene::toolsettings, BMesh::totvertsel, ToolSettings::transform_flag, TransVertStore::transverts, TransVertStore::transverts_tot, Object::type, and WM_event_add_notifier().

Referenced by VIEW3D_OT_snap_selected_to_grid().

◆ snap_selected_to_active_exec()

static int snap_selected_to_active_exec ( bContext *  C,
wmOperator *  op 
)
static

Snaps each selected object to the location of the active selected object.

Definition at line 637 of file view3d_snap.c.

References BKE_report(), C, OPERATOR_CANCELLED, OPERATOR_FINISHED, wmOperator::reports, RPT_ERROR, snap_calc_active_center(), and snap_selected_to_location().

Referenced by VIEW3D_OT_snap_selected_to_active().

◆ snap_selected_to_cursor_exec()

static int snap_selected_to_cursor_exec ( bContext *  C,
wmOperator *  op 
)
static

◆ snap_selected_to_location()

static bool snap_selected_to_location ( bContext *  C,
const float  snap_target_global[3],
const bool  use_offset,
const int  pivot_point,
const bool  use_toolsettings 
)
static

Snaps the selection as a whole (use_offset=true) or each selected object to the given location.

Parameters
snap_target_globala location in global space to snap to (eg. 3D cursor or active object).
use_offsetif the selected objects should maintain their relative offsets and be snapped by the selection pivot point (median, active), or if every object origin should be snapped to the given location.

Definition at line 297 of file view3d_snap.c.

References Freestyle::a, add_v3_v3(), add_v3_v3v3(), ANIM_get_keyingset_for_autokeying(), ANIM_KS_LOCATION_ID, BKE_armature_bone_flag_test_recursive(), BKE_armature_loc_pose_to_bone(), BKE_editmesh_from_object(), BKE_object_flag_test_recursive(), BKE_object_get_parent_matrix(), BKE_object_pose_array_get(), BKE_scene_graph_evaluated_ensure(), BKE_view_layer_array_from_objects_in_edit_mode_unique_data, BLI_array_append, BLI_array_declare, BLI_array_len, BMEditMesh::bm, bPoseChannel::bone, BONE_CONNECTED, BONE_SELECTED, BONE_TRANSFORM, C, bPose::chanbase, copy_m3_m4(), copy_v3_v3(), CTX_data_active_object(), CTX_data_depsgraph_pointer(), CTX_data_edit_object(), CTX_data_main(), CTX_data_scene(), CTX_data_view_layer(), CTX_wm_view3d(), Object::data, DEG_get_evaluated_object(), DEG_id_tag_update(), depsgraph, ED_autokeyframe_object(), ED_autokeyframe_pchan(), ED_object_data_xform_container_create(), ED_object_data_xform_container_destroy(), ED_object_data_xform_container_item_ensure(), ED_object_data_xform_container_update_all(), ED_object_xform_skip_child_container_create(), ED_object_xform_skip_child_container_destroy(), ED_object_xform_skip_child_container_item_ensure_from_array(), ED_object_xform_skip_child_container_update_all(), ED_transverts_check_obedit(), ED_transverts_create_from_obedit(), ED_transverts_free(), ED_transverts_update_obedit(), ListBase::first, bPose::flag, Bone::flag, FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN, FOREACH_SELECTED_EDITABLE_OBJECT_END, Object::id, ID_RECALC_GEOMETRY, ID_RECALC_TRANSFORM, Object::imat, invert_m3_m3(), invert_m4_m4(), TransVert::loc, bPoseChannel::loc, Object::loc, MEM_freeN, mul_m3_m4m4(), mul_m3_v3(), mul_m4_v3(), mul_v3_m3v3(), mul_v3_m4v3(), NC_OBJECT, ND_TRANSFORM, bPoseChannel::next, NULL, OB_DONE, OB_LOCK_LOCX, OB_LOCK_LOCY, OB_LOCK_LOCZ, OB_MESH, Main::objects, Object::obmat, OBPOSE_FROM_OBACT, Bone::parent, Object::parent, Object::parentinv, PBONE_VISIBLE, Object::pose, POSE_DO_UNLOCK, POSE_LOCKED, bPoseChannel::pose_mat, bPoseChannel::protectflag, Object::protectflag, SCE_XFORM_DATA_ORIGIN, SCE_XFORM_SKIP_CHILDREN, scene, snap_calc_active_center(), snap_curs_to_sel_ex(), sub_v3_v3(), sub_v3_v3v3(), Scene::toolsettings, BMesh::totvertsel, ToolSettings::transform_flag, TransVertStore::transverts, TransVertStore::transverts_tot, Object::type, V3D_AROUND_ACTIVE, and WM_event_add_notifier().

Referenced by ED_view3d_snap_selected_to_location(), snap_selected_to_active_exec(), and snap_selected_to_cursor_exec().

◆ VIEW3D_OT_snap_cursor_to_active()

void VIEW3D_OT_snap_cursor_to_active ( wmOperatorType *  ot)

◆ VIEW3D_OT_snap_cursor_to_center()

void VIEW3D_OT_snap_cursor_to_center ( wmOperatorType *  ot)

◆ VIEW3D_OT_snap_cursor_to_grid()

void VIEW3D_OT_snap_cursor_to_grid ( wmOperatorType *  ot)

◆ VIEW3D_OT_snap_cursor_to_selected()

void VIEW3D_OT_snap_cursor_to_selected ( wmOperatorType *  ot)

◆ VIEW3D_OT_snap_selected_to_active()

void VIEW3D_OT_snap_selected_to_active ( wmOperatorType *  ot)

◆ VIEW3D_OT_snap_selected_to_cursor()

void VIEW3D_OT_snap_selected_to_cursor ( wmOperatorType *  ot)

◆ VIEW3D_OT_snap_selected_to_grid()

void VIEW3D_OT_snap_selected_to_grid ( wmOperatorType *  ot)