Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2021-06-29 23:38:34 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2021-06-29 23:38:34 +0300
commitdd14ea18190ff27082009f73a556569a43377a71 (patch)
treeba478352e597a54713e3a09002ac010a72b492e4 /source/blender/editors/transform
parentfba9cd019f21f29bad1a6f3713370c5172dbc97f (diff)
Cleanup: split CalcSnapGeometry in smaller functions
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform_snap.c165
1 files changed, 92 insertions, 73 deletions
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 34a380f9199..1749a63e1dc 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -76,7 +76,10 @@ static bool doForceIncrementSnap(const TransInfo *t);
static void setSnappingCallback(TransInfo *t);
/* static void CalcSnapGrid(TransInfo *t, float *vec); */
-static void CalcSnapGeometry(TransInfo *t, float *vec);
+static void snap_calc_view3d_fn(TransInfo *t, float *vec);
+static void snap_calc_uv_fn(TransInfo *t, float *vec);
+static void snap_calc_node_fn(TransInfo *t, float *vec);
+static void snap_calc_sequencer_fn(TransInfo *t, float *vec);
static void TargetSnapMedian(TransInfo *t);
static void TargetSnapCenter(TransInfo *t);
@@ -752,9 +755,17 @@ void freeSnapping(TransInfo *t)
static void setSnappingCallback(TransInfo *t)
{
- t->tsnap.calcSnap = CalcSnapGeometry;
-
- if (t->spacetype == SPACE_SEQ) {
+ if (t->spacetype == SPACE_VIEW3D) {
+ t->tsnap.calcSnap = snap_calc_view3d_fn;
+ }
+ else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) {
+ t->tsnap.calcSnap = snap_calc_uv_fn;
+ }
+ else if (t->spacetype == SPACE_NODE) {
+ t->tsnap.calcSnap = snap_calc_node_fn;
+ }
+ else if (t->spacetype == SPACE_SEQ) {
+ t->tsnap.calcSnap = snap_calc_sequencer_fn;
/* The target is calculated along with the snap point. */
return;
}
@@ -878,97 +889,105 @@ void getSnapPoint(const TransInfo *t, float vec[3])
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Calc Snap (Generic)
+/** \name Calc Snap
* \{ */
-static void CalcSnapGeometry(TransInfo *t, float *vec)
+static void snap_calc_view3d_fn(TransInfo *t, float *UNUSED(vec))
{
- if (t->spacetype == SPACE_VIEW3D) {
- float loc[3];
- float no[3];
- float mval[2];
- bool found = false;
- short snap_elem = 0;
- float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
+ BLI_assert(t->spacetype == SPACE_VIEW3D);
+ float loc[3];
+ float no[3];
+ float mval[2];
+ bool found = false;
+ short snap_elem = 0;
+ float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
- mval[0] = t->mval[0];
- mval[1] = t->mval[1];
+ mval[0] = t->mval[0];
+ mval[1] = t->mval[1];
- if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
- SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
- zero_v3(no); /* objects won't set this */
- snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no);
- found = snap_elem != 0;
- }
- if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) {
- found = peelObjectsTransform(
- t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL);
+ if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
+ SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
+ zero_v3(no); /* objects won't set this */
+ snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no);
+ found = snap_elem != 0;
+ }
+ if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) {
+ found = peelObjectsTransform(
+ t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL);
- if (found) {
- snap_elem = SCE_SNAP_MODE_VOLUME;
- }
+ if (found) {
+ snap_elem = SCE_SNAP_MODE_VOLUME;
}
+ }
+
+ if (found == true) {
+ copy_v3_v3(t->tsnap.snapPoint, loc);
+ copy_v3_v3(t->tsnap.snapNormal, no);
+
+ t->tsnap.status |= POINT_INIT;
+ }
+ else {
+ t->tsnap.status &= ~POINT_INIT;
+ }
+
+ t->tsnap.snapElem = (char)snap_elem;
+}
+
+static void snap_calc_uv_fn(TransInfo *t, float *UNUSED(vec))
+{
+ BLI_assert(t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH);
+ if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) {
+ float co[2];
+
+ UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]);
+
+ uint objects_len = 0;
+ Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
+ t->view_layer, NULL, &objects_len);
- if (found == true) {
- copy_v3_v3(t->tsnap.snapPoint, loc);
- copy_v3_v3(t->tsnap.snapNormal, no);
+ float dist_sq = FLT_MAX;
+ if (ED_uvedit_nearest_uv_multi(
+ t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) {
+ t->tsnap.snapPoint[0] *= t->aspect[0];
+ t->tsnap.snapPoint[1] *= t->aspect[1];
t->tsnap.status |= POINT_INIT;
}
else {
t->tsnap.status &= ~POINT_INIT;
}
-
- t->tsnap.snapElem = (char)snap_elem;
+ MEM_freeN(objects);
}
- else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) {
- if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) {
- float co[2];
-
- UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]);
+}
- uint objects_len = 0;
- Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
- t->view_layer, NULL, &objects_len);
+static void snap_calc_node_fn(TransInfo *t, float *UNUSED(vec))
+{
+ BLI_assert(t->spacetype == SPACE_NODE);
+ if (t->tsnap.mode & (SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y)) {
+ float loc[2];
+ float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
+ char node_border;
- float dist_sq = FLT_MAX;
- if (ED_uvedit_nearest_uv_multi(
- t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) {
- t->tsnap.snapPoint[0] *= t->aspect[0];
- t->tsnap.snapPoint[1] *= t->aspect[1];
+ if (snapNodesTransform(t, t->mval, loc, &dist_px, &node_border)) {
+ copy_v2_v2(t->tsnap.snapPoint, loc);
+ t->tsnap.snapNodeBorder = node_border;
- t->tsnap.status |= POINT_INIT;
- }
- else {
- t->tsnap.status &= ~POINT_INIT;
- }
- MEM_freeN(objects);
+ t->tsnap.status |= POINT_INIT;
+ }
+ else {
+ t->tsnap.status &= ~POINT_INIT;
}
}
- else if (t->spacetype == SPACE_NODE) {
- if (t->tsnap.mode & (SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y)) {
- float loc[2];
- float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
- char node_border;
-
- if (snapNodesTransform(t, t->mval, loc, &dist_px, &node_border)) {
- copy_v2_v2(t->tsnap.snapPoint, loc);
- t->tsnap.snapNodeBorder = node_border;
+}
- t->tsnap.status |= POINT_INIT;
- }
- else {
- t->tsnap.status &= ~POINT_INIT;
- }
- }
+static void snap_calc_sequencer_fn(TransInfo *t, float *vec)
+{
+ BLI_assert(t->spacetype == SPACE_SEQ);
+ if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) {
+ t->tsnap.status |= (POINT_INIT | TARGET_INIT);
}
- else if (t->spacetype == SPACE_SEQ) {
- if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) {
- t->tsnap.status |= (POINT_INIT | TARGET_INIT);
- }
- else {
- t->tsnap.status &= ~(POINT_INIT | TARGET_INIT);
- }
+ else {
+ t->tsnap.status &= ~(POINT_INIT | TARGET_INIT);
}
}