checking for V3D_LOCAL was duplicated in transform.c, and both checks not quite correct.
authorCampbell Barton <ideasman42@gmail.com>
Mon, 18 Feb 2013 15:47:13 +0000 (15:47 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 18 Feb 2013 15:47:13 +0000 (15:47 +0000)
- When checking edimode, make sure its mesh editmode.
- Graph editor supports this option but wasn't being checked.

release/scripts/modules/bpy_extras/mesh_utils.py
source/blender/editors/transform/transform.c
source/blender/makesrna/intern/rna_space.c

index d02fd6e..f4fdfec 100644 (file)
@@ -152,8 +152,7 @@ def edge_face_count_dict(mesh):
        faces using each edge.
     :rtype: dict
     """
-    
-    #face_edge_keys = [face.edge_keys for face in ]
+
     face_edge_count = {}
     loops = mesh.loops
     edges = mesh.edges
index e5b4a6c..a8efd99 100644 (file)
@@ -104,6 +104,16 @@ static int doVertSlide(TransInfo *t, float perc);
 static void drawEdgeSlide(const struct bContext *C, TransInfo *t);
 static void drawVertSlide(const struct bContext *C, TransInfo *t);
 
+static bool transdata_check_local_center(TransInfo *t)
+{
+       return ((t->around == V3D_LOCAL) && (
+                   (t->flag & (T_OBJECT | T_POSE)) ||
+                   (t->obedit && t->obedit->type == OB_MESH && (t->settings->selectmode & (SCE_SELECT_EDGE | SCE_SELECT_FACE))) ||
+                   (t->obedit && t->obedit->type == OB_ARMATURE) ||
+                   (t->spacetype == SPACE_IPO))
+               );
+}
+
 /* ************************** SPACE DEPENDANT CODE **************************** */
 
 void setTransformViewMatrices(TransInfo *t)
@@ -3005,12 +3015,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3])
        }
        
        /* local constraint shouldn't alter center */
-       if ((t->around == V3D_LOCAL) &&
-           (   (t->flag & (T_OBJECT | T_POSE)) ||
-               ((t->flag & T_EDIT) && (t->settings->selectmode & (SCE_SELECT_EDGE | SCE_SELECT_FACE))) ||
-               (t->obedit && t->obedit->type == OB_ARMATURE))
-           )
-       {
+       if (transdata_check_local_center(t)) {
                copy_v3_v3(center, td->center);
        }
        else if (t->options & CTX_MOVIECLIP) {
@@ -3387,20 +3392,16 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
 {
        float vec[3], totmat[3][3], smat[3][3];
        float eul[3], fmat[3][3], quat[4];
-       float *center = t->center;
+       const float *center;
 
        /* local constraint shouldn't alter center */
-       if (around == V3D_LOCAL) {
-               if (    (t->flag & (T_OBJECT | T_POSE)) ||
-                       (t->settings->selectmode & (SCE_SELECT_EDGE | SCE_SELECT_FACE)) ||
-                       (t->obedit && t->obedit->type == OB_ARMATURE))
-               {
-                       center = td->center;
-               }
-
-               if (t->options & CTX_MOVIECLIP) {
-                       center = td->center;
-               }
+       if (transdata_check_local_center(t) ||
+           ((around == V3D_LOCAL) && (t->options & CTX_MOVIECLIP)))
+       {
+               center = td->center;
+       }
+       else {
+               center = t->center;
        }
 
        if (t->flag & T_POINTS) {
index a742e6d..0ab74fb 100644 (file)
@@ -2548,7 +2548,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
                {0, NULL, 0, NULL, NULL}
        };
                
-       /* this is basically the same as the one for the 3D-View, but with some entries ommitted */
+       /* this is basically the same as the one for the 3D-View, but with some entries omitted */
        static EnumPropertyItem gpivot_items[] = {
                {V3D_CENTER, "BOUNDING_BOX_CENTER", ICON_ROTATE, "Bounding Box Center", ""},
                {V3D_CURSOR, "CURSOR", ICON_CURSOR, "2D Cursor", ""},