[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13223] trunk/blender/source/blender: === Custom Transform Orientation ===

Martin Poirier theeth at yahoo.com
Sun Jan 13 19:24:09 CET 2008


Revision: 13223
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13223
Author:   theeth
Date:     2008-01-13 19:24:09 +0100 (Sun, 13 Jan 2008)

Log Message:
-----------
=== Custom Transform Orientation ===

Custom Orientations can be added with Ctrl-Shift-C (hotkey suggestions are welcomed), this adds and select the new alignment. Custom Orientations can also be added, deleted, selected from the Transform Orientations panel (View -> Transform Orientations). Standard orientations (global, local, normal, view) can also be selected from this panel.

If you plan on using only a single custom orientation and don't really need a list, I suggest you use the hotkey as it adds and selects at the same time.

Custom Orientations are save in the scene and are selected per 3D view (like normal orientation).

Adding from an object, the orientation is a normalized version of the object's orientation.
Adding from mesh data, a single element (vertex, edge, face) must be selected in its respective selection mode. Vertex orientation Z-axis is based on the normal, edge Z-axis on the edge itself (X-axis is on the XoY plane when possible, Y-axis is perpendicular to the rest). Face orientation Z-axis is the face normal, X-axis is perpendicular to the first edge, Y-axis is perpendicular to the rest.
(More logical orientations can be suggested).

I plan to add: 2 vertice (connected or not) => edge orientation , 3 vertice = face orientation

Differences from the patch:
- orientations no longer link back to the object they came from, everything is copy on creation.
- orientations are overwritten based on name (if you add an orientation with the same name as one that already exists, it overwrites the old one)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/include/BIF_space.h
    trunk/blender/source/blender/include/BIF_transform.h
    trunk/blender/source/blender/include/blendef.h
    trunk/blender/source/blender/include/butspace.h
    trunk/blender/source/blender/include/transform.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/src/drawview.c
    trunk/blender/source/blender/src/header_info.c
    trunk/blender/source/blender/src/header_view3d.c
    trunk/blender/source/blender/src/space.c
    trunk/blender/source/blender/src/transform.c
    trunk/blender/source/blender/src/transform_constraints.c
    trunk/blender/source/blender/src/transform_manipulator.c

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2008-01-13 18:24:09 UTC (rev 13223)
@@ -153,6 +153,7 @@
 	}
 	
 	BLI_freelistN(&sce->markers);
+	BLI_freelistN(&sce->transform_spaces);
 	BLI_freelistN(&sce->r.layers);
 	
 	if(sce->toolsettings){

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2008-01-13 18:24:09 UTC (rev 13223)
@@ -3457,6 +3457,7 @@
 	}
 	
 	link_list(fd, &(sce->markers));
+	link_list(fd, &(sce->transform_spaces));
 	link_list(fd, &(sce->r.layers));
 	
 	sce->nodetree= newdataadr(fd, sce->nodetree);

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2008-01-13 18:24:09 UTC (rev 13223)
@@ -1401,6 +1401,7 @@
 	MetaStack *ms;
 	Strip *strip;
 	TimeMarker *marker;
+	TransformOrientation *ts;
 	SceneRenderLayer *srl;
 	int a;
 	
@@ -1505,6 +1506,10 @@
 		for(marker= sce->markers.first; marker; marker= marker->next)
 			writestruct(wd, DATA, "TimeMarker", 1, marker);
 		
+		/* writing dynamic list of TransformOrientations to the blend file */
+		for(ts = sce->transform_spaces.first; ts; ts = ts->next)
+			writestruct(wd, DATA, "TransformOrientation", 1, ts);
+		
 		for(srl= sce->r.layers.first; srl; srl= srl->next)
 			writestruct(wd, DATA, "SceneRenderLayer", 1, srl);
 		

Modified: trunk/blender/source/blender/include/BIF_space.h
===================================================================
--- trunk/blender/source/blender/include/BIF_space.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/include/BIF_space.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -55,6 +55,7 @@
 #define VIEW3D_HANDLER_OBJECT		3
 #define VIEW3D_HANDLER_PREVIEW		4
 #define VIEW3D_HANDLER_MULTIRES         5
+#define VIEW3D_HANDLER_TRANSFORM	6
 
 /* ipo handler codes */
 #define IPO_HANDLER_PROPERTIES	20

Modified: trunk/blender/source/blender/include/BIF_transform.h
===================================================================
--- trunk/blender/source/blender/include/BIF_transform.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/include/BIF_transform.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -81,6 +81,8 @@
 
 struct TransInfo;
 struct ScrArea;
