28#include "RNA_prototypes.hh"
69 TransInfo *t,
const float mval[2],
float *dist_px,
float r_loc[3],
float r_no[3]);
78int BIF_snappingSupported(
Object *obedit)
83 if (obedit ==
nullptr ||
204 uchar col[4], selectedCol[4], activeCol[4];
213 if (!(draw_source || draw_target)) {
226 selectedCol[3] = 128;
233 const float *source_loc =
nullptr;
234 const float *target_loc =
nullptr;
243 float view_inv[4][4];
247 immVertexFormat(),
"pos", blender::gpu::VertAttrType::SFLOAT_32_32_32);
280 immVertexFormat(),
"pos", blender::gpu::VertAttrType::SFLOAT_32_32_32);
301 const float snap_point[2] = {
361 if (BIF_snappingSupported(t->obedit) && (event->
type ==
EVT_TABKEY) &&
382 float iloc[3], loc[3], no[3];
392 copy_v3_v3(iloc, ob->object_to_world().location());
433 const float *original_normal;
437 original_normal = td->
axismtx[2];
452 float snap_loc[3], snap_no[3];
463 copy_v3_v3(init_loc, ob->object_to_world().location());
519 for (
int i = 0;
i < tc->data_len;
i++, td++) {
641 }
while ((l_iter = l_iter->
next) != l_first);
652 *r_prop = &rna_ToolSettings_use_snap;
657 *r_prop = &rna_ToolSettings_use_snap_node;
662 *r_prop = &rna_ToolSettings_use_snap_uv;
667 *r_prop = &rna_ToolSettings_use_snap_sequencer;
673 *r_prop = &rna_ToolSettings_use_snap_anim;
678 switch (graph_editor->
mode) {
686 *r_prop = &rna_ToolSettings_use_snap_anim;
749 switch (graph_editor->
mode) {
788 else if (obedit_type != -1) {
832 return target_operation;
887 r_snap[0] = r_snap[1] = 1.0f;
889 *r_snap_precision = 0.1f;
911 *r_snap_precision = 0.5f;
914 r_snap[0] = r_snap[1] = 0.125f;
915 *r_snap_precision = 0.5f;
1065 float increment_precision;
1076 if (increment != 0.0f) {
1100 if (is_uv_editor && has_edit_object) {
1170 float screen_loc[2];
1183 if (dist_sq < dist_min_sq) {
1185 dist_min_sq = dist_sq;
1224 vec[0] = vec[1] = vec[2] = 0;
1271 for (
int i = 0;
i < 2;
i++) {
1272 const float iter_fac = grid_dist[
i];
1273 r_out[
i] = iter_fac *
roundf((
in[
i] + center_global[
i]) / iter_fac);
1324 if (found ==
true) {
1412 int num_selected = 0;
1413 tc->foreach_index_selected([&](
const int i) {
1418 if (num_selected == 0) {
1425 if (tc->use_local_mat) {
1493 float dist_closest = 0.0f;
1499 tc->foreach_index_selected([&](
const int i) {
1502 std::optional<Bounds<float3>>
bounds;
1515 for (j = 0; j < 8; j++) {
1529 dist_closest = dist;
1554 tc->foreach_index_selected([&](
const int i) {
1562 if (tc->use_local_mat) {
1573 dist_closest = dist;
1590 TransInfo *t,
const float mval[2],
float *dist_px,
float r_loc[3],
float r_no[3])
1602 float *grid_co =
nullptr, grid_co_stack[3];
1605 grid_co = grid_co_stack;
1617 &snap_object_params,
1633 const float mval[2],
1634 const bool use_peel_object,
1649 &snap_object_params,
1659 if (iter->depth < hit_min->
depth) {
1665 if (use_peel_object) {
1669 if ((iter->depth > hit_max->
depth) && (iter->ob_uuid == hit_min->
ob_uuid)) {
1677 if ((iter != hit_min) && (iter->ob_uuid == hit_min->
ob_uuid)) {
1678 if (hit_max ==
nullptr) {
1681 else if (iter->depth < hit_max->
depth) {
1687 if (hit_max ==
nullptr) {
1695 *r_thickness = hit_max->
depth - hit_min->
depth;
1725 if (iter_fac != 0.0f) {
1726 r_out[
i] = iter_fac *
roundf(loc[
i] / iter_fac);
1752 if (use_local_space) {
1758 if (use_local_space) {
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
General operations, lookup, etc. for blender objects.
bool BKE_object_is_in_editmode(const Object *ob)
std::optional< blender::Bounds< blender::float3 > > BKE_object_boundbox_eval_cached_get(const Object *ob)
void BKE_object_eval_transform_all(Depsgraph *depsgraph, Scene *scene, Object *object)
bool BKE_scene_uses_blender_workbench(const Scene *scene)
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
MINLINE float square_f(float a)
void mul_m3_v3(const float M[3][3], float r[3])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void rotation_between_vecs_to_mat3(float m[3][3], const float v1[3], const float v2[3])
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE bool is_zero_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v3(float n[3])
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
Platform independent time functions.
double BLI_time_now_seconds(void)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define POINTER_FROM_UINT(i)
#define SCE_SNAP_TO_VERTEX
@ SCE_SNAP_TO_INCLUDE_EDITED
@ SCE_SNAP_TO_INCLUDE_NONEDITED
@ SCE_SNAP_BACKFACE_CULLING
@ SCE_SNAP_KEEP_ON_SAME_OBJECT
@ SCE_SNAP_TO_ONLY_SELECTABLE
@ SCE_SNAP_TRANSFORM_MODE_SCALE
@ SCE_SNAP_TRANSFORM_MODE_ROTATE
@ SCE_SNAP_TRANSFORM_MODE_TRANSLATE
@ SCE_SNAP_SOURCE_CLOSEST
@ SCE_SNAP_TARGET_NOT_ACTIVE
@ SCE_SNAP_TARGET_NOT_NONEDITED
@ SCE_SNAP_TARGET_ONLY_SELECTABLE
@ SCE_SNAP_TARGET_NOT_SELECTED
@ SCE_SNAP_TARGET_NOT_EDITED
@ SCE_SNAP_INDIVIDUAL_NEAREST
@ SCE_SNAP_INDIVIDUAL_PROJECT
@ SCE_SNAP_TO_EDGE_ENDPOINT
@ SCE_SNAP_TO_EDGE_MIDPOINT
@ SCE_SNAP_TO_EDGE_PERPENDICULAR
#define SI_GRID_STEPS_LEN
@ V3D_SHADING_BACKFACE_CULLING
float ED_space_image_zoom_level(const View2D *v2d, int grid_dimension)
float ED_space_image_increment_snap_value(int grid_dimensions, const float grid_steps[SI_GRID_STEPS_LEN], float zoom_factor)
void ED_space_image_grid_steps(SpaceImage *sima, float grid_steps_x[SI_GRID_STEPS_LEN], float grid_steps_y[SI_GRID_STEPS_LEN], int grid_dimension)
#define ED_transform_snap_object_time_average_print()
bool ED_uvedit_nearest_uv_multi(const View2D *v2d, const Scene *scene, blender::Span< Object * > objects, const float mval_fl[2], const bool ignore_selected, float *dist_sq, float r_uv[2])
float ED_view3d_grid_view_scale(const Scene *scene, const View3D *v3d, const ARegion *region, const char **r_grid_unit)
float ED_view3d_pixel_size(const RegionView3D *rv3d, const float co[3])
void ED_view3d_cursor_snap_draw_util(RegionView3D *rv3d, const float source_loc[3], const float target_loc[3], const eSnapMode source_type, const eSnapMode target_type, const uchar source_color[4], const uchar target_color[4])
eV3DProjStatus ED_view3d_project_float_global(const ARegion *region, const float co[3], float r_co[2], eV3DProjTest flag)
void GPU_matrix_push_projection()
void GPU_matrix_pop_projection()
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_blend(GPUBlend blend)
void GPU_depth_test(GPUDepthTest test)
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
float UI_GetThemeValuef(int colorid)
void UI_view2d_view_to_region_fl(const View2D *v2d, float x, float y, float *r_region_x, float *r_region_y) ATTR_NONNULL()
bool BM_elem_cb_check_hflag_disabled(BMElem *ele, void *user_data)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_flag_test(ele, hflag)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool closest(btVector3 &v)
void * MEM_callocN(size_t len, const char *str)
std::array< VecBase< T, 3 >, 8 > corners(const Bounds< VecBase< T, 3 > > &bounds)
short tool_settings_snap_mode_get(Scene *scene)
VecBase< float, 3 > float3
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
struct SceneDisplay display
wmEventModifierFlag modifier
void wmOrtho2_region_pixelspace(const ARegion *region)