Revision: 23547
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23547
Author:   theeth
Date:     2009-09-28 21:49:36 +0200 (Mon, 28 Sep 2009)

Log Message:
-----------
Adding back more functionalities for transform orientations.

Create new orientation is now Ctrl-Alt-Space (Alt-Space is select orientation 
and the old ctrl-shift-c is taken by add constraints).

New orientation panel in 3d view sidebar (nkey) has operator buttons for 
select, create and delete. Eventually, this should become a list.

Note that orientation operators are missing notifiers to properly redraw the 3d 
view and its header properly.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_view3d.py
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_manipulator.c
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/editors/transform/transform_orientations.c

Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py    2009-09-28 19:40:50 UTC 
(rev 23546)
+++ trunk/blender/release/scripts/ui/space_view3d.py    2009-09-28 19:49:36 UTC 
(rev 23547)
@@ -1285,6 +1285,26 @@
                        col.itemR(bg, "offset_x", text="X")
                        col.itemR(bg, "offset_y", text="Y")
 
+class VIEW3D_PT_transform_orientations(bpy.types.Panel):
+       __space_type__ = 'VIEW_3D'
+       __region_type__ = 'UI'
+       __label__ = "Transform Orientations"
+       __default_closed__ = True
+
+       def poll(self, context):
+               view = context.space_data
+               return (view)
+
+       def draw(self, context):
+               layout = self.layout
+               
+               view = context.space_data
+
+               col = layout.column()
+               col.itemO("TFM_OT_select_orientation", text="Select")
+               col.itemO("TFM_OT_create_orientation", text="Create")
+               col.itemO("TFM_OT_delete_orientation", text="Delete")
+                       
 bpy.types.register(VIEW3D_HT_header) # Header
 
 bpy.types.register(VIEW3D_MT_view) #View Menus
@@ -1360,3 +1380,4 @@
 bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
 bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
 bpy.types.register(VIEW3D_PT_background_image)
+bpy.types.register(VIEW3D_PT_transform_orientations)
\ No newline at end of file

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h 2009-09-28 
19:40:50 UTC (rev 23546)
+++ trunk/blender/source/blender/editors/include/ED_transform.h 2009-09-28 
19:49:36 UTC (rev 23547)
@@ -111,10 +111,12 @@
 
 struct TransformOrientation;
 struct bContext;
+struct ReportList;
 
 void BIF_clearTransformOrientation(struct bContext *C);
 void BIF_removeTransformOrientation(struct bContext *C, struct 
TransformOrientation *ts);
-void BIF_manageTransformOrientation(struct bContext *C, int confirm, int set);
+void BIF_removeTransformOrientationIndex(struct bContext *C, int index);
+void BIF_createTransformOrientation(struct bContext *C, struct ReportList 
*reports, char *name, int use, int overwrite);
 int BIF_menuselectTransformOrientation(void);
 void BIF_selectTransformOrientation(struct bContext *C, struct 
TransformOrientation *ts);
 void BIF_selectTransformOrientationValue(struct bContext *C, int orientation);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c  
2009-09-28 19:40:50 UTC (rev 23546)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c  
2009-09-28 19:49:36 UTC (rev 23547)
@@ -886,7 +886,7 @@
                }
                break;
        case B_TRANSFORMSPACEADD:
-               BIF_manageTransformOrientation(C, 1, 0);
+               BIF_createTransformOrientation(C, NULL, "", 1, 0);
                break;
        case B_TRANSFORMSPACECLEAR:
                BIF_clearTransformOrientation(C);

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h  2009-09-28 
19:40:50 UTC (rev 23546)
+++ trunk/blender/source/blender/editors/transform/transform.h  2009-09-28 
19:49:36 UTC (rev 23547)
@@ -38,6 +38,7 @@
 
 struct TransInfo;
 struct TransData;
+struct TransformOrientation;
 struct TransSnap;
 struct NumInput;
 struct Object;
@@ -54,6 +55,7 @@
 struct wmEvent;
 struct wmTimer;
 struct ARegion;
