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:
Diffstat (limited to 'source/blender/editors/transform/transform_snap_object.c')
-rw-r--r--source/blender/editors/transform/transform_snap_object.c47
1 files changed, 30 insertions, 17 deletions
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index 5f9250e87f7..17326001a99 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -3020,7 +3020,8 @@ static short transform_snap_context_project_view3d_mixed_impl(
float r_no[3],
int *r_index,
Object **r_ob,
- float r_obmat[4][4])
+ float r_obmat[4][4],
+ float r_face_nor[3])
{
BLI_assert((snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) !=
@@ -3067,22 +3068,27 @@ static short transform_snap_context_project_view3d_mixed_impl(
&ob_eval,
obmat,
NULL);
+ if (has_hit) {
+ if (r_face_nor) {
+ copy_v3_v3(r_face_nor, no);
+ }
- if (has_hit && (snap_to_flag & SCE_SNAP_MODE_FACE)) {
- retval = SCE_SNAP_MODE_FACE;
+ if ((snap_to_flag & SCE_SNAP_MODE_FACE)) {
+ retval = SCE_SNAP_MODE_FACE;
- copy_v3_v3(r_loc, loc);
- if (r_no) {
- copy_v3_v3(r_no, no);
- }
- if (r_ob) {
- *r_ob = ob_eval;
- }
- if (r_obmat) {
- copy_m4_m4(r_obmat, obmat);
- }
- if (r_index) {
- *r_index = index;
+ copy_v3_v3(r_loc, loc);
+ if (r_no) {
+ copy_v3_v3(r_no, no);
+ }
+ if (r_ob) {
+ *r_ob = ob_eval;
+ }
+ if (r_obmat) {
+ copy_m4_m4(r_obmat, obmat);
+ }
+ if (r_index) {
+ *r_index = index;
+ }
}
}
}
@@ -3182,6 +3188,10 @@ static short transform_snap_context_project_view3d_mixed_impl(
if (r_index) {
*r_index = index;
}
+ if (r_face_nor && !has_hit) {
+ /* Fallback. */
+ copy_v3_v3(r_face_nor, no);
+ }
*dist_px = dist_px_tmp;
}
@@ -3203,7 +3213,8 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
float r_no[3],
int *r_index,
Object **r_ob,
- float r_obmat[4][4])
+ float r_obmat[4][4],
+ float r_face_nor[3])
{
return transform_snap_context_project_view3d_mixed_impl(sctx,
depsgraph,
@@ -3218,7 +3229,8 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
r_no,
r_index,
r_ob,
- r_obmat);
+ r_obmat,
+ r_face_nor);
}
/**
@@ -3259,6 +3271,7 @@ bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx,
r_no,
NULL,
NULL,
+ NULL,
NULL) != 0;
}