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);
 }
 
 /*================================================================*/

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to