[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49476] trunk/blender/source/blender/ editors: split node_edit.c into separate files (add, group, relationshops), was almost 5000 loc.

Campbell Barton ideasman42 at gmail.com
Wed Aug 1 21:11:18 CEST 2012


Revision: 49476
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49476
Author:   campbellbarton
Date:     2012-08-01 19:11:17 +0000 (Wed, 01 Aug 2012)
Log Message:
-----------
split node_edit.c into separate files (add, group, relationshops), was almost 5000 loc.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_node.h
    trunk/blender/source/blender/editors/space_node/CMakeLists.txt
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_intern.h

Added Paths:
-----------
    trunk/blender/source/blender/editors/space_node/node_add.c
    trunk/blender/source/blender/editors/space_node/node_group.c
    trunk/blender/source/blender/editors/space_node/node_relationships.c

Modified: trunk/blender/source/blender/editors/include/ED_node.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_node.h	2012-08-01 18:48:10 UTC (rev 49475)
+++ trunk/blender/source/blender/editors/include/ED_node.h	2012-08-01 19:11:17 UTC (rev 49476)
@@ -61,12 +61,14 @@
 void ED_node_generic_update(struct Main *bmain, struct bNodeTree *ntree, struct bNode *node);
 void ED_node_sort(struct bNodeTree *ntree);
 
+/* node_relationships.c */
+void ED_node_link_intersect_test(struct ScrArea *sa, int test);
+void ED_node_link_insert(struct ScrArea *sa);
+
 /* node_edit.c */
 void ED_node_shader_default(struct Scene *scene, struct ID *id);
 void ED_node_composit_default(struct Scene *sce);
 void ED_node_texture_default(struct Tex *tex);
-void ED_node_link_intersect_test(struct ScrArea *sa, int test);
-void ED_node_link_insert(struct ScrArea *sa);
 int  ED_node_select_check(ListBase *lb);
 void ED_node_post_apply_transform(struct bContext *C, struct bNodeTree *ntree);
 void ED_node_set_active(struct Main *bmain, struct bNodeTree *ntree, struct bNode *node);

