[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