[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44798] trunk/blender: [#30373] Which part to snap in volume snapping is removed

Martin Poirier theeth at yahoo.com
Sat Mar 10 22:40:42 CET 2012


Revision: 44798
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44798
Author:   theeth
Date:     2012-03-10 21:40:35 +0000 (Sat, 10 Mar 2012)
Log Message:
-----------
[#30373] Which part to snap in volume snapping is removed

By Bug reported by Pep Ribal

Also fixed an object mode bug with volume snapping and made it compatible with the edit mode "Snap on self" option

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/source/blender/editors/armature/editarmature_sketch.c
    trunk/blender/source/blender/editors/include/ED_numinput.h
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/transform/transform_snap.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2012-03-10 20:41:19 UTC (rev 44797)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2012-03-10 21:40:35 UTC (rev 44798)
@@ -88,10 +88,10 @@
             row = layout.row(align=True)
             row.prop(toolsettings, "use_snap", text="")
             row.prop(toolsettings, "snap_element", text="", icon_only=True)
-            if snap_element not in {'INCREMENT', 'VOLUME'}:
+            if snap_element != 'INCREMENT':
                 row.prop(toolsettings, "snap_target", text="")
                 if obj:
-                    if obj.mode == 'OBJECT':
+                    if obj.mode == 'OBJECT' and snap_element != 'VOLUME':
                         row.prop(toolsettings, "use_snap_align_rotation", text="")
                     elif obj.mode == 'EDIT':
                         row.prop(toolsettings, "use_snap_self", text="")

Modified: trunk/blender/source/blender/editors/armature/editarmature_sketch.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature_sketch.c	2012-03-10 20:41:19 UTC (rev 44797)
+++ trunk/blender/source/blender/editors/armature/editarmature_sketch.c	2012-03-10 21:40:35 UTC (rev 44798)
@@ -1079,7 +1079,7 @@
 
 		mvalf[0]= dd->mval[0];
 		mvalf[1]= dd->mval[1];
-		peelObjectsContext(C, &sketch->depth_peels, mvalf);
+		peelObjectsContext(C, &sketch->depth_peels, mvalf, SNAP_ALL);
 
 		if (stk->nb_points > 0 && stk->points[stk->nb_points - 1].type == PT_CONTINUOUS)
 		{

Modified: trunk/blender/source/blender/editors/include/ED_numinput.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_numinput.h	2012-03-10 20:41:19 UTC (rev 44797)
+++ trunk/blender/source/blender/editors/include/ED_numinput.h	2012-03-10 21:40:35 UTC (rev 44798)
@@ -28,6 +28,15 @@
 #define __ED_NUMINPUT_H__
 
 
+/*
+	The ctrl value has different meaning:
+		0			: No value has been typed
+
+		otherwise, |value| - 1 is where the cursor is located after the period
+		Positive	: number is positive
+		Negative	: number is negative
+*/
+
 typedef struct NumInput {
 	short  idx;
 	short  idx_max;

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2012-03-10 20:41:19 UTC (rev 44797)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2012-03-10 21:40:35 UTC (rev 44798)
@@ -175,8 +175,8 @@
 
 #define SNAP_MIN_DISTANCE 30
 
-int peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, const float mval[2]);
-int peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, const float mval[2]);
+int peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, const float mval[2], SnapMode mode);
+int peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, const float mval[2], SnapMode mode);
 int snapObjectsTransform(struct TransInfo *t, const float mval[2], int *r_dist, float r_loc[3], float r_no[3], SnapMode mode);
 int snapObjectsContext(struct bContext *C, const float mval[2], int *r_dist, float r_loc[3], float r_no[3], SnapMode mode);
 

Modified: trunk/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_snap.c	2012-03-10 20:41:19 UTC (rev 44797)
+++ trunk/blender/source/blender/editors/transform/transform_snap.c	2012-03-10 21:40:35 UTC (rev 44798)
@@ -785,7 +785,7 @@
 			
 			depth_peels.first = depth_peels.last = NULL;
 			
