Commit: 8d284d485447984089c3494b8eb69e9c3ea60553 Author: jon denning Date: Tue Jul 5 17:01:42 2022 -0400 Branches: retopo_transform https://developer.blender.org/rB8d284d485447984089c3494b8eb69e9c3ea60553
merged in master =================================================================== =================================================================== diff --cc release/scripts/startup/bl_ui/space_view3d.py index 869748a6452,5a38c4175a8..6b932e3df24 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@@ -6781,19 -6830,33 +6833,41 @@@ class VIEW3D_PT_snapping(Panel) row.prop(tool_settings, "snap_target", expand=True) if obj: + show_target_options = object_mode == 'EDIT' and obj.type not in {'LATTICE', 'META', 'FONT'} col.label(text="Target Selection") col_targetsel = col.column(align=True) - if object_mode == 'EDIT' and obj.type not in {'LATTICE', 'META', 'FONT'}: + if show_target_options: - # active_use_self = True - # active_use_self &= not (tool_settings.use_proportional_edit and obj.type == 'MESH') - # active_use_self &= tool_settings.use_snap_edit - col_targetsel.prop(tool_settings, "use_snap_self", text="Include Active", icon='EDITMODE_HLT') - col_targetsel.prop(tool_settings, "use_snap_edit", text="Include Edited", icon='OUTLINER_DATA_MESH') - col_targetsel.prop(tool_settings, "use_snap_nonedit", text="Include Non-Edited", icon='OUTLINER_OB_MESH') - col_targetsel.prop(tool_settings, "use_snap_selectable", text="Exclude Non-Selectable", icon='RESTRICT_SELECT_OFF') + col_targetsel.prop( + tool_settings, + "use_snap_self", + text="Include Active", + icon='EDITMODE_HLT', + ) + col_targetsel.prop( + tool_settings, + "use_snap_edit", + text="Include Edited", + icon='OUTLINER_DATA_MESH', + ) + col_targetsel.prop( + tool_settings, + "use_snap_nonedit", + text="Include Non-Edited", + icon='OUTLINER_OB_MESH', + ) + col_targetsel.prop( + tool_settings, + "use_snap_selectable", + text="Exclude Non-Selectable", + icon='RESTRICT_SELECT_OFF', + ) + if show_target_options: - col_targetsel.prop(tool_settings, "use_snap_retopology_mode", text="Use Retopology Mode", icon='MOD_MESHDEFORM') ++ col_targetsel.prop( ++ tool_settings, ++ "use_snap_retopology_mode", ++ text="Use Retopology Mode", ++ icon='MOD_MESHDEFORM', ++ ) if object_mode in {'OBJECT', 'POSE', 'EDIT', 'WEIGHT_PAINT'}: col.prop(tool_settings, "use_snap_align_rotation") diff --cc source/blender/editors/transform/transform_snap.c index ff65f78742a,22d062a71dc..e7556c23888 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@@ -128,12 -128,11 +128,11 @@@ bool activeSnap(const TransInfo *t bool activeSnap_SnappingIndividual(const TransInfo *t) { - if (t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) { - // Face Nearest snapping always snaps individual vertices - if (activeSnap(t) && t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) { ++ if (activeSnap(t) && (t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST)) { return true; } - if (t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST && !t->tsnap.project) { - if (!t->tsnap.project) { ++ if ((t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST) && !t->tsnap.project) { return false; } @@@ -511,13 -509,10 +509,14 @@@ void applySnappingIndividual(TransInfo continue; } - /* If both face ray-cast and face nearest methods are enabled, start with face ray-cast and - * fallback to face nearest ray-cast does not hit. */ - bool hit = applyFaceProject(t, tc, td); + /* If both face raycast and face nearest methods are enabled, start with face raycast and + * fallback to face nearest raycast does not hit. */ + bool hit = false; - if (t->tsnap.flag & SCE_SNAP_PROJECT && t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST) { - hit = applyFaceProject_Individual(t, tc, td); ++ if (t->tsnap.flag & SCE_SNAP_PROJECT) { ++ /* Only raycast in this function if projecting individual elements. */ ++ hit = applyFaceProject(t, tc, td); + } - if (!hit && t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) { + if (!hit) { applyFaceNearest(t, tc, td); } #if 0 /* TODO: support this? */ @@@ -942,25 -926,21 +938,25 @@@ void initSnapping(TransInfo *t, wmOpera t->modifiers |= MOD_SNAP; } + t->tsnap.target_select = SCE_SNAP_TARGET_ALL; t->tsnap.align = ((t->tsnap.flag & SCE_SNAP_ROTATE) != 0); t->tsnap.project = ((t->tsnap.flag & SCE_SNAP_PROJECT) != 0); + t->tsnap.peel = ((t->tsnap.flag & SCE_SNAP_PROJECT) != 0); SET_FLAG_FROM_TEST(t->tsnap.target_select, - (t->settings->snap_flag & SCE_SNAP_NOT_TO_ACTIVE), + (ts->snap_flag & SCE_SNAP_NOT_TO_ACTIVE), SCE_SNAP_TARGET_NOT_ACTIVE); SET_FLAG_FROM_TEST(t->tsnap.target_select, - !(t->settings->snap_flag & SCE_SNAP_TO_INCLUDE_EDITED), + !(ts->snap_flag & SCE_SNAP_TO_INCLUDE_EDITED), SCE_SNAP_TARGET_NOT_EDITED); SET_FLAG_FROM_TEST(t->tsnap.target_select, - !(t->settings->snap_flag & SCE_SNAP_TO_INCLUDE_NONEDITED), + !(ts->snap_flag & SCE_SNAP_TO_INCLUDE_NONEDITED), SCE_SNAP_TARGET_NOT_NONEDITED); SET_FLAG_FROM_TEST(t->tsnap.target_select, - (t->settings->snap_flag & SCE_SNAP_TO_ONLY_SELECTABLE), + (ts->snap_flag & SCE_SNAP_TO_ONLY_SELECTABLE), SCE_SNAP_TARGET_ONLY_SELECTABLE); + SET_FLAG_FROM_TEST(t->tsnap.target_select, + (t->settings->snap_flag & SCE_SNAP_RETOPOLOGY_MODE), + SCE_SNAP_TARGET_RETOPOLOGY_MODE); - t->tsnap.peel = ((t->tsnap.flag & SCE_SNAP_PROJECT) != 0); } t->tsnap.source_select = snap_source; diff --cc source/blender/editors/transform/transform_snap_object.cc index 2bb39abfe25,817474f795e..cb121c0e547 --- a/source/blender/editors/transform/transform_snap_object.cc +++ b/source/blender/editors/transform/transform_snap_object.cc @@@ -1296,9 -1272,9 +1296,9 @@@ static bool nearest_world_tree(SnapObje tree, nearest_cb, treedata, init_co_local, nullptr, nullptr, nullptr, &dist_sq); } else { - /* Note: when params->face_nearest_steps == 1, the return variables of function below contain - * the answer. We could return immediately after updating r_loc, r_no, r_index, but that would - * also complicate the code. Foregoing slight optimization for code clarity. */ + /* NOTE: when `params->face_nearest_steps == 1`, the return variables of function below contain - * the answer. We could return immediately after updating r_loc, r_no, r_index, but that would - * also complicate the code. Foregoing slight optimization for code clarity. */ ++ * the answer. We could return immediately after updating 'r_loc', 'r_no', 'r_index', but that ++ * would also complicate the code. Foregoing slight optimization for code clarity. */ nearest_world_tree_co( tree, nearest_cb, treedata, curr_co_local, nullptr, nullptr, nullptr, &dist_sq); } @@@ -1408,18 -1384,6 +1408,12 @@@ static void nearest_world_object_fn(Sna { struct NearestWorldObjUserData *dt = static_cast<NearestWorldObjUserData *>(data); + const bool use_retopo_mode = params->snap_target_select & SCE_SNAP_TARGET_RETOPOLOGY_MODE; + const bool is_object_edited = BKE_object_is_in_editmode(ob_eval); - /* TODO(gfxcoder): removed debug print */ - printf("nearest_world_object_fn: obj:%s retopo:%s edit:%s\n", - ob_eval->id.name, - use_retopo_mode ? "t" : "f", - is_object_edited ? "t" : "f"); + if (use_retopo_mode && is_object_edited) { - printf(" skipped\n"); + return; + } + bool retval = false; switch (ob_eval->type) { case OB_MESH: { @@@ -3460,13 -3399,33 +3449,38 @@@ static eSnapMode transform_snap_context const RegionView3D *rv3d = static_cast<RegionView3D *>(region->regiondata); - bool use_occlusion_test = params->use_occlusion_test && !XRAY_ENABLED(v3d); + const bool use_retopo_mode = params->snap_target_select & SCE_SNAP_TARGET_RETOPOLOGY_MODE; + const bool use_occlusion_test = params->use_occlusion_test && !XRAY_ENABLED(v3d); + + /* TODO(gfxcoder): removed debug print */ + printf("--- transform_snap_context_project_view3d_mixed_impl occlusion:%s ---\n", + use_occlusion_test ? "t" : "f"); + /* Note: if both face raycast and face nearest are enabled, first find result of nearest, then + * override with raycast. */ + if ((snap_to_flag & SCE_SNAP_MODE_FACE_NEAREST) && !has_hit) { + has_hit = nearestWorldObjects( + sctx, params, init_co, prev_co, loc, no, &index, &ob_eval, obmat); + + if (has_hit) { + retval = SCE_SNAP_MODE_FACE_NEAREST; + + 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; + } + } + } + if (snap_to_flag & SCE_SNAP_MODE_FACE_RAYCAST || use_occlusion_test) { float ray_start[3], ray_normal[3]; if (!ED_view3d_win_to_ray_clipped_ex( _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs