diff options
author | Martin Poirier <theeth@yahoo.com> | 2012-03-11 01:40:35 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2012-03-11 01:40:35 +0400 |
commit | 67f1e83508ac1312b6b41093cb1946363ce3d0fd (patch) | |
tree | 7b412752e0cea4d243b1dd4868b066d34f952eb2 | |
parent | e09ab8883ce0e41add94058ecd4045ac5efa74c6 (diff) |
[#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
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d.py | 4 | ||||
-rw-r--r-- | source/blender/editors/armature/editarmature_sketch.c | 2 | ||||
-rw-r--r-- | source/blender/editors/include/ED_numinput.h | 9 | ||||
-rw-r--r-- | source/blender/editors/include/ED_transform.h | 4 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 33 |
5 files changed, 30 insertions, 22 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index e639300998a..f18394edd91 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -88,10 +88,10 @@ class VIEW3D_HT_header(Header): 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="") diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index 9ea731150e8..27e2d12a288 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -1079,7 +1079,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S 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) { diff --git a/source/blender/editors/include/ED_numinput.h b/source/blender/editors/include/ED_numinput.h index 2b99e52057d..e723ff73532 100644 --- a/source/blender/editors/include/ED_numinput.h +++ b/source/blender/editors/include/ED_numinput.h @@ -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; diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 4532a351c7d..f6dee351c29 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -175,8 +175,8 @@ typedef enum SnapMode #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); diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index c4e871f83c5..5713812ebd6 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -785,7 +785,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) 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 @@ static int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], 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 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L 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 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L 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 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L 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 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L 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); } /*================================================================*/ |