Commit: 9e88cfbe0ca254909cf3c1c45ac18195d6559e83 Author: jon denning Date: Tue Jun 28 11:46:00 2022 -0400 Branches: retopo_transform https://developer.blender.org/rB9e88cfbe0ca254909cf3c1c45ac18195d6559e83
added retopo mode, updated transform ops =================================================================== M release/scripts/startup/bl_ui/space_view3d.py M source/blender/editors/transform/transform.c M source/blender/editors/transform/transform_mode_translate.c M source/blender/editors/transform/transform_ops.c M source/blender/editors/transform/transform_snap.c M source/blender/editors/transform/transform_snap_object.cc M source/blender/makesdna/DNA_scene_types.h M source/blender/makesrna/intern/rna_scene.c =================================================================== diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 142a4baf701..869748a6452 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -6765,7 +6765,9 @@ class VIEW3D_PT_snapping(Panel): layout = self.layout col = layout.column() col.active = tool_settings.use_snap + col.label(text="Snap To") + col.prop(tool_settings, "snap_elements", expand=True) col.separator() @@ -6779,9 +6781,10 @@ 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 @@ -6789,6 +6792,8 @@ class VIEW3D_PT_snapping(Panel): 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') if object_mode in {'OBJECT', 'POSE', 'EDIT', 'WEIGHT_PAINT'}: col.prop(tool_settings, "use_snap_align_rotation") diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index d9e23b98c66..0e0bdae792b 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1979,6 +1979,9 @@ void transformApply(bContext *C, TransInfo *t) { t->context = C; + /* TODO(gfxcoder): removed debug print */ + printf("\n\ntransformApply\n"); + if (t->redraw == TREDRAW_HARD) { selectConstraint(t); if (t->transform) { diff --git a/source/blender/editors/transform/transform_mode_translate.c b/source/blender/editors/transform/transform_mode_translate.c index 65690f9069d..3f3efa54b6b 100644 --- a/source/blender/editors/transform/transform_mode_translate.c +++ b/source/blender/editors/transform/transform_mode_translate.c @@ -469,6 +469,8 @@ static void applyTranslation(TransInfo *t, const int UNUSED(mval[2])) add_v3_v3(global_dir, values_ofs); } + /* TODO(gfxcoder): removed debug print */ + printf("applyTranslation -> applySnappingAsGroup()\n"); t->tsnap.snapElem = SCE_SNAP_MODE_NONE; applySnappingAsGroup(t, global_dir); transform_snap_grid(t, global_dir); @@ -514,6 +516,8 @@ static void applyTranslation(TransInfo *t, const int UNUSED(mval[2])) mul_v3_m3v3(t->values_final, t->spacemtx_inv, global_dir); headerTranslation(t, (t->con.mode & CON_APPLY) ? t->values_final : global_dir, str); + /* TODO(gfxcoder): removed debug print */ + printf("applyTranslation -> recalcData()\n"); recalcData(t); ED_area_status_text(t->area, str); } diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index e0d6ecac6f9..6f0e4ffcf35 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -656,7 +656,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) if (flags & P_SNAP) { // TODO: rename `snap` to `use_snap`? - prop = RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", ""); + prop = RNA_def_boolean(ot->srna, "snap", false, "Use Snapping Options", ""); RNA_def_property_flag(prop, PROP_HIDDEN); prop = RNA_def_enum( @@ -678,18 +678,34 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) RNA_def_property_flag(prop, PROP_HIDDEN); prop = RNA_def_boolean(ot->srna, "use_snap_edit", true, "Target: Include Edit", ""); RNA_def_property_flag(prop, PROP_HIDDEN); - prop = RNA_def_boolean(ot->srna, "use_snap_nonedit", true, "Target: Include Non-Edited", ""); + prop = RNA_def_boolean( + ot->srna, "use_snap_nonedit", false, "Target: Include Non-Edited", ""); RNA_def_property_flag(prop, PROP_HIDDEN); prop = RNA_def_boolean( ot->srna, "use_snap_selectable", true, "Target: Exclude Non-Selectable", ""); RNA_def_property_flag(prop, PROP_HIDDEN); + prop = RNA_def_boolean(ot->srna, + "use_snap_retopology_mode", + true, + "Target: Retopology Mode", + "Snap grabbed geometry to vertices and edges of edited objects (if " + "enabled) and to faces of non-edited objects (if enabled)"); + RNA_def_property_flag(prop, PROP_HIDDEN); + + /* Face Nearest options */ + prop = RNA_def_boolean( + ot->srna, "use_snap_to_same_target", false, "Snap to Same Target", ""); + RNA_def_property_flag(prop, PROP_HIDDEN); + prop = RNA_def_int( + ot->srna, "snap_face_nearest_steps", 1, 1, 32767, "Face Nearest Steps", "", 1, 32767); + RNA_def_property_flag(prop, PROP_HIDDEN); prop = RNA_def_float_vector( ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); if (flags & P_ALIGN_SNAP) { - prop = RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", ""); + prop = RNA_def_boolean(ot->srna, "snap_align", false, "Align with Point Normal", ""); RNA_def_property_flag(prop, PROP_HIDDEN); prop = RNA_def_float_vector( ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX); diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index dfe290c6425..ff65f78742a 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -128,11 +128,12 @@ bool activeSnap(const TransInfo *t) bool activeSnap_SnappingIndividual(const TransInfo *t) { - if (activeSnap(t) && t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) { + if (t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) { + // Face Nearest snapping always snaps individual vertices return true; } - if (!t->tsnap.project) { + if (t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST && !t->tsnap.project) { return false; } @@ -157,10 +158,6 @@ bool activeSnap_SnappingAsGroup(const TransInfo *t) return false; } - if (t->tsnap.mode == SCE_SNAP_MODE_FACE_NEAREST) { - return false; - } - if (doForceIncrementSnap(t)) { return false; } @@ -368,8 +365,10 @@ eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *event) return status; } -static bool applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td) +static bool applyFaceProject_Individual(TransInfo *t, TransDataContainer *tc, TransData *td) { + /* TODO(gfxcoder): remove debug print */ + printf("applyFaceProject_Individual: %d\n", t->tsnap.flag); if (!(t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST)) { return false; } @@ -493,7 +492,10 @@ static void applyFaceNearest(TransInfo *t, TransDataContainer *tc, TransData *td void applySnappingIndividual(TransInfo *t) { + /* TODO(gfxcoder): remove debug print */ + printf("applySnappingIndividual\n"); if (!activeSnap_SnappingIndividual(t)) { + printf(" skipping!\n"); return; } @@ -511,8 +513,11 @@ void applySnappingIndividual(TransInfo *t) /* 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 = applyFaceProject(t, tc, td); - if (!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 (!hit && t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) { applyFaceNearest(t, tc, td); } #if 0 /* TODO: support this? */ @@ -574,7 +579,10 @@ void applyGridAbsolute(TransInfo *t) void applySnappingAsGroup(TransInfo *t, float *vec) { + /* TODO(gfxcoder): remove debug print */ + printf("applySnappingAsGroup\n"); if (!activeSnap_SnappingAsGroup(t)) { + printf(" skipping!\n"); return; } @@ -738,6 +746,7 @@ static eSnapTargetSelect snap_select_target_get(TransInfo *t) bool use_snap_edit = (t->tsnap.target_select & SCE_SNAP_TARGET_NOT_EDITED) == 0; bool use_snap_nonedit = (t->tsnap.target_select & SCE_SNAP_TARGET_NOT_NONEDITED) == 0; bool use_snap_selectable_only = (t->tsnap.target_select & SCE_SNAP_TARGET_ONLY_SELECTABLE) != 0; + // bool use_retopology_mode = (t->tsnap.target_select & SCE_SNAP_TARGET_RETOPOLOGY_MODE) != 0; if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE) && !(t->options & CTX_CAMERA)) { if (base_act && (base_act->object->mode & OB_MODE_PARTICLE_EDIT)) { @@ -918,6 +927,13 @@ void initSnapping(TransInfo *t, wmOperator *op) RNA_property_boolean_get(op->ptr, prop), SCE_SNAP_TARGET_ONLY_SELECTABLE); } + + if ((prop = RNA_struct_find_property(op->ptr, "use_snap_retopology_mode")) && + RNA_property_is_set(op->ptr, prop)) { + SET_FLAG_FROM_TEST(t->tsnap.target_select, + RNA_property_boolean_get(op->ptr, prop), + SCE_SNAP_TARGET_RETOPOLOGY_MODE); + } } } /* use scene defaults only when transform @@ Diff output truncated at 10240 characters. @@ _______________________________________________ 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