+struct ReportList;
 
 typedef struct NDofInput {
        int             flag;
@@ -663,19 +665,18 @@
 
 void initTransformOrientation(struct bContext *C, TransInfo *t);
 
-int manageObjectSpace(struct bContext *C, int confirm, int set);
-int manageMeshSpace(struct bContext *C, int confirm, int set);
-int manageBoneSpace(struct bContext *C, int confirm, int set);
+struct TransformOrientation *createObjectSpace(struct bContext *C, struct 
ReportList *reports, char *name, int overwrite);
+struct TransformOrientation *createMeshSpace(struct bContext *C, struct 
ReportList *reports, char *name, int overwrite);
+struct TransformOrientation *createBoneSpace(struct bContext *C, struct 
ReportList *reports, char *name, int overwrite);
 
 /* Those two fill in mat and return non-zero on success */
 int createSpaceNormal(float mat[3][3], float normal[3]);
 int createSpaceNormalTangent(float mat[3][3], float normal[3], float 
tangent[3]);
 
-int addMatrixSpace(struct bContext *C, float mat[3][3], char name[]);
+struct TransformOrientation *addMatrixSpace(struct bContext *C, float 
mat[3][3], char name[], int overwrite);
 int addObjectSpace(struct bContext *C, struct Object *ob);
-void applyTransformOrientation(const struct bContext *C, TransInfo *t);
+void applyTransformOrientation(const struct bContext *C, float mat[3][3], char 
*name);
 
-
 #define ORIENTATION_NONE       0
 #define ORIENTATION_NORMAL     1
 #define ORIENTATION_VERT       2

Modified: trunk/blender/source/blender/editors/transform/transform_manipulator.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_manipulator.c      
2009-09-28 19:40:50 UTC (rev 23546)
+++ trunk/blender/source/blender/editors/transform/transform_manipulator.c      
2009-09-28 19:49:36 UTC (rev 23547)
@@ -412,6 +412,9 @@
        if(ob && totsel) {
 
                switch(v3d->twmode) {
+               
+               case V3D_MANIP_GLOBAL:
+                       break; /* nothing to do */
 
                case V3D_MANIP_NORMAL:
                        if(obedit || ob->mode & OB_MODE_POSE) {
@@ -473,8 +476,12 @@
                        }
                        break;
                default: /* V3D_MANIP_CUSTOM */
-                       // XXX                  applyTransformOrientation(C, t);
-                       break;
+                       {
+                               float mat[3][3];
+                               applyTransformOrientation(C, mat, NULL);
+                               Mat4CpyMat3(rv3d->twmat, mat);
+                               break;
+                       }
                }
 
        }

Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c      
2009-09-28 19:40:50 UTC (rev 23546)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c      
2009-09-28 19:49:36 UTC (rev 23547)
@@ -152,8 +152,9 @@
 
        /* identifiers */
        ot->name   = "Select Orientation";
-       ot->description= "Select orientation type.";
+       ot->description= "Select transformation orientation.";
        ot->idname = "TFM_OT_select_orientation";
+       ot->flag   = OPTYPE_UNDO;
 
        /* api callbacks */
        ot->invoke = select_orientation_invoke;
@@ -164,6 +165,92 @@
        RNA_def_enum_funcs(prop, select_orientation_itemf);
 }
 
