[Bf-blender-cvs] [f99197fb2d0] blender2.8: Transform: Support mixed snap in 3d View.

Germano noreply at git.blender.org
Tue May 22 13:59:09 CEST 2018


Commit: f99197fb2d0a529cd2096c9367bc30d24398ac1e
Author: Germano
Date:   Tue May 22 08:58:56 2018 -0300
Branches: blender2.8
https://developer.blender.org/rBf99197fb2d0a529cd2096c9367bc30d24398ac1e

Transform: Support mixed snap in 3d View.

Allows more than one snap mode to be enabled. So different combinations are possible.

Reviewers: campbellbarton

Reviewed By: campbellbarton

Subscribers: Christopher_Anderssarian, duarteframos

Tags: #bf_blender_2.8

Differential Revision: D3400

===================================================================

M	release/scripts/startup/bl_ui/space_topbar.py
M	source/blender/blenkernel/BKE_blender_version.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/curve/editcurve.c
M	source/blender/editors/include/ED_transform_snap_object_context.h
M	source/blender/editors/mesh/editmesh_tools.c
M	source/blender/editors/space_view3d/view3d_manipulator_ruler.c
M	source/blender/editors/space_view3d/view3d_ruler.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_constraints.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap_object.c
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_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index 4889f0886f4..1c4e5493e24 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -259,8 +259,14 @@ class TOPBAR_HT_lower_bar(Header):
                         show_snap = True
 
         if show_snap:
-            snap_element = toolsettings.snap_element
-            act_snap_element = bpy.types.ToolSettings.bl_rna.properties['snap_element'].enum_items[snap_element]
+            snap_items = bpy.types.ToolSettings.bl_rna.properties['snap_elements'].enum_items
+            for elem in toolsettings.snap_elements:
+                # TODO: Display multiple icons.
+                # (Currently only one of the enabled modes icons is displayed)
+                icon = snap_items[elem].icon
+                break
+            else:
+                icon = 'NONE'
 
             row = layout.row(align=True)
             row.prop(toolsettings, "use_snap", text="")
@@ -270,7 +276,7 @@ class TOPBAR_HT_lower_bar(Header):
                 space_type='TOPBAR',
                 region_type='HEADER',
                 panel_type="TOPBAR_PT_snapping",
-                icon=act_snap_element.icon,
+                icon=icon,
                 text=""
             )
 
@@ -367,7 +373,7 @@ class TOPBAR_PT_snapping(Panel):
 
     def draw(self, context):
         toolsettings = context.tool_settings
-        snap_element = toolsettings.snap_element
+        snap_elements = toolsettings.snap_elements
         obj = context.active_object
         mode = context.mode
         object_mode = 'OBJECT' if obj is None else obj.mode
@@ -375,13 +381,13 @@ class TOPBAR_PT_snapping(Panel):
         layout = self.layout
         col = layout.column()
         col.label("Snapping")
-        col.prop(toolsettings, "snap_element", expand=True)
+        col.prop(toolsettings, "snap_elements", expand=True)
 
         col.separator()
-
-        if snap_element == 'INCREMENT':
+        if 'INCREMENT' in snap_elements:
             col.prop(toolsettings, "use_snap_grid_absolute")
-        else:
+
+        if snap_elements != {'INCREMENT'}:
             col.label("Target")
             row = col.row(align=True)
             row.prop(toolsettings, "snap_target", expand=True)
@@ -389,13 +395,14 @@ class TOPBAR_PT_snapping(Panel):
             if obj:
                 if object_mode == 'EDIT':
                     col.prop(toolsettings, "use_snap_self")
-                if object_mode in {'OBJECT', 'POSE', 'EDIT'} and snap_element != 'VOLUME':
+                if object_mode in {'OBJECT', 'POSE', 'EDIT'}:
                     col.prop(toolsettings, "use_snap_align_rotation", text="Align Rotation")
 
-        if snap_element == 'VOLUME':
-            col.prop(toolsettings, "use_snap_peel_object")
-        elif snap_element == 'FACE':
-            col.prop(toolsettings, "use_snap_project", text="Project Elements")
+            if 'FACE' in snap_elements:
+                col.prop(toolsettings, "use_snap_project", text="Project Elements")
+
+            if 'VOLUME' in snap_elements:
+                col.prop(toolsettings, "use_snap_peel_object")
 
         # Auto-Merge Editing
         if obj:
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 0352346c7ac..3712e556b63 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -28,7 +28,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         280
-#define BLENDER_SUBVERSION      14
+#define BLENDER_SUBVERSION      15
 /* Several breakages with 270, e.g. constraint deg vs rad */
 #define BLENDER_MINVERSION      270
 #define BLENDER_MINSUBVERSION   6
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index ea0498930ff..d4ffc90c797 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -642,7 +642,9 @@ void BKE_scene_init(Scene *sce)
 
 	
 	sce->toolsettings->transform_pivot_point = V3D_AROUND_CENTER_MEAN;
+	sce->toolsettings->snap_mode = SCE_SNAP_MODE_INCREMENT;
 	sce->toolsettings->snap_node_mode = SCE_SNAP_MODE_GRID;
+	sce->toolsettings->snap_uv_mode = SCE_SNAP_MODE_INCREMENT;
 
 	sce->toolsettings->curve_paint_settings.curve_type = CU_BEZIER;
 	sce->toolsettings->curve_paint_settings.flag |= CURVE_PAINT_FLAG_CORNERS_DETECT;
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index a33f3eb944d..86c8da91251 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1477,5 +1477,25 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
 				}
 			}
 		}
