[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34364] branches/particles-2010/source/ blender: Added Mesh input and Transform operator modifier nodes for future testing.

Lukas Toenne lukas.toenne at googlemail.com
Mon Jan 17 10:31:31 CET 2011


Revision: 34364
          http://projects.blender.org/scm/viewcv.php?view=rev&root=bf-blender&revision=34364
Author:   lukastoenne
Date:     2011-01-17 09:31:28 +0000 (Mon, 17 Jan 2011)
Log Message:
-----------
Added Mesh input and Transform operator modifier nodes for future testing.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/editors/space_node/node_header.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
    branches/particles-2010/source/blender/nodes/CMakeLists.txt
    branches/particles-2010/source/blender/nodes/MOD_node.h
    branches/particles-2010/source/blender/nodes/intern/CMP_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/node_exec.c
    branches/particles-2010/source/blender/nodes/intern/node_exec.h

Added Paths:
-----------
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_mesh.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_transform.c
    branches/particles-2010/source/blender/nodes/intern/MOD_util.c
    branches/particles-2010/source/blender/nodes/intern/MOD_util.h

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-01-17 08:31:57 UTC (rev 34363)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-01-17 09:31:28 UTC (rev 34364)
@@ -188,6 +188,7 @@
 #define NODE_CLASS_MATH_VECTOR		18
 #define NODE_CLASS_MATH_ROTATION	19
 #define NODE_CLASS_PARTICLES		25
+#define NODE_CLASS_TRANSFORM		30
 
 struct bNodeTreeExecData;
 
@@ -329,8 +330,8 @@
 /* ************** COMMON NODES *************** */
 
 #define NODE_GROUP		2
-#define NODE_GROUP_MENU		1000
-#define NODE_DYNAMIC_MENU	4000
+#define NODE_GROUP_MENU		10000
+#define NODE_DYNAMIC_MENU	20000
 
 extern bNodeType node_group_typeinfo;
 
@@ -559,10 +560,6 @@
 
 /* ************** SIMULATION NODES *************** */
 
-/* note: types are needed to restore callbacks, don't change values */
-/* range 1 - 100 is reserved for common nodes */
-/* using toolbox, we add node groups by assuming the values below don't exceed NODE_GROUP_MENU for now */
-
 /* control structures */
 #define SIM_NODE_PROGRAM			601
 #define SIM_NODE_SUBPROGRAM			602
@@ -638,6 +635,21 @@
 							  float (*vertexCos)[3], int numVerts,
 							  float frame, float framestep);
 
+
+/* ************** MODIFIER NODES *************** */
+
+/* input */
+#define MOD_NODE_MESH				1000
+
+/* transform */
+#define MOD_NODE_TRANSLATE			1101
+#define MOD_NODE_ROTATE				1102
+#define MOD_NODE_SCALE				1103
+
+/* API */
+struct DerivedMesh *ntreeModifierExecTree(struct bNodeTree *ntree, struct Scene *scene, struct Object *ob, float (*inputVertexCos)[3]);
+
+
 /**/
 
 void init_nodesystem(void);

Modified: branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c	2011-01-17 08:31:57 UTC (rev 34363)
+++ branches/particles-2010/source/blender/blenkernel/intern/DerivedMesh.c	2011-01-17 09:31:28 UTC (rev 34364)
@@ -50,6 +50,7 @@
 #include "BKE_key.h"
 #include "BKE_modifier.h"
 #include "BKE_mesh.h"
+#include "BKE_node.h"
 #include "BKE_object.h"
 #include "BKE_paint.h"
 #include "BKE_texture.h"
