[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