[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31335] branches/particles-2010/source/ blender: Modified the node sorting order during SolveOrder to make it usable for context resolving .
Lukas Toenne
lukas.toenne at googlemail.com
Sat Aug 14 19:01:14 CEST 2010
Revision: 31335
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31335
Author: lukastoenne
Date: 2010-08-14 19:01:14 +0200 (Sat, 14 Aug 2010)
Log Message:
-----------
Modified the node sorting order during SolveOrder to make it usable for context resolving. The old ordering is part of it, so it can still be used that way.
Fixed the data context resolving using the corrected node levels.
Added GetParticleData node and AddParticle nodes to make rudimentary particle effects.
Modified Paths:
--------------
branches/particles-2010/source/blender/blenkernel/BKE_node.h
branches/particles-2010/source/blender/blenkernel/BKE_particleset.h
branches/particles-2010/source/blender/blenkernel/intern/node.c
branches/particles-2010/source/blender/blenkernel/intern/particleset.c
branches/particles-2010/source/blender/editors/space_node/drawnode.c
branches/particles-2010/source/blender/editors/space_node/node_draw.c
branches/particles-2010/source/blender/editors/space_view3d/drawobject.c
branches/particles-2010/source/blender/makesdna/DNA_node_types.h
branches/particles-2010/source/blender/makesdna/DNA_particleset_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/makesrna/intern/rna_particleset.c
branches/particles-2010/source/blender/nodes/SIM_node.h
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_particle_data.c
Added Paths:
-----------
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_particle_data.c
Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-08-14 16:30:41 UTC (rev 31334)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-08-14 17:01:14 UTC (rev 31335)
@@ -524,6 +524,9 @@
#define SIM_NODE_GETVERTEXDATA 753
#define SIM_NODE_SETVERTEXDATA 754
#define SIM_NODE_ADDPARTICLE 755
+#define SIM_NODE_GETPARTICLEDATA 756
+#define SIM_NODE_SETPARTICLEDATA 757
+#define SIM_NODE_RANDOM 758
/* TO BE REMOVED: debugging stuff, testing, etc. */
#define SIM_NODE_DEBUGPRINT 801
Modified: branches/particles-2010/source/blender/blenkernel/BKE_particleset.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_particleset.h 2010-08-14 16:30:41 UTC (rev 31334)
+++ branches/particles-2010/source/blender/blenkernel/BKE_particleset.h 2010-08-14 17:01:14 UTC (rev 31335)
@@ -75,6 +75,9 @@
void pit_next(struct ParticleIterator *it);
void pit_goto(struct ParticleIterator *it, int index);
+void *pset_parprop(struct NParticle *pa, struct ParticlePropertyInfo *prop);
+
+/* object functions */
void make_local_particleset(struct ParticleSet *pset);
struct ParticleSet *add_particleset(char *name);
struct ParticleSet* copy_particleset(struct ParticleSet *pset);
Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c 2010-08-14 16:30:41 UTC (rev 31334)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c 2010-08-14 17:01:14 UTC (rev 31335)
@@ -1564,6 +1564,7 @@
/* ************** dependency stuff *********** */
+#if 0
/* node is guaranteed to be not checked before */
static int node_recurs_check(bNode *node, bNode ***nsort, int level)
{
@@ -1583,7 +1584,7 @@
}
}
}
-// printf("node sort %s level %d\n", node->name, level);
+ printf("node sort %s level %d\n", node->name, level);
**nsort= node;
(*nsort)++;
@@ -1592,7 +1593,34 @@
else
return 0xFFF;
}
+#endif
+/* node is guaranteed to be not checked before */
+static int node_recurs_check(bNode *node, bNode ***nsort)
+{
+ bNode *fromnode;
+ bNodeSocket *sock;
+ int level = 0xFFF;
+
+ node->done= 1;
+
+ for(sock= node->inputs.first; sock; sock= sock->next) {
+ if(sock->link) {
+ fromnode= sock->link->fromnode;
+ if(fromnode) {
+ if (fromnode->done==0)
+ fromnode->level= node_recurs_check(fromnode, nsort);
+ if (fromnode->level <= level)
+ level = fromnode->level - 1;
+ }
+ }
+ }
+ **nsort= node;
+ (*nsort)++;
+
+ return level;
+}
+
static void ntreeSolveOrder(bNodeTree *ntree)
{
bNode *node, **nodesort, **nsort;
@@ -1624,7 +1652,8 @@
/* recursive check */
for(node= ntree->nodes.first; node; node= node->next) {
if(node->done==0) {
- node->level= node_recurs_check(node, &nsort, 0);
+// node->level= node_recurs_check(node, &nsort, 0);
+ node->level= node_recurs_check(node, &nsort);
}
}
@@ -1865,11 +1894,18 @@
static int ntreeSortLinkFromnode(void *a, void *b)
{
bNode *ato = ((bNodeLinkSortList*)a)->link->tonode;
+ bNode *afrom = ((bNodeLinkSortList*)a)->link->fromnode;
+ bNode *bto = ((bNodeLinkSortList*)b)->link->tonode;
bNode *bfrom = ((bNodeLinkSortList*)b)->link->fromnode;
- if (bfrom && ato) {
+ if (ato && afrom && bto && bfrom) {
/* this ensures that links, whose from/to-nodes can influence each other are sorted */
- return (ato->level >= bfrom->level);
+ if (ato->level >= bfrom->level) {
+ return 0;
+ }
+ else {
+ return 1;
+ }
}
else
return 0;
@@ -1905,10 +1941,8 @@
if (resctx.type == NDC_UNDEFINED) {
for (sock=node->inputs.first; sock; sock=sock->next) {
if (sock->stype->contexttype == NDC_UNDEFINED) {
- if (ELEM(sock->context.type, NDC_UNDEFINED, NDC_SINGLETON)==0) {
- resctx.type = NDC_UNDEFINED;
- resctx.source = NULL;
- }
+ sock->context.type = NDC_UNDEFINED;
+ sock->context.source = NULL;
}
}
}
@@ -1955,8 +1989,29 @@
BLI_sortlist(&sortlist, ntreeSortLinkFromnode);
+ #if 1
+ {
+ int i;
+ for (i=0, item=sortlist.first; item; ++i, item = item->next)
+ item->link->debug = i;
+ }
+ #endif
+ #if 0
+ printf("/// Resolving links: ///\n");
for (item=sortlist.first; item; item = item->next) {
link = item->link;
+ if (link->fromnode) printf("%s:%s", link->fromnode->name, link->fromsock->name);
+ else printf("-:-");
+ printf(" -> ");
+ if (link->tonode) printf("%s:%s", link->tonode->name, link->tosock->name);
+ else printf("-:-");
+ printf("\n");
+ }
+ printf("/////////////////////");
+ #endif
+
+ for (item=sortlist.first; item; item = item->next) {
+ link = item->link;
if (link->fromnode && link->tonode) {
if (link->tosock->stype->contexttype == NDC_UNDEFINED) {
link->tosock->context = link->fromsock->context;
@@ -2837,6 +2892,9 @@
nodeRegisterType(ntypelist, &sim_node_getvertexdata);
nodeRegisterType(ntypelist, &sim_node_setvertexdata);
nodeRegisterType(ntypelist, &sim_node_addparticle);
+ nodeRegisterType(ntypelist, &sim_node_getparticledata);
+ nodeRegisterType(ntypelist, &sim_node_setparticledata);
+ nodeRegisterType(ntypelist, &sim_node_random);
nodeRegisterType(ntypelist, &sim_node_debugprint);
}
Modified: branches/particles-2010/source/blender/blenkernel/intern/particleset.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/particleset.c 2010-08-14 16:30:41 UTC (rev 31334)
+++ branches/particles-2010/source/blender/blenkernel/intern/particleset.c 2010-08-14 17:01:14 UTC (rev 31335)
@@ -43,31 +43,29 @@
#include "BKE_particleset.h"
#include "BKE_utildefines.h"
-static void pptype_int_zero(void *data)
-{
- *(int*)data = 0;
-}
-
-static void pptype_float_zero(void *data)
-{
- *(float*)data = 0.0f;
-}
-
-static void pptype_vector_zero(void *data)
-{
- zero_v3((float*)data);
-}
-
ParticlePropertyInfo particle_std_properties[] = {
-// Name, size, flags, data type, pad, default func., init func., free func.
- { "Position", 3*sizeof(float), PARPROP_DEFAULT|PARPROP_PROTECTED, PPTYPE_FLOAT, 0, pptype_vector_zero, 0, 0 },
- { "Velocity", 3*sizeof(float), PARPROP_DEFAULT|PARPROP_PROTECTED, PPTYPE_FLOAT, 0, pptype_vector_zero, 0, 0 },
- { "Mass", sizeof(float), 0, PPTYPE_FLOAT, 0, pptype_vector_zero, 0, 0 },
- { "Custom", sizeof(int), 0, PPTYPE_INT, 0, pptype_int_zero, 0, 0 },
+// Name, data type, flags
+ { "Position", PPTYPE_VECTOR, PARPROP_DEFAULT|PARPROP_PROTECTED },
+ { "Velocity", PPTYPE_VECTOR, PARPROP_DEFAULT|PARPROP_PROTECTED },
+ { "Force", PPTYPE_VECTOR, PARPROP_PROTECTED, },
+ { "Mass", PPTYPE_FLOAT, 0 },
+ { "Custom", PPTYPE_CUSTOM, 0 },
/* last line marks the array end */
{ "" }
};
+static int get_proptype_size(int type)
+{
+ switch (type) {
+ case PPTYPE_FLOAT: return sizeof(float); break;
+ case PPTYPE_INT: return sizeof(int); break;
+ case PPTYPE_BOOL: return sizeof(char); break;
+ case PPTYPE_VECTOR: return 3*sizeof(float); break;
+ case PPTYPE_RGBA: return 4*sizeof(float); break;
+ }
+ return 0;
+}
+
/* modifier update function */
void pset_calc_modifiers(Scene *scene, Object *ob)
{
@@ -141,6 +139,7 @@
offset = sizeof(NParticle);
for (i=0, propinfo=pset->properties; i < pset->totprop; ++i, ++propinfo) {
+ propinfo->size = get_proptype_size(propinfo->type);
propinfo->mapoffset = propinfo->offset; /* store old offset for restoring the buffer */
propinfo->offset = offset;
@@ -159,8 +158,8 @@
for (i=0, propinfo=pset->properties; i < pset->totprop; ++i, ++propinfo) {
if (propinfo->mapoffset < 0) {
- if (propinfo->set_default)
- propinfo->set_default((char*)dest + propinfo->offset);
+// if (propinfo->set_default)
+// propinfo->set_default((char*)dest + propinfo->offset);
}
else {
memcpy((char*)dest + propinfo->offset, (char*)src + propinfo->mapoffset, propinfo->size);
@@ -316,8 +315,6 @@
pa->number = number;
pa->alive = PLIFE_UNBORN;
pa->birthtime = 0.0f;
- zero_v3(pa->loc);
- zero_v3(pa->vel);
}
static void init_page(ParticleSet *pset, ParticlePage *page, int page_size)
@@ -682,6 +679,11 @@
it->index = -1;
}
+void *pset_parprop(NParticle *pa, ParticlePropertyInfo *prop)
+{
+ return ((char*)pa + prop->offset);
+}
+
void make_local_particleset(ParticleSet *pset)
{
Object *ob = 0;
Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c 2010-08-14 16:30:41 UTC (rev 31334)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c 2010-08-14 17:01:14 UTC (rev 31335)
@@ -1261,7 +1261,7 @@
}
}
-static void node_simulation_buts_getobjectdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
+static void node_simulation_buts_object(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
// bNode *node= ptr->data;
uiLayout *col;
@@ -1270,61 +1270,31 @@
uiItemR(col, ptr, "object", 0, NULL, 0);
}
-static void node_simulation_buts_setobjectdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
-{
-// bNode *node= ptr->data;
- uiLayout *col;
-
- col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "object", 0, NULL, 0);
-}
-
-static void node_simulation_buts_getvertexdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
-{
-// bNode *node= ptr->data;
- uiLayout *col;
-
- col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "object", 0, NULL, 0);
-}
-
-static void node_simulation_buts_setvertexdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
-{
-// bNode *node= ptr->data;
- uiLayout *col;
-
- col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "object", 0, NULL, 0);
-}
-
-static void node_simulation_buts_addparticle(uiLayout *layout, bContext *C, PointerRNA *ptr)
-{
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list