+
+static int delete_orientation_exec(bContext *C, wmOperator *op)
+{
+       View3D *v3d = CTX_wm_view3d(C);
+       int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
+
+       BIF_removeTransformOrientationIndex(C, selected_index);
+
+       return OPERATOR_FINISHED;
+}
+
+static int delete_orientation_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
+{
+       return delete_orientation_exec(C, op);
+}
+
+static int delete_orientation_poll(bContext *C)
+{
+       int selected_index = -1;
+       View3D *v3d = CTX_wm_view3d(C);
+       
+       if (ED_operator_areaactive(C) == 0)
+               return 0;
+       
+       
+       if(v3d) {
+               selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
+       }
+       
+       return selected_index >= 0;
+}
+
+void TFM_OT_delete_orientation(struct wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name   = "Delete Orientation";
+       ot->description= "Delete transformation orientation.";
+       ot->idname = "TFM_OT_delete_orientation";
+       ot->flag   = OPTYPE_UNDO;
+
+       /* api callbacks */
+       ot->invoke = delete_orientation_invoke;
+       ot->exec   = delete_orientation_exec;
+       ot->poll   = delete_orientation_poll;
+}
+
+static int create_orientation_exec(bContext *C, wmOperator *op)
+{
+       char name[36];
+       int use = RNA_boolean_get(op->ptr, "use");
+       int overwrite = RNA_boolean_get(op->ptr, "overwrite");
+       
+       RNA_string_get(op->ptr, "name", name);
+
+       BIF_createTransformOrientation(C, op->reports, name, use, overwrite);
+
+       /* Do we need more refined tags? */
+       WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
+       
+       return OPERATOR_FINISHED;
+}
+
+static int create_orientation_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
+{
+       return create_orientation_exec(C, op);
+}
+
+void TFM_OT_create_orientation(struct wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name   = "Create Orientation";
+       ot->description= "Create transformation orientation from selection.";
+       ot->idname = "TFM_OT_create_orientation";
+       ot->flag   = OPTYPE_REGISTER|OPTYPE_UNDO;
+
+       /* api callbacks */
+       ot->invoke = create_orientation_invoke;
+       ot->exec   = create_orientation_exec;
+       ot->poll   = ED_operator_areaactive;
+       ot->flag   = OPTYPE_REGISTER|OPTYPE_UNDO;
+
+       RNA_def_string(ot->srna, "name", "", 35, "Name", "Text to insert at the 
cursor position.");
+       RNA_def_boolean(ot->srna, "use", 0, "Use after creation", "Select 
orientation after its creation");
+       RNA_def_boolean(ot->srna, "overwrite", 0, "Overwrite previous", 
"Overwrite previously created orientation with same name");
+}
+
 static void transformops_exit(bContext *C, wmOperator *op)
 {
        saveTransform(C, op->customdata, op);
@@ -643,6 +730,8 @@
        WM_operatortype_append(TFM_OT_edge_slide);
 
        WM_operatortype_append(TFM_OT_select_orientation);
+       WM_operatortype_append(TFM_OT_create_orientation);
+       WM_operatortype_append(TFM_OT_delete_orientation);
 }
 
 void transform_keymap_for_space(struct wmWindowManager *wm, struct wmKeyMap 
*keymap, int spaceid)
@@ -675,6 +764,9 @@
 
                        km = WM_keymap_add_item(keymap, 
"TFM_OT_select_orientation", SPACEKEY, KM_PRESS, KM_ALT, 0);
 
+                       km = WM_keymap_add_item(keymap, 
"TFM_OT_create_orientation", SPACEKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
+                       RNA_boolean_set(km->ptr, "use", 1);
+
                        break;
                case SPACE_ACTION:
                        km= WM_keymap_add_item(keymap, "TFM_OT_transform", 
GKEY, KM_PRESS, 0, 0);

Modified: 
trunk/blender/source/blender/editors/transform/transform_orientations.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_orientations.c     
2009-09-28 19:40:50 UTC (rev 23546)
+++ trunk/blender/source/blender/editors/transform/transform_orientations.c     
2009-09-28 19:49:36 UTC (rev 23547)
@@ -23,6 +23,7 @@
  */
 
 #include <string.h>
+#include <ctype.h>
 
 #include "MEM_guardedalloc.h"
 
@@ -43,6 +44,7 @@
 #include "BKE_utildefines.h"
 #include "BKE_armature.h"
 #include "BKE_context.h"
+#include "BKE_report.h"
 
 #include "BLI_arithb.h"
 #include "BLI_blenlib.h"
@@ -67,108 +69,131 @@
 
 void BIF_clearTransformOrientation(bContext *C)
 {

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to