@@ -1668,271 +1669,286 @@
 {
 	Mesh *me = ob->data;
 	ModifierData *firstmd, *md;
-	LinkNode *datamasks, *curr;
+	LinkNode *datamasks = NULL, *curr;
 	CustomDataMask mask, nextmask;
 	float (*deformedVerts)[3] = NULL;
-	DerivedMesh *dm, *orcodm, *clothorcodm, *finaldm;
+	DerivedMesh *dm, *orcodm= NULL, *clothorcodm= NULL, *finaldm;
 	int numVerts = me->totvert;
 	int required_mode;
 	int isPrevDeform= FALSE;
 	int skipVirtualArmature = (useDeform < 0);
-
-	if(!skipVirtualArmature) {
-		firstmd = modifiers_getVirtualModifierList(ob);
-	}
-	else {
-		/* game engine exception */
-		firstmd = ob->modifiers.first;
-		if(firstmd && firstmd->type == eModifierType_Armature)
-			firstmd = firstmd->next;
-	}
-
-	md = firstmd;
-
+	
 	modifiers_clearErrors(ob);
-
-	if(useRenderParams) required_mode = eModifierMode_Render;
-	else required_mode = eModifierMode_Realtime;
-
-	datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
-	curr = datamasks;
-
-	if(deform_r) *deform_r = NULL;
-	*final_r = NULL;
-
-	if(useDeform) {
-		if(inputVertexCos)
-			deformedVerts = inputVertexCos;
+	
+	if (ob->modifier_nodetree) {
+		if(useDeform) {
+			if (deform_r)
+				*deform_r = CDDM_from_mesh(me, ob);
+		}
 		
-		/* Apply all leading deforming modifiers */
-		for(;md; md = md->next, curr = curr->next) {
-			ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
-			md->scene= scene;
-			
-			if(!modifier_isEnabled(scene, md, required_mode)) continue;
-			if(useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
-
-			if(mti->type == eModifierTypeType_OnlyDeform) {
-				if(!deformedVerts)
-					deformedVerts = mesh_getVertexCos(me, &numVerts);
-
-				mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, useRenderParams, useDeform);
-			} else {
-				break;
-			}
-			
-			/* grab modifiers until index i */
-			if((index >= 0) && (modifiers_indexInObject(ob, md) >= index))
-				break;
-		}
-
-		/* Result of all leading deforming modifiers is cached for
-		 * places that wish to use the original mesh but with deformed
-		 * coordinates (vpaint, etc.)
-		 */
-		if (deform_r) {
-			*deform_r = CDDM_from_mesh(me, ob);
-
-			if(deformedVerts) {
-				CDDM_apply_vert_coords(*deform_r, deformedVerts);
-				CDDM_calc_normals(*deform_r);
-			}
-		}
-	} else {
-		/* default behaviour for meshes */
 		if(inputVertexCos)
 			deformedVerts = inputVertexCos;
 		else
 			deformedVerts = mesh_getVertexCos(me, &numVerts);
+		
+		dm = ntreeModifierExecTree(ob->modifier_nodetree, scene, ob, inputVertexCos);
 	}
-
-
-	/* Now apply all remaining modifiers. If useDeform is off then skip
-	 * OnlyDeform ones. 
-	 */
-	dm = NULL;
-	orcodm = NULL;
-	clothorcodm = NULL;
-
-	for(;md; md = md->next, curr = curr->next) {
-		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
-		md->scene= scene;
+	else {
+		if(!skipVirtualArmature) {
+			firstmd = modifiers_getVirtualModifierList(ob);
+		}
+		else {
+			/* game engine exception */
+			firstmd = ob->modifiers.first;
+			if(firstmd && firstmd->type == eModifierType_Armature)
+				firstmd = firstmd->next;
+		}
 		
-		if(!modifier_isEnabled(scene, md, required_mode)) continue;
-		if(mti->type == eModifierTypeType_OnlyDeform && !useDeform) continue;
-		if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
-			modifier_setError(md, "Modifier requires original data, bad stack position.");
-			continue;
-		}
-		if(needMapping && !modifier_supportsMapping(md)) continue;
-		if(useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
-
-		/* add an orco layer if needed by this modifier */
-		if(mti->requiredDataMask)
-			mask = mti->requiredDataMask(ob, md);
-		else
-			mask = 0;
-
-		if(dm && (mask & CD_MASK_ORCO))
-			add_orco_dm(ob, NULL, dm, orcodm, CD_ORCO);
-
-		/* How to apply modifier depends on (a) what we already have as
-		 * a result of previous modifiers (could be a DerivedMesh or just
-		 * deformed vertices) and (b) what type the modifier is.
-		 */
-
-		if(mti->type == eModifierTypeType_OnlyDeform) {
-			/* No existing verts to deform, need to build them. */
-			if(!deformedVerts) {
-				if(dm) {
-					/* Deforming a derived mesh, read the vertex locations
-					 * out of the mesh and deform them. Once done with this
-					 * run of deformers verts will be written back.
-					 */
-					numVerts = dm->getNumVerts(dm);
-					deformedVerts =
-						MEM_mallocN(sizeof(*deformedVerts) * numVerts, "dfmv");
-					dm->getVertCos(dm, deformedVerts);
+		md = firstmd;
+		
+		if(useRenderParams) required_mode = eModifierMode_Render;
+		else required_mode = eModifierMode_Realtime;
+		
+		datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
+		curr = datamasks;
+		
+		if(deform_r) *deform_r = NULL;
+		*final_r = NULL;
+		
+		if(useDeform) {
+			if(inputVertexCos)
+				deformedVerts = inputVertexCos;
+			
+			/* Apply all leading deforming modifiers */
+			for(;md; md = md->next, curr = curr->next) {
+				ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+				
+				md->scene= scene;
+				
+				if(!modifier_isEnabled(scene, md, required_mode)) continue;
+				if(useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
+				
+				if(mti->type == eModifierTypeType_OnlyDeform) {
+					if(!deformedVerts)
+						deformedVerts = mesh_getVertexCos(me, &numVerts);
+					
+					mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, useRenderParams, useDeform);
 				} else {
-					deformedVerts = mesh_getVertexCos(me, &numVerts);
+					break;
 				}
+				
+				/* grab modifiers until index i */
+				if((index >= 0) && (modifiers_indexInObject(ob, md) >= index))
+					break;
 			}
-
-			/* if this is not the last modifier in the stack then recalculate the normals
-			 * to avoid giving bogus normals to the next modifier see: [#23673] */
-			if(isPrevDeform &&  mti->dependsOnNormals && mti->dependsOnNormals(md)) {
-				/* XXX, this covers bug #23673, but we may need normal calc for other types */
-				if(dm->type == DM_TYPE_CDDM) {
-					CDDM_apply_vert_coords(dm, deformedVerts);
-					CDDM_calc_normals(dm);
+			
+			/* Result of all leading deforming modifiers is cached for
+			 * places that wish to use the original mesh but with deformed
+			 * coordinates (vpaint, etc.)
+			 */
+			if (deform_r) {
+				*deform_r = CDDM_from_mesh(me, ob);
+				
+				if(deformedVerts) {
+					CDDM_apply_vert_coords(*deform_r, deformedVerts);
+					CDDM_calc_normals(*deform_r);
 				}
 			}
-
-			mti->deformVerts(md, ob, dm, deformedVerts, numVerts, useRenderParams, useDeform);
 		} else {
-			DerivedMesh *ndm;
-
-			/* determine which data layers are needed by following modifiers */
-			if(curr->next)
-				nextmask= (CustomDataMask)GET_INT_FROM_POINTER(curr->next->link);
+			/* default behaviour for meshes */
+			if(inputVertexCos)
+				deformedVerts = inputVertexCos;
 			else
-				nextmask= dataMask;
-
-			/* apply vertex coordinates or build a DerivedMesh as necessary */
-			if(dm) {
-				if(deformedVerts) {
-					DerivedMesh *tdm = CDDM_copy(dm);
-					dm->release(dm);
-					dm = tdm;
-
-					CDDM_apply_vert_coords(dm, deformedVerts);
-					CDDM_calc_normals(dm);
-				}
-			} else {
-				dm = CDDM_from_mesh(me, ob);
-
-				if(deformedVerts) {
-					CDDM_apply_vert_coords(dm, deformedVerts);
-					CDDM_calc_normals(dm);
-				}
-
-				if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
-					add_weight_mcol_dm(ob, dm);
-
-				/* Constructive modifiers need to have an origindex
-				 * otherwise they wont have anywhere to copy the data from.
-				 *
-				 * Also create ORIGINDEX data if any of the following modifiers
-				 * requests it, this way Mirror, Solidify etc will keep ORIGINDEX
-				 * data by using generic DM_copy_vert_data() functions.
-				 */
-				if(needMapping || (nextmask & CD_MASK_ORIGINDEX)) {
-					/* calc */
-					DM_add_vert_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
-					DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
-					DM_add_face_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
-
-					range_vni(DM_get_vert_data_layer(dm, CD_ORIGINDEX), dm->numVertData, 0);
-					range_vni(DM_get_edge_data_layer(dm, CD_ORIGINDEX), dm->numEdgeData, 0);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list