-			peelObjectsTransForm(t, &depth_peels, mval);
+			peelObjectsTransForm(t, &depth_peels, mval, t->tsnap.modeSelect);
 			
 //			if (LAST_SNAP_POINT_VALID)
 //			{
@@ -1862,7 +1862,7 @@
 	return retval;
 } 
 
-static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, ListBase *depth_peels, const float mval[2])
+static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, ListBase *depth_peels, const float mval[2], SnapMode mode)
 {
 	Base *base;
 	int retval = 0;
@@ -1874,6 +1874,7 @@
 		if ( BASE_SELECTABLE(v3d, base) ) {
 			Object *ob = base->object;
 			
+#if 0 //BMESH_TODO
 			if (ob->transflag & OB_DUPLI) {
 				DupliObject *dupli_ob;
 				ListBase *lb = object_duplilist(scene, ob);
@@ -1883,7 +1884,6 @@
 					Object *dob = dupli_ob->ob;
 					
 					if (dob->type == OB_MESH) {
-#if 0 //BMESH_TODO
 						EditMesh *em;
 						DerivedMesh *dm = NULL;
 						int val;
@@ -1903,33 +1903,32 @@
 						retval = retval || val;
 						
 						dm->release(dm);
-#endif
 					}
 				}
 				
 				free_object_duplilist(lb);
 			}
+#endif
 			
 			if (ob->type == OB_MESH) {
-				BMEditMesh *em;
-				DerivedMesh *dm = NULL;
-				int val;
+				int val = 0;
 
-				if (ob != obedit) {
-					dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+				if (ob != obedit && ((mode == SNAP_NOT_SELECTED && (base->flag & (SELECT|BA_WAS_SEL)) == 0) || ELEM(mode, SNAP_ALL, SNAP_NOT_OBEDIT))) {
+					DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
 					
 					val = peelDerivedMesh(ob, dm, ob->obmat, ray_start, ray_normal, mval, depth_peels);
+					dm->release(dm);
 				}
-				else {
-					em = BMEdit_FromObject(ob);
-					dm = editbmesh_get_derived_cage(scene, obedit, em, CD_MASK_BAREMESH);
+				else if (ob == obedit && mode != SNAP_NOT_OBEDIT) {
+					BMEditMesh *em = BMEdit_FromObject(ob);
+					DerivedMesh *dm = editbmesh_get_derived_cage(scene, obedit, em, CD_MASK_BAREMESH);
 					
 					val = peelDerivedMesh(ob, dm, ob->obmat, ray_start, ray_normal, mval, depth_peels);
+					dm->release(dm);
 				}
 					
 				retval = retval || val;
 				
-				dm->release(dm);
 			}
 		}
 	}
@@ -1940,17 +1939,17 @@
 	return retval;
 }
 
-int peelObjectsTransForm(TransInfo *t, ListBase *depth_peels, const float mval[2])
+int peelObjectsTransForm(TransInfo *t, ListBase *depth_peels, const float mval[2], SnapMode mode)
 {
-	return peelObjects(t->scene, t->view, t->ar, t->obedit, depth_peels, mval);
+	return peelObjects(t->scene, t->view, t->ar, t->obedit, depth_peels, mval, mode);
 }
 
-int peelObjectsContext(bContext *C, ListBase *depth_peels, const float mval[2])
+int peelObjectsContext(bContext *C, ListBase *depth_peels, const float mval[2], SnapMode mode)
 {
 	ScrArea *sa = CTX_wm_area(C);
 	View3D *v3d = sa->spacedata.first;
 
-	return peelObjects(CTX_data_scene(C), v3d, CTX_wm_region(C), CTX_data_edit_object(C), depth_peels, mval);
+	return peelObjects(CTX_data_scene(C), v3d, CTX_wm_region(C), CTX_data_edit_object(C), depth_peels, mval, mode);
 }
 
 /*================================================================*/




More information about the Bf-blender-cvs mailing list