+
+		for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+			switch (scene->toolsettings->snap_mode) {
+				case 0: scene->toolsettings->snap_mode = SCE_SNAP_MODE_INCREMENT; break;
+				case 1: scene->toolsettings->snap_mode = SCE_SNAP_MODE_VERTEX   ; break;
+				case 2: scene->toolsettings->snap_mode = SCE_SNAP_MODE_EDGE     ; break;
+				case 3: scene->toolsettings->snap_mode = SCE_SNAP_MODE_FACE     ; break;
+				case 4: scene->toolsettings->snap_mode = SCE_SNAP_MODE_VOLUME   ; break;
+			}
+			switch (scene->toolsettings->snap_node_mode) {
+				case 5: scene->toolsettings->snap_node_mode = SCE_SNAP_MODE_NODE_X; break;
+				case 6: scene->toolsettings->snap_node_mode = SCE_SNAP_MODE_NODE_Y; break;
+				case 7: scene->toolsettings->snap_node_mode = SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y; break;
+				case 8: scene->toolsettings->snap_node_mode = SCE_SNAP_MODE_GRID  ; break;
+			}
+			switch (scene->toolsettings->snap_uv_mode) {
+				case 0: scene->toolsettings->snap_uv_mode = SCE_SNAP_MODE_INCREMENT; break;
+				case 1: scene->toolsettings->snap_uv_mode = SCE_SNAP_MODE_VERTEX   ; break;
+			}
+		}
 	}
 }
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index 21131b2017d..fc6520a33f2 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -5015,9 +5015,9 @@ static int add_vertex_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 			struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
 			        CTX_data_main(C), vc.scene, CTX_data_depsgraph(C), 0, vc.ar, vc.v3d);
 
-			ED_transform_snap_object_project_view3d_mixed(
+			ED_transform_snap_object_project_view3d(
 			        snap_context,
-			        SCE_SELECT_FACE,
+			        SCE_SNAP_MODE_FACE,
 			        &(const struct SnapObjectParams){
 			            .snap_select = (vc.obedit != NULL) ? SNAP_NOT_ACTIVE : SNAP_ALL,
 			            .use_object_edit_cage = false,
diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h
index d65679e1872..8ac7dfcf9d8 100644
--- a/source/blender/editors/include/ED_transform_snap_object_context.h
+++ b/source/blender/editors/include/ED_transform_snap_object_context.h
@@ -128,12 +128,6 @@ bool ED_transform_snap_object_project_view3d(
         const float mval[2], float *dist_px,
         /* return args */
         float r_loc[3], float r_no[3]);
-bool ED_transform_snap_object_project_view3d_mixed(
-        SnapObjectContext *sctx,
-        const unsigned short snap_to_flag,
-        const struct SnapObjectParams *params,
-        const float mval_fl[2], float *dist_px,
-        float r_co[3], float r_no[3]);
 
 bool ED_transform_snap_object_project_all_view3d_ex(
         SnapObjectContext *sctx,
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 8c6e7fed49b..8438375a97f 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -373,9 +373,9 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, BMEditMesh *em)
 		if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
 			float mval[2], co_proj[3];
 			if (ED_view3d_project_float_object(ar, eve->co, mval, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
-				if (ED_transform_snap_object_project_view3d_mixed(
+				if (ED_transform_snap_object_project_view3d(
 				        snap_context,
-				        SCE_SELECT_FACE,
+				        SCE_SNAP_MODE_FACE,
 				        &(const struct SnapObjectParams){
 				            .snap_select = SNAP_NOT_ACTIVE,
 				            .use_object_edit_cage = false,
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_ruler.c b/source/blender/editors/space_view3d/view3d_manipulator_ruler.c
index f286db75129..909b5ed11ca 100644
--- a/source/blender/editors/space_view3d/view3d_manipulator_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_manipulator_ruler.c
@@ -320,9 +320,9 @@ static bool view3d_ruler_item_mousemove(
 
 			co_other = ruler_item->co[inter->co_index == 0 ? 2 : 0];
 
-			if (ED_transform_snap_object_project_view3d_mixed(
+			if (ED_transform_snap_object_project_view3d(
 			        ruler_info->snap_context,
-			        SCE_SELECT_FACE,
+			        SCE_SNAP_MODE_FACE,
 			        &(const struct SnapObjectParams){
 			            .snap_select = SNAP_ALL,
 			            .use_object_edit_cage = true,
@@ -346,9 +346,9 @@ static bool view3d_ruler_item_mousemove(
 		else if (do_snap) {
 			const float mval_fl[2] = {UNPACK2(mval)};
 
-			if (ED_transform_snap_object_project_view3d_mixed(
+			if (ED_transform_snap_object_project_view3d(
 			        ruler_info->snap_context,
-			        (SCE_SELECT_VERTEX | SCE_SELECT_EDGE | SCE_SELECT_FACE),
+			        (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE),
 			        &(const struct SnapObjectParams){
 			            .snap_select = SNAP_ALL,
 			            .use_object_edit_cage = true,
diff --git a/source/blender/editors/space_view3d/view3d_ruler.c b/source/blender/editors/space_view3d/view3d_ruler.c
index a141814d767..5b616f29c60 100644
--- a/source/blender/editors/space_view3d/view3d_ruler.c
+++ b/source/ble

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list