[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61170] trunk/blender/source/blender: True grid snapping for nodes: This snaps nodes to the actual background grid instead of using incremental offset (which is not useful for nodes).

Lukas Toenne lukas.toenne at googlemail.com
Wed Nov 6 18:46:32 CET 2013


Revision: 61170
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61170
Author:   lukastoenne
Date:     2013-11-06 17:46:32 +0000 (Wed, 06 Nov 2013)
Log Message:
-----------
True grid snapping for nodes: This snaps nodes to the actual background grid instead of using incremental offset (which is not useful for nodes). Increment snapping has been disabled for nodes to avoid
confusion, grid snap is now the default as it seems to be the most wanted and easy to use mode.

Absolute grid snapping happens in a somewhat generic function 'applyGridAbsolute', which could also be used for objects and other transforms later on. It is conceptually similar to the 'project' snapping
option, in that it calculates a delta vector for each element on top of the overall transform, which places each node on the grid.

Node transform now uses the top-left node corner for TransformData->loc. The transform center is still the average of node centers, so that scaling and rotation works nicely.

snapGrid*** functions have been renamed to snapGridIncrement*** to distinguish better between incremental and absolute grid snapping.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/include/ED_node.h
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_constraints.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_snap.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2013-11-06 17:46:32 UTC (rev 61170)
@@ -504,6 +504,8 @@
 	sce->toolsettings->normalsize = 0.1;
 	sce->toolsettings->autokey_mode = U.autokey_mode;
 
+	sce->toolsettings->snap_node_mode = SCE_SNAP_MODE_GRID;
+
 	sce->toolsettings->skgen_resolution = 100;
 	sce->toolsettings->skgen_threshold_internal     = 0.01f;
 	sce->toolsettings->skgen_threshold_external     = 0.01f;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2013-11-06 17:46:32 UTC (rev 61170)
@@ -9818,6 +9818,12 @@
 				scene->gm.matmode = GAME_MAT_MULTITEX;
 			}
 		}
+
+		/* 'Increment' mode disabled for nodes, use true grid snapping instead */
+		for (scene = main->scene.first; scene; scene = scene->id.next) {
+			if (scene->toolsettings->snap_node_mode == SCE_SNAP_MODE_INCREMENT)
+				scene->toolsettings->snap_node_mode = SCE_SNAP_MODE_GRID;
+		}
 	}
 
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */

Modified: trunk/blender/source/blender/editors/include/ED_node.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_node.h	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/editors/include/ED_node.h	2013-11-06 17:46:32 UTC (rev 61170)
@@ -54,6 +54,8 @@
 	NODE_RIGHT  = 8
 } NodeBorder;
 
+#define NODE_GRID_STEPS     5
+
 /* space_node.c */
 int ED_node_tree_path_length(struct SpaceNode *snode);
 void ED_node_tree_path_get(struct SpaceNode *snode, char *value);
@@ -81,6 +83,7 @@
 void ED_node_tag_update_id(struct ID *id);
 void ED_node_tag_update_nodetree(struct Main *bmain, struct bNodeTree *ntree);
 void ED_node_sort(struct bNodeTree *ntree);
+float ED_node_grid_size(void);
 
 /* node_relationships.c */
 void ED_node_link_intersect_test(struct ScrArea *sa, int test);

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2013-11-06 17:46:32 UTC (rev 61170)
@@ -72,6 +72,11 @@
 /* XXX interface.h */
 extern void ui_dropshadow(const rctf *rct, float radius, float aspect, float alpha, int select);
 
+float ED_node_grid_size(void)
+{
+	return U.widget_unit;
+}
+
 void ED_node_tree_update(const bContext *C)
 {
 	SpaceNode *snode = CTX_wm_space_node(C);
@@ -1325,7 +1330,7 @@
 			snode_setup_v2d(snode, ar, center);
 			
 			/* grid, uses theme color based on node path depth */
-			UI_view2d_multi_grid_draw(v2d, (depth > 0 ? TH_NODE_GROUP : TH_BACK), U.widget_unit, 5, 2);
+			UI_view2d_multi_grid_draw(v2d, (depth > 0 ? TH_NODE_GROUP : TH_BACK), ED_node_grid_size(), NODE_GRID_STEPS, 2);
 			
 			/* backdrop */
 			draw_nodespace_back_pix(C, ar, snode, path->parent_key);
@@ -1350,7 +1355,7 @@
 	}
 	else {
 		/* default grid */
-		UI_view2d_multi_grid_draw(v2d, TH_BACK, U.widget_unit, 5, 2);
+		UI_view2d_multi_grid_draw(v2d, TH_BACK, ED_node_grid_size(), NODE_GRID_STEPS, 2);
 		
 		/* backdrop */
 		draw_nodespace_back_pix(C, ar, snode, NODE_INSTANCE_KEY_NONE);

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/editors/transform/transform.c	2013-11-06 17:46:32 UTC (rev 61170)
@@ -82,6 +82,7 @@
 #include "ED_mesh.h"
 #include "ED_clip.h"
 #include "ED_mask.h"
+#include "ED_node.h"
 
 #include "WM_types.h"
 #include "WM_api.h"
@@ -2778,7 +2779,7 @@
 		const float radius_snap = 0.1f;
 		const float snap_hack = (t->snap[1] * data->warp_init_dist) / radius_snap;
 		values.scale *= snap_hack;
-		snapGrid(t, values.vector);
+		snapGridIncrement(t, values.vector);
 		values.scale /= snap_hack;
 	}
 #endif
