[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58479] trunk/blender: snap to cursor ( offset option) added for UV's too.

Campbell Barton ideasman42 at gmail.com
Sun Jul 21 18:45:38 CEST 2013


Revision: 58479
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58479
Author:   campbellbarton
Date:     2013-07-21 16:45:38 +0000 (Sun, 21 Jul 2013)
Log Message:
-----------
snap to cursor (offset option) added for UV's too.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_image.py
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_image.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_image.py	2013-07-21 16:40:34 UTC (rev 58478)
+++ trunk/blender/release/scripts/startup/bl_ui/space_image.py	2013-07-21 16:45:38 UTC (rev 58479)
@@ -232,6 +232,7 @@
 
         layout.operator("uv.snap_selected", text="Selected to Pixels").target = 'PIXELS'
         layout.operator("uv.snap_selected", text="Selected to Cursor").target = 'CURSOR'
+        layout.operator("uv.snap_selected", text="Selected to Cursor (Offset)").target = 'CURSOR_OFFSET'
         layout.operator("uv.snap_selected", text="Selected to Adjacent Unselected").target = 'ADJACENT_UNSELECTED'
 
         layout.separator()

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2013-07-21 16:40:34 UTC (rev 58478)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_ops.c	2013-07-21 16:45:38 UTC (rev 58479)
@@ -3226,7 +3226,7 @@
 
 /* ******************** snap selection operator **************** */
 
-static bool uv_snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, SpaceImage *sima)
+static bool uv_snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, const float cursor[2])
 {
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
 	BMFace *efa;
@@ -3247,7 +3247,7 @@
 		BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
 			if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
 				luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
-				copy_v2_v2(luv->uv, sima->cursor);
+				copy_v2_v2 (luv->uv, cursor);
 				change = true;
 			}
 		}
@@ -3256,6 +3256,36 @@
 	return change;
 }
 
+static bool uv_snap_uvs_offset(Scene *scene, Image *ima, Object *obedit, const float offset[2])
+{
+	BMEditMesh *em = BKE_editmesh_from_object(obedit);
+	BMFace *efa;
+	BMLoop *l;
+	BMIter iter, liter;
+	MTexPoly *tface;
+	MLoopUV *luv;
+	bool change = false;
+
+	const int cd_loop_uv_offset  = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
+	const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
+
+	BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+		tface = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
+		if (!uvedit_face_visible_test(scene, ima, efa, tface))
+			continue;
+
+		BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
+			if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
+				luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
+				add_v2_v2(luv->uv, offset);
+				change = true;
+			}
+		}
+	}
+
+	return change;
+}
+
 static int uv_snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obedit)
 {
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
@@ -3365,9 +3395,19 @@
 			change = uv_snap_uvs_to_pixels(sima, scene, obedit);
 			break;
 		case 1:
-			change = uv_snap_uvs_to_cursor(scene, ima, obedit, sima);
+			change = uv_snap_uvs_to_cursor(scene, ima, obedit, sima->cursor);
 			break;
 		case 2:
+		{
+			float center[2];
+			if (uvedit_center(scene, ima, obedit, center, sima->around)) {
+				float offset[2];
+				sub_v2_v2v2(offset, sima->cursor, center);
+				change = uv_snap_uvs_offset(scene, ima, obedit, offset);
+			}
+			break;
+		}
+		case 3:
 			change = uv_snap_uvs_to_adjacent_unselected(scene, ima, obedit);
 			break;
 	}
@@ -3387,7 +3427,8 @@
 	static EnumPropertyItem target_items[] = {
 		{0, "PIXELS", 0, "Pixels", ""},
 		{1, "CURSOR", 0, "Cursor", ""},
-		{2, "ADJACENT_UNSELECTED", 0, "Adjacent Unselected", ""},
+		{2, "CURSOR_OFFSET", 0, "Cursor (Offset)", ""},
+		{3, "ADJACENT_UNSELECTED", 0, "Adjacent Unselected", ""},
 		{0, NULL, 0, NULL, NULL}};
 
 	/* identifiers */




More information about the Bf-blender-cvs mailing list