[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24037] trunk/blender/source/blender: Graph Editor: Pivot Modes for Transform

Joshua Leung aligorith at gmail.com
Wed Oct 21 12:36:46 CEST 2009


Revision: 24037
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24037
Author:   aligorith
Date:     2009-10-21 12:36:46 +0200 (Wed, 21 Oct 2009)

Log Message:
-----------
Graph Editor: Pivot Modes for Transform

It is now possible to choose from 'Bounding Box' (default), '2D-Cursor', and 'Individual Centers' as the pivot point(s) that rotation/scaling is performed around.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_graph/graph_header.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/source/blender/editors/space_graph/graph_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_header.c	2009-10-21 10:11:03 UTC (rev 24036)
+++ trunk/blender/source/blender/editors/space_graph/graph_header.c	2009-10-21 10:36:46 UTC (rev 24037)
@@ -250,17 +250,30 @@
 	ED_area_tag_redraw(CTX_wm_area(C));
 }
 
+static char *garound_pup(const bContext *C)
+{
+	static char string[512];
+	char *str = string;
 
+	str += sprintf(str, "%s", "Pivot: %t"); 
+	str += sprintf(str, "%s", "|Bounding Box Center %x0"); 
+	//str += sprintf(str, "%s", "|Median Point %x3");
+	str += sprintf(str, "%s", "|2D Cursor %x1");
+	str += sprintf(str, "%s", "|Individual Centers %x2");
+	return string;
+}
+
 void graph_header_buttons(const bContext *C, ARegion *ar)
 {
+	SpaceIpo *sipo= CTX_wm_space_graph(C);
 	ScrArea *sa= CTX_wm_area(C);
-	SpaceIpo *sipo= CTX_wm_space_graph(C);
 	uiBlock *block;
 	int xco, yco= 3;
 	
 	block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
 	uiBlockSetHandleFunc(block, do_graph_buttons, NULL);
 	
+	/* standard buttosn in header - viewtype selector and menus */
 	xco= ED_area_header_standardbuttons(C, block, yco);
 	
 	if ((sa->flag & HEADER_NO_PULLDOWN)==0) {
@@ -310,6 +323,10 @@
 	}
 	xco += 98;
 	
+	/* pivot mode setting */
+	uiDefIconTextButI(block, ICONTEXTROW,B_REDR, ICON_ROTATE, garound_pup(C), xco,yco,XIC+10,YIC, &(sipo->around), 0, 3.0, 0, 0, "Rotation/Scaling Pivot");
+	xco+= XIC+10;
+	
 	/* copy + paste */
 	uiBlockBeginAlign(block);
 		uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer");

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-10-21 10:11:03 UTC (rev 24036)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-10-21 10:36:46 UTC (rev 24037)
@@ -3344,6 +3344,7 @@
 
 static void createTransGraphEditData(bContext *C, TransInfo *t)
 {
+	SpaceIpo *sipo= CTX_wm_space_graph(C);
 	Scene *scene= CTX_data_scene(C);
 	ARegion *ar= CTX_wm_region(C);
 	View2D *v2d= &ar->v2d;
@@ -3375,7 +3376,7 @@
 		/* only side on which mouse is gets transformed */
 		float xmouse, ymouse;
 		
-		UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse);
+		UI_view2d_region_to_view(v2d, t->imval[0], t->imval[1], &xmouse, &ymouse);
 		side = (xmouse > CFRA) ? 'R' : 'L'; // XXX use t->frame_side
 	}
 	else {
@@ -3403,7 +3404,7 @@
 		/* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse */
 		for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) {
 			if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) {
-				if (v2d->around == V3D_LOCAL) {
+				if (sipo->around == V3D_LOCAL) {
 					/* for local-pivot we only need to count the number of selected handles only, so that centerpoints don't
 					 * don't get moved wrong
 					 */
@@ -3482,7 +3483,7 @@
 				/* only include main vert if selected */
 				if (bezt->f2 & SELECT) {
 					/* if scaling around individuals centers, do not include keyframes */
-					if (v2d->around != V3D_LOCAL) {
+					if (sipo->around != V3D_LOCAL) {
 						/* if handles were not selected, store their selection status */
 						if (!(bezt->f1 & SELECT) && !(bezt->f3 & SELECT)) {
 							if (hdata == NULL)

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-21 10:11:03 UTC (rev 24036)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-21 10:36:46 UTC (rev 24037)
@@ -952,11 +952,17 @@
 		t->view = &ar->v2d;
 		t->around = sima->around;
 	}
+	else if(t->spacetype==SPACE_IPO) 
+	{
+		SpaceIpo *sipo= sa->spacedata.first;
+		t->view = &ar->v2d;
+		t->around = sipo->around;
+	}
 	else
 	{
 		// XXX for now, get View2D  from the active region
 		t->view = &ar->v2d;
-		
+		// XXX for now, the center point is the midpoint of the data
 		t->around = V3D_CENTER;
 	}
 	
@@ -1196,6 +1202,18 @@
 	calculateCenter2D(t);
 }
 
+void calculateCenterCursorGraph2D(TransInfo *t)
+{
+	SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first;
+	Scene *scene= t->scene;
+	
+	/* cursor is combination of current frame, and graph-editor cursor value */
+	t->center[0]= (float)(scene->r.cfra);
+	t->center[1]= sipo->cursorVal;
+	
+	calculateCenter2D(t);
+}
+
 void calculateCenterMedian(TransInfo *t)
 {
 	float partial[3] = {0.0f, 0.0f, 0.0f};
@@ -1267,6 +1285,8 @@
 	case V3D_CURSOR:
 		if(t->spacetype==SPACE_IMAGE)
 			calculateCenterCursor2D(t);
+		else if(t->spacetype==SPACE_IPO)
+			calculateCenterCursorGraph2D(t);
 		else
 			calculateCenterCursor(t);
 		break;

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2009-10-21 10:11:03 UTC (rev 24036)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2009-10-21 10:36:46 UTC (rev 24037)
@@ -104,7 +104,7 @@
 	int flag;				/* settings for Graph editor */
 	
 	float cursorVal;		/* cursor value (y-value, x-value is current frame) */
-	int pad;
+	int around;				/* pivot point for transforms */
 } SpaceIpo;
 
 typedef struct SpaceButs {

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2009-10-21 10:11:03 UTC (rev 24036)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2009-10-21 10:36:46 UTC (rev 24037)
@@ -1195,6 +1195,15 @@
 		{SIPO_MODE_ANIMATION, "FCURVES", 0, "F-Curves", ""},
 		{SIPO_MODE_DRIVERS, "DRIVERS", 0, "Drivers", ""},
 		{0, NULL, 0, NULL, NULL}};
+		
+		/* this is basically the same as the one for the 3D-View, but with some entries ommitted */
+	static EnumPropertyItem gpivot_items[] = {
+		{V3D_CENTER, "BOUNDING_BOX_CENTER", 0, "Bounding Box Center", ""},
+		{V3D_CURSOR, "CURSOR", 0, "2D Cursor", ""},
+		{V3D_LOCAL, "INDIVIDUAL_CENTERS", 0, "Individual Centers", ""},
+		//{V3D_CENTROID, "MEDIAN_POINT", 0, "Median Point", ""},
+		//{V3D_ACTIVE, "ACTIVE_ELEMENT", 0, "Active Element", ""},
+		{0, NULL, 0, NULL, NULL}};
 	
 	
 	srna= RNA_def_struct(brna, "SpaceGraphEditor", "Space");
@@ -1252,6 +1261,12 @@
 	RNA_def_property_ui_text(prop, "Cursor Y-Value", "Graph Editor 2D-Value cursor - Y-Value component");
 	RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
 	
+	prop= RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "around");
+	RNA_def_property_enum_items(prop, gpivot_items);
+	RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling.");
+	RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
+	
 	// TODO... autosnap, dopesheet?
 }
 





More information about the Bf-blender-cvs mailing list