@@ -2950,7 +2951,7 @@
 	
 	value = t->values[0];
 	
-	snapGrid(t, &value);
+	snapGridIncrement(t, &value);
 	
 	applyNumInput(&t->num, &value);
 	
@@ -3238,7 +3239,7 @@
 	
 	size[0] = size[1] = size[2] = ratio;
 	
-	snapGrid(t, size);
+	snapGridIncrement(t, size);
 	
 	if (hasNumInput(&t->num)) {
 		applyNumInput(&t->num, size);
@@ -3340,7 +3341,7 @@
 	ratio = t->values[0];
 	size[0] = size[1] = size[2] = ratio;
 	
-	snapGrid(t, size);
+	snapGridIncrement(t, size);
 	
 	if (hasNumInput(&t->num)) {
 		applyNumInput(&t->num, size);
@@ -3438,7 +3439,7 @@
 	
 	ratio = t->values[0];
 	
-	snapGrid(t, &ratio);
+	snapGridIncrement(t, &ratio);
 	
 	applyNumInput(&t->num, &ratio);
 	
@@ -3789,7 +3790,7 @@
 
 	final = t->values[0];
 
-	snapGrid(t, &final);
+	snapGridIncrement(t, &final);
 
 	if ((t->con.mode & CON_APPLY) && t->con.applyRot) {
 		t->con.applyRot(t, NULL, t->axis, NULL);
@@ -3902,7 +3903,7 @@
 	phi[0] = t->values[0];
 	phi[1] = t->values[1];
 
-	snapGrid(t, phi);
+	snapGridIncrement(t, phi);
 
 	if (hasNumInput(&t->num)) {
 		char c[NUM_STR_REP_LEN * 2];
@@ -3981,8 +3982,8 @@
 	}
 	else if (t->spacetype == SPACE_NODE) {
 		t->snap[0] = 0.0f;
-		t->snap[1] = 125.0f;
-		t->snap[2] = 25.0f;
+		t->snap[1] = ED_node_grid_size() * NODE_GRID_STEPS;
+		t->snap[2] = ED_node_grid_size();
 	}
 	else {
 		t->snap[0] = 0.0f;
@@ -4162,7 +4163,7 @@
 		headerTranslation(t, pvec, str);
 	}
 	else {
-		snapGrid(t, t->values);
+		snapGridIncrement(t, t->values);
 		applyNumInput(&t->num, t->values);
 		if (hasNumInput(&t->num)) {
 			removeAspectRatio(t, t->values);
@@ -4234,7 +4235,7 @@
 
 	distance = -t->values[0];
 
-	snapGrid(t, &distance);
+	snapGridIncrement(t, &distance);
 
 	applyNumInput(&t->num, &distance);
 
@@ -4327,7 +4328,7 @@
 
 	final = t->values[0];
 
-	snapGrid(t, &final);
+	snapGridIncrement(t, &final);
 
 	if (hasNumInput(&t->num)) {
 		char c[NUM_STR_REP_LEN];
@@ -4402,7 +4403,7 @@
 
 	ratio = t->values[0];
 
-	snapGrid(t, &ratio);
+	snapGridIncrement(t, &ratio);
 
 	applyNumInput(&t->num, &ratio);
 
@@ -4475,7 +4476,7 @@
 
 	ratio = t->values[0];
 
-	snapGrid(t, &ratio);
+	snapGridIncrement(t, &ratio);
 
 	applyNumInput(&t->num, &ratio);
 
@@ -4566,7 +4567,7 @@
 
 	distance = t->values[0];
 
-	snapGrid(t, &distance);
+	snapGridIncrement(t, &distance);
 
 	applyNumInput(&t->num, &distance);
 
@@ -4658,7 +4659,7 @@
 	weight -= 1.0f;
 	if (weight > 1.0f) weight = 1.0f;
 
-	snapGrid(t, &weight);
+	snapGridIncrement(t, &weight);
 
 	applyNumInput(&t->num, &weight);
 
@@ -4735,7 +4736,7 @@
 	crease -= 1.0f;
 	if (crease > 1.0f) crease = 1.0f;
 
-	snapGrid(t, &crease);
+	snapGridIncrement(t, &crease);
 
 	applyNumInput(&t->num, &crease);
 
@@ -4868,7 +4869,7 @@
 	
 	size[0] = size[1] = size[2] = ratio;
 	
-	snapGrid(t, size);
+	snapGridIncrement(t, size);
 	
 	if (hasNumInput(&t->num)) {
 		applyNumInput(&t->num, size);
@@ -4935,7 +4936,7 @@
 	
 	ratio = t->values[0];
 	
-	snapGrid(t, &ratio);
+	snapGridIncrement(t, &ratio);
 	
 	applyNumInput(&t->num, &ratio);
 	
@@ -6066,7 +6067,7 @@
 
 	final = t->values[0];
 
-	snapGrid(t, &final);
+	snapGridIncrement(t, &final);
 
 	/* only do this so out of range values are not displayed */
 	CLAMP(final, -1.0f, 1.0f);
@@ -6574,7 +6575,7 @@
 
 	final = t->values[0];
 
-	snapGrid(t, &final);
+	snapGridIncrement(t, &final);
 
 	/* only do this so out of range values are not displayed */
 	if (is_constrained) {
@@ -6643,7 +6644,7 @@
 
 	final = t->values[0];
 
-	snapGrid(t, &final);
+	snapGridIncrement(t, &final);
 
 	if (hasNumInput(&t->num)) {
 		char c[NUM_STR_REP_LEN];
@@ -6716,7 +6717,7 @@
 		time = (float)(t->center2d[0] - mval[0]) * fac;
 	}
 
-	snapGrid(t, &time);
+	snapGridIncrement(t, &time);
 
 	applyNumInput(&t->num, &time);
 
@@ -6983,7 +6984,7 @@
 		copy_v3_v3(t->values, tvec);
 	}
 	else {
-		snapGrid(t, t->values);
+		snapGridIncrement(t, t->values);
 		applyNumInput(&t->num, t->values);
 	}
 

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/editors/transform/transform.h	2013-11-06 17:46:32 UTC (rev 61170)
@@ -566,14 +566,15 @@
 	SMALL_GEARS	= 2
 } GearsType;
 
-void snapGrid(TransInfo *t, float *val);
-void snapGridAction(TransInfo *t, float *val, GearsType action);
+void snapGridIncrement(TransInfo *t, float *val);
+void snapGridIncrementAction(TransInfo *t, float *val, GearsType action);
 
 bool activeSnap(TransInfo *t);
 bool validSnap(TransInfo *t);
 
 void initSnapping(struct TransInfo *t, struct wmOperator *op);
 void applyProject(TransInfo *t);
+void applyGridAbsolute(TransInfo *t);
 void applySnapping(TransInfo *t, float *vec);
 void resetSnapping(TransInfo *t);
 eRedrawFlag handleSnapping(TransInfo *t, const struct wmEvent *event);

Modified: trunk/blender/source/blender/editors/transform/transform_constraints.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_constraints.c	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/editors/transform/transform_constraints.c	2013-11-06 17:46:32 UTC (rev 61170)
@@ -135,7 +135,7 @@
 
 	mul_m3_v3(t->con.imtx, vec);
 
-	snapGrid(t, vec);
+	snapGridIncrement(t, vec);
 
 	if (t->num.flag & T_NULL_ONE) {
 		if (!(t->con.mode & CON_AXIS0))

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2013-11-06 15:46:57 UTC (rev 61169)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2013-11-06 17:46:32 UTC (rev 61170)
@@ -2381,16 +2381,16 @@
 	int a;
 	TransData *td;
 	TransData2D *td2d;
-
+	
+	applyGridAbsolute(t);
+	
 	/* flush to 2d vector from internally used 3d vector */
 	for (a = 0, td = t->data, td2d = t->data2d; a < t->total; a++, td++, td2d++) {
 		bNode *node = td->extra;
-		float vec[2];
 		

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list