+struct Base;
+struct Scene;
 
 struct TransInfo * BIF_GetTransInfo(void);
 void BIF_setSingleAxisConstraint(float vec[3], char *text);
@@ -88,6 +90,18 @@
 void BIF_setLocalAxisConstraint(char axis, char *text);
 void BIF_setLocalLockConstraint(char axis, char *text);
 
+struct TransformOrientation;
+
+void BIF_clearTransformOrientation(void);
+void BIF_removeTransformOrientation(struct TransformOrientation *ts);
+void BIF_manageTransformOrientation(int confirm, int set);
+int BIF_menuselectTransformOrientation(void);
+void BIF_selectTransformOrientation(struct TransformOrientation *ts);
+void BIF_selectTransformOrientationFromIndex(int index);
+
+char * BIF_menustringTransformOrientation(); /* the returned value was allocated and needs to be freed after use */
+int BIF_countTransformOrientation();
+
 /* Drawing callbacks */
 void BIF_drawConstraint(void);
 void BIF_drawPropCircle(void);

Modified: trunk/blender/source/blender/include/blendef.h
===================================================================
--- trunk/blender/source/blender/include/blendef.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/include/blendef.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -237,6 +237,7 @@
 #define B_SEL_PATH		166
 #define B_SEL_POINT		167
 #define B_SEL_END		168
+#define B_MAN_MODE		169
 
 /* IPO: 200 */
 #define B_IPOHOME		201

Modified: trunk/blender/source/blender/include/butspace.h
===================================================================
--- trunk/blender/source/blender/include/butspace.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/include/butspace.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -170,6 +170,8 @@
 #define B_ARMATUREPANEL3 	1013
 #define B_OBJECTPANELSCALE 	1014
 #define B_OBJECTPANELDIMS 	1015
+#define B_TRANSFORMSPACEADD	1016
+#define B_TRANSFORMSPACECLEAR	1017
 
 /* *********************** */
 #define B_LAMPBUTS		1200

Modified: trunk/blender/source/blender/include/transform.h
===================================================================
--- trunk/blender/source/blender/include/transform.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/include/transform.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -463,6 +463,15 @@
 void applyNumInput(NumInput *n, float *vec);
 char handleNumInput(NumInput *n, unsigned short event);
 
+/*********************** TransSpace ******************************/
+
+int manageObjectSpace(int confirm, int set);
+int manageMeshSpace(int confirm, int set);
+
+int addMatrixSpace(float mat[3][3], char name[]);
+int addObjectSpace(struct Object *ob);
+void applyTransformOrientation(void);
+
 #endif
 
 

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -333,6 +333,12 @@
 	int draw_timed;
 } ParticleEditSettings;
 
+typedef struct TransformOrientation {
+	struct TransformOrientation *next, *prev;
+	char name[36];
+	float mat[3][3];
+} TransformOrientation;
+
 typedef struct ToolSettings {
 	/* Subdivide Settings */
 	short cornertype;
@@ -366,7 +372,7 @@
 	/* Auto-IK */
 	short autoik_chainlen;
 
-	/* Image Paint (8 byte aligned please!) */
+	/* Image Paint (8 byttse aligned please!) */
 	struct ImagePaintSettings imapaint;
 
 	/* Particle Editing */
@@ -494,6 +500,7 @@
 	ScriptLink scriptlink;
 	
 	ListBase markers;
+	ListBase transform_spaces;
 	
 	short jumpframe, pad1;
 	short snap_flag, snap_target;

Modified: trunk/blender/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2008-01-13 18:24:09 UTC (rev 13223)
@@ -200,6 +200,7 @@
 #define V3D_MANIP_LOCAL			1
 #define V3D_MANIP_NORMAL		2
 #define V3D_MANIP_VIEW			3
+#define V3D_MANIP_CUSTOM		4 /* anything of value 4 or higher is custom */
 
 /* View3d->twflag */
    /* USE = user setting, DRAW = based on selection */

Modified: trunk/blender/source/blender/src/drawview.c
===================================================================
--- trunk/blender/source/blender/src/drawview.c	2008-01-13 18:13:39 UTC (rev 13222)
+++ trunk/blender/source/blender/src/drawview.c	2008-01-13 18:24:09 UTC (rev 13223)
@@ -2228,9 +2228,83 @@
 			allqueue(REDRAWVIEW3D, 1);
 		}
 		break;
