[Bf-blender-cvs] [9e88cfbe0ca] retopo_transform: added retopo mode, updated transform ops
jon denning
noreply at git.blender.org
Sat Jul 16 13:00:39 CEST 2022
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. @@
More information about the Bf-blender-cvs
mailing list