Modified: trunk/blender/source/blender/editors/space_node/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/editors/space_node/CMakeLists.txt	2012-08-01 18:48:10 UTC (rev 49475)
+++ trunk/blender/source/blender/editors/space_node/CMakeLists.txt	2012-08-01 19:11:17 UTC (rev 49476)
@@ -42,9 +42,12 @@
 
 set(SRC
 	drawnode.c
+	node_add.c
 	node_buttons.c
 	node_draw.c
 	node_edit.c
+	node_group.c
+	node_relationships.c
 	node_header.c
 	node_ops.c
 	node_select.c

Added: trunk/blender/source/blender/editors/space_node/node_add.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_add.c	                        (rev 0)
+++ trunk/blender/source/blender/editors/space_node/node_add.c	2012-08-01 19:11:17 UTC (rev 49476)
@@ -0,0 +1,431 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): David Millan Escriva, Juho Vepsäläinen, Nathan Letwory
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_node/node_relationships.c
+ *  \ingroup spnode
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <errno.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_ID.h"
+#include "DNA_lamp_types.h"
+#include "DNA_material_types.h"
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_world_types.h"
+#include "DNA_action_types.h"
+#include "DNA_anim_types.h"
+
+#include "BLI_math.h"
+#include "BLI_blenlib.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_action.h"
+#include "BKE_animsys.h"
+#include "BKE_context.h"
+#include "BKE_depsgraph.h"
+#include "BKE_global.h"
+#include "BKE_image.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+#include "BKE_material.h"
+#include "BKE_modifier.h"
+#include "BKE_paint.h"
+#include "BKE_scene.h"
+#include "BKE_screen.h"
+#include "BKE_texture.h"
+#include "BKE_report.h"
+
+#include "RE_pipeline.h"
+
+#include "IMB_imbuf_types.h"
+
+#include "ED_node.h"
+#include "ED_image.h"
+#include "ED_screen.h"
+#include "ED_space_api.h"
+#include "ED_render.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+#include "UI_view2d.h"
+
+#include "IMB_imbuf.h"
+
+#include "RNA_enum_types.h"
+
+#include "GPU_material.h"
+
+#include "node_intern.h"
+#include "NOD_socket.h"
+
+
+/* can be called from menus too, but they should do own undopush and redraws */
+bNode *node_add_node(SpaceNode *snode, Main *bmain, Scene *scene,
+                     bNodeTemplate *ntemp, float locx, float locy)
+{
+	bNode *node = NULL, *gnode;
+
+	node_deselect_all(snode);
+
+	node = nodeAddNode(snode->edittree, ntemp);
+
+	/* generics */
+	if (node) {
+		node_select(node);
+
+		gnode = node_tree_get_editgroup(snode->nodetree);
+		// arbitrary y offset of 60 so its visible
+		if (gnode) {
+			nodeFromView(gnode, locx, locy + 60.0f, &node->locx, &node->locy);
+		}
+		else {
+			node->locx = locx;
+			node->locy = locy + 60.0f;
+		}
+
+		ntreeUpdateTree(snode->edittree);
+		ED_node_set_active(bmain, snode->edittree, node);
+
+		if (snode->nodetree->type == NTREE_COMPOSIT) {
+			if (ELEM4(node->type, CMP_NODE_R_LAYERS, CMP_NODE_COMPOSITE, CMP_NODE_DEFOCUS, CMP_NODE_OUTPUT_FILE)) {
+				node->id = &scene->id;
+			}
+			else if (ELEM3(node->type, CMP_NODE_MOVIECLIP, CMP_NODE_MOVIEDISTORTION, CMP_NODE_STABILIZE2D)) {
+				node->id = (ID *)scene->clip;
+			}
+
+			ntreeCompositForceHidden(snode->edittree, scene);
+		}
+
+		if (node->id)
+			id_us_plus(node->id);
+
+
+		if (snode->flag & SNODE_USE_HIDDEN_PREVIEW)
+			node->flag &= ~NODE_PREVIEW;
+
+		snode_update(snode, node);
+	}
+
+	if (snode->nodetree->type == NTREE_TEXTURE) {
+		ntreeTexCheckCyclics(snode->edittree);
+	}
+
+	return node;
+}
+
+/* ********************** Add reroute operator ***************** */
+static int add_reroute_intersect_check(bNodeLink *link, float mcoords[][2], int tot, float result[2])
+{
+	float coord_array[NODE_LINK_RESOL + 1][2];
+	int i, b;
+
+	if (node_link_bezier_points(NULL, NULL, link, coord_array, NODE_LINK_RESOL)) {
+
+		for (i = 0; i < tot - 1; i++)
+			for (b = 0; b < NODE_LINK_RESOL; b++)
+				if (isect_line_line_v2(mcoords[i], mcoords[i + 1], coord_array[b], coord_array[b + 1]) > 0) {
+					result[0] = (mcoords[i][0] + mcoords[i + 1][0]) / 2.0f;
+					result[1] = (mcoords[i][1] + mcoords[i + 1][1]) / 2.0f;
+					return 1;
+				}
+	}
+	return 0;
+}
+
+static int add_reroute_exec(bContext *C, wmOperator *op)
+{
+	SpaceNode *snode = CTX_wm_space_node(C);
+	ARegion *ar = CTX_wm_region(C);
+	bNode *gnode = node_tree_get_editgroup(snode->nodetree);
+	float mcoords[256][2];
+	int i = 0;
+
+	RNA_BEGIN(op->ptr, itemptr, "path")
+	{
+		float loc[2];
+
+		RNA_float_get_array(&itemptr, "loc", loc);
+		UI_view2d_region_to_view(&ar->v2d, (short)loc[0], (short)loc[1],
+		                         &mcoords[i][0], &mcoords[i][1]);
+		i++;
+		if (i >= 256) break;
+	}
+	RNA_END;
+
+	if (i > 1) {
+		bNodeLink *link;
+		float insertPoint[2];
+
+		ED_preview_kill_jobs(C);
+
+		for (link = snode->edittree->links.first; link; link = link->next) {
+			if (add_reroute_intersect_check(link, mcoords, i, insertPoint)) {
+				bNodeTemplate ntemp;
+				bNode *rerouteNode;
+
+				node_deselect_all(snode);
+
+				ntemp.type = NODE_REROUTE;
+				rerouteNode = nodeAddNode(snode->edittree, &ntemp);
+				if (gnode) {
+					nodeFromView(gnode, insertPoint[0], insertPoint[1], &rerouteNode->locx, &rerouteNode->locy);
+				}
+				else {
+					rerouteNode->locx = insertPoint[0];
+					rerouteNode->locy = insertPoint[1];
+				}
+
+				nodeAddLink(snode->edittree, link->fromnode, link->fromsock, rerouteNode, rerouteNode->inputs.first);
+				link->fromnode = rerouteNode;
+				link->fromsock = rerouteNode->outputs.first;
+
+				break; // add one reroute at the time.
+			}
+		}
+
+		ntreeUpdateTree(snode->edittree);
+		snode_notify(C, snode);
+		snode_dag_update(C, snode);
+
+		return OPERATOR_FINISHED;
+	}
+
+	return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
+}
+
+void NODE_OT_add_reroute(wmOperatorType *ot)
+{
+	PropertyRNA *prop;
+
+	ot->name = "Add reroute";
+	ot->idname = "NODE_OT_add_reroute";
+
+	ot->invoke = WM_gesture_lines_invoke;
+	ot->modal = WM_gesture_lines_modal;
+	ot->exec = add_reroute_exec;
+	ot->cancel = WM_gesture_lines_cancel;
+
+	ot->poll = ED_operator_node_active;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+	prop = RNA_def_property(ot->srna, "path", PROP_COLLECTION, PROP_NONE);
+	RNA_def_property_struct_runtime(prop, &RNA_OperatorMousePath);
+	/* internal */
+	RNA_def_int(ot->srna, "cursor", BC_CROSSCURSOR, 0, INT_MAX, "Cursor", "", 0, INT_MAX);
+}
+
+
+/* ****************** Add File Node Operator  ******************* */
+
+static int node_add_file_exec(bContext *C, wmOperator *op)
+{
+	Main *bmain = CTX_data_main(C);
+	Scene *scene = CTX_data_scene(C);
+	SpaceNode *snode = CTX_wm_space_node(C);
+	bNode *node;
+	Image *ima = NULL;
+	bNodeTemplate ntemp;
+
+	/* check input variables */
+	if (RNA_struct_property_is_set(op->ptr, "filepath")) {
+		char path[FILE_MAX];
+		RNA_string_get(op->ptr, "filepath", path);
+
+		errno = 0;
+
+		ima = BKE_image_load_exists(path);
+
+		if (!ima) {
+			BKE_reportf(op->reports, RPT_ERROR, "Can't read image: \"%s\", %s", path, errno ? strerror(errno) : "Unsupported format");
+			return OPERATOR_CANCELLED;
+		}
+	}
+	else if (RNA_struct_property_is_set(op->ptr, "name")) {
+		char name[MAX_ID_NAME - 2];
+		RNA_string_get(op->ptr, "name", name);
+		ima = (Image *)BKE_libblock_find_name(ID_IM, name);
+
+		if (!ima) {
+			BKE_reportf(op->reports, RPT_ERROR, "Image named \"%s\", not found", name);
+			return OPERATOR_CANCELLED;
+		}
+	}
+
+	node_deselect_all(snode);
+
+	switch (snode->nodetree->type) {
+		case NTREE_SHADER:
+			ntemp.type = SH_NODE_TEX_IMAGE;
+			break;
+		case NTREE_TEXTURE:
+			ntemp.type = TEX_NODE_IMAGE;
+			break;
+		case NTREE_COMPOSIT:
+			ntemp.type = CMP_NODE_IMAGE;
+			break;
+		default:
+			return OPERATOR_CANCELLED;
+	}
+
+	ED_preview_kill_jobs(C);
+
+	node = node_add_node(snode, bmain, scene, &ntemp, snode->mx, snode->my);
+
+	if (!node) {
+		BKE_report(op->reports, RPT_WARNING, "Could not add an image node");
+		return OPERATOR_CANCELLED;
+	}
+
+	node->id = (ID *)ima;
+	id_us_plus(node->id);
+
+	snode_notify(C, snode);
+	snode_dag_update(C, snode);
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list