+	case B_TRANSFORMSPACEADD:
+		BIF_manageTransformOrientation(1, 0);
+		allqueue(REDRAWVIEW3D, 1);
+		break;
+	case B_TRANSFORMSPACECLEAR:
+		BIF_clearTransformOrientation();
+		allqueue(REDRAWVIEW3D, 1);
 	}
 }
 
+void removeTransformOrientation_func(void *target, void *unused)
+{
+	BIF_removeTransformOrientation((TransformOrientation *) target);
+}
+
+void selectTransformOrientation_func(void *target, void *unused)
+{
+	BIF_selectTransformOrientation((TransformOrientation *) target);
+}
+
+static void view3d_panel_transform_spaces(short cntrl)
+{
+	ListBase *transform_spaces = &G.scene->transform_spaces;
+	TransformOrientation *ts = transform_spaces->first;
+	uiBlock *block;
+	uiBut *but;
+	int xco = 20, yco = 70, height = 140;
+	int index;
+
+	block= uiNewBlock(&curarea->uiblocks, "view3d_panel_transform", UI_EMBOSS, UI_HELV, curarea->win);
+	uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE  | cntrl);
+	uiSetPanelHandler(VIEW3D_HANDLER_TRANSFORM);  // for close and esc
+
+	if(uiNewPanel(curarea, block, "Transform Orientations", "View3d", 10, 230, 318, height)==0) return;
+
+	uiNewPanelHeight(block, height);
+
+	uiBlockBeginAlign(block);
+	
+	if (G.obedit)
+		uiDefBut(block, BUT, B_TRANSFORMSPACEADD, "Add", xco,120,80,20, 0, 0, 0, 0, 0, "Add the selected element as a Transform Orientation");
+	else
+		uiDefBut(block, BUT, B_TRANSFORMSPACEADD, "Add", xco,120,80,20, 0, 0, 0, 0, 0, "Add the active object as a Transform Orientation");
+
+	uiDefBut(block, BUT, B_TRANSFORMSPACECLEAR, "Clear", xco + 80,120,80,20, 0, 0, 0, 0, 0, "Removal all Transform Orientations");
+	
+	uiBlockEndAlign(block);
+
+	uiPanelPush(block);
+
+	uiBlockBeginAlign(block);
+	
+	uiDefButS(block, ROW, REDRAWHEADERS, "Global",	xco, 		90, 40,20, &G.vd->twmode, 5.0, (float)V3D_MANIP_GLOBAL,0, 0, "Global Transform Orientation");
+	uiDefButS(block, ROW, REDRAWHEADERS, "Local",	xco + 40,	90, 40,20, &G.vd->twmode, 5.0, (float)V3D_MANIP_LOCAL, 0, 0, "Local Transform Orientation");
+	uiDefButS(block, ROW, REDRAWHEADERS, "Normal",	xco + 80,	90, 40,20, &G.vd->twmode, 5.0, (float)V3D_MANIP_NORMAL,0, 0, "Normal Transform Orientation");
+	uiDefButS(block, ROW, REDRAWHEADERS, "View",		xco + 120,	90, 40,20, &G.vd->twmode, 5.0, (float)V3D_MANIP_VIEW,	0, 0, "View Transform Orientation");
+	
+	for (index = V3D_MANIP_CUSTOM, ts = transform_spaces->first ; ts ; ts = ts->next, index++) {
+
+		BIF_ThemeColor(TH_BUT_ACTION);
+		but = uiDefIconButS(block,ROW, REDRAWHEADERS, ICON_RIGHTARROW_THIN, xco,yco,XIC,YIC, &G.vd->twmode, 5.0, (float)index, 0, 0, "Use this Custom Transform Orientation");
+		uiButSetFunc(but, selectTransformOrientation_func, ts, NULL);
+		uiDefBut(block, TEX, 0, "", xco+=XIC, yco,100+XIC,20, &ts->name, 0, 30, 0, 0, "Edits the name of this Transform Orientation");
+		but = uiDefIconBut(block, BUT, REDRAWVIEW3D, ICON_X, xco+=100+XIC,yco,XIC,YIC, 0, 0, 0, 0, 0, "Deletes this Transform Orientation");
+		uiButSetFunc(but, removeTransformOrientation_func, ts, NULL);
+
+		xco = 20;
+		yco -= 25;
+	}
+	uiBlockEndAlign(block);
+
+	uiPanelPop(block);
+	

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list