[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31165] branches/particles-2010/source/ blender: Fixed saving/loading and several other bugs.
Lukas Toenne
lukas.toenne at googlemail.com
Sun Aug 8 14:53:12 CEST 2010
Revision: 31165
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31165
Author: lukastoenne
Date: 2010-08-08 14:53:10 +0200 (Sun, 08 Aug 2010)
Log Message:
-----------
Fixed saving/loading and several other bugs. Added back math nodes.
Modified Paths:
--------------
branches/particles-2010/source/blender/blenloader/intern/readfile.c
branches/particles-2010/source/blender/blenloader/intern/writefile.c
branches/particles-2010/source/blender/editors/include/ED_node.h
branches/particles-2010/source/blender/editors/space_node/node_edit.c
branches/particles-2010/source/blender/makesdna/DNA_particleset_types.h
branches/particles-2010/source/blender/makesrna/intern/rna_object.c
branches/particles-2010/source/blender/modifiers/intern/MOD_nodetree.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_vertex_data.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_timestep.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_vector_compose.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_vector_decompose.c
branches/particles-2010/source/blender/nodes/intern/SIM_util.c
branches/particles-2010/source/blender/nodes/intern/SIM_util.h
branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c
Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-08-08 12:12:48 UTC (rev 31164)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-08-08 12:53:10 UTC (rev 31165)
@@ -84,6 +84,7 @@
#include "DNA_object_force.h"
#include "DNA_packedFile_types.h"
#include "DNA_particle_types.h"
+#include "DNA_particleset_types.h"
#include "DNA_property_types.h"
#include "DNA_text_types.h"
#include "DNA_view3d_types.h"
@@ -3169,6 +3170,106 @@
return;
}
+/* ************ READ PARTICLE SETS ***************** */
+
+static void lib_link_particlesets(FileData *fd, Main *main)
+{
+ ParticleSet *pset;
+
+ pset= main->particle.first;
+ while(pset) {
+ if(pset->id.flag & LIB_NEEDLINK) {
+ if (pset->adt) lib_link_animdata(fd, &pset->id, pset->adt);
+
+ #if 0
+ part->dup_ob = newlibadr(fd, part->id.lib, part->dup_ob);
+ part->dup_group = newlibadr(fd, part->id.lib, part->dup_group);
+ part->eff_group = newlibadr(fd, part->id.lib, part->eff_group);
+ part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob);
+
+ lib_link_partdeflect(fd, &part->id, part->pd);
+ lib_link_partdeflect(fd, &part->id, part->pd2);
+
+ if(part->effector_weights)
+ part->effector_weights->group = newlibadr(fd, part->id.lib, part->effector_weights->group);
+
+ dw = part->dupliweights.first;
+ for(; dw; dw=dw->next)
+ dw->ob = newlibadr(fd, part->id.lib, dw->ob);
+
+ if(part->boids) {
+ BoidState *state = part->boids->states.first;
+ BoidRule *rule;
+ for(; state; state=state->next) {
+ rule = state->rules.first;
+ for(; rule; rule=rule->next)
+ switch(rule->type) {
+ case eBoidRuleType_Goal:
+ case eBoidRuleType_Avoid:
+ {
+ BoidRuleGoalAvoid *brga = (BoidRuleGoalAvoid*)rule;
+ brga->ob = newlibadr(fd, part->id.lib, brga->ob);
+ break;
+ }
+ case eBoidRuleType_FollowLeader:
+ {
+ BoidRuleFollowLeader *brfl = (BoidRuleFollowLeader*)rule;
+ brfl->ob = newlibadr(fd, part->id.lib, brfl->ob);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+ pset->id.flag -= LIB_NEEDLINK;
+ }
+ pset= pset->id.next;
+ }
+}
+
+static void direct_link_particlesets(FileData *fd, ParticleSet *pset)
+{
+ int i;
+
+ pset->adt= newdataadr(fd, pset->adt);
+ pset->pages = newdataadr(fd, pset->pages);
+ for (i=0; i < pset->totpages; ++i)
+ pset->pages[i].particles = newdataadr(fd, pset->pages[i].particles);
+
+ pset->properties = newdataadr(fd, pset->properties);
+
+ direct_link_animdata(fd, pset->adt);
+
+ #if 0
+ part->pd= newdataadr(fd, part->pd);
+ part->pd2= newdataadr(fd, part->pd2);
+
+ direct_link_animdata(fd, part->adt);
+ direct_link_partdeflect(part->pd);
+ direct_link_partdeflect(part->pd2);
+
+ part->effector_weights = newdataadr(fd, part->effector_weights);
+ if(!part->effector_weights)
+ part->effector_weights = BKE_add_effector_weights(part->eff_group);
+
+ link_list(fd, &part->dupliweights);
+
+ part->boids= newdataadr(fd, part->boids);
+ part->fluid= newdataadr(fd, part->fluid);
+
+ if(part->boids) {
+ BoidState *state;
+ link_list(fd, &part->boids->states);
+
+ for(state=part->boids->states.first; state; state=state->next) {
+ link_list(fd, &state->rules);
+ link_list(fd, &state->conditions);
+ link_list(fd, &state->actions);
+ }
+ }
+ #endif
+}
+
/* ************ READ MESH ***************** */
static void lib_link_mtface(FileData *fd, Mesh *me, MTFace *mtface, int totface)
@@ -3647,6 +3748,16 @@
}
}
+ {
+ NodeTreeModifierData *ntmd = (NodeTreeModifierData*)modifiers_findByType(ob, eModifierType_NodeTree);
+
+ if (ntmd)
+ {
+ if(ntmd->nodetree)
+ lib_link_ntree(fd, &ob->id, ntmd->nodetree);
+ }
+ }
+
/* texture field */
if(ob->pd)
lib_link_partdeflect(fd, &ob->id, ob->pd);
@@ -3892,6 +4003,13 @@
SWITCH_INT(mmd->bindcos[a])
}
}
+ else if (md->type==eModifierType_NodeTree) {
+ NodeTreeModifierData *ntmd = (NodeTreeModifierData*) md;
+
+ ntmd->nodetree= newdataadr(fd, ntmd->nodetree);
+ if(ntmd->nodetree)
+ direct_link_nodetree(fd, ntmd->nodetree);
+ }
}
}
@@ -5394,6 +5512,7 @@
case ID_NT: return "Data from NT";
case ID_BR: return "Data from BR";
case ID_PA: return "Data from PA";
+ case ID_PS: return "Data from PS";
case ID_GD: return "Data from GD";
}
return "Data from Lib Block";
@@ -5555,6 +5674,9 @@
case ID_PA:
direct_link_particlesettings(fd, (ParticleSettings*)id);
break;
+ case ID_PS:
+ direct_link_particlesets(fd, (ParticleSet*)id);
+ break;
case ID_SCRIPT:
direct_link_script(fd, (Script*)id);
break;
@@ -10998,6 +11120,7 @@
lib_link_nodetree(fd, main); /* has to be done after scene/materials, this will verify group nodes */
lib_link_brush(fd, main);
lib_link_particlesettings(fd, main);
+ lib_link_particlesets(fd, main);
lib_link_mesh(fd, main); /* as last: tpage images with users at zero */
@@ -11413,6 +11536,12 @@
expand_animdata(fd, mainvar, part->adt);
}
+static void expand_particlesets(FileData *fd, Main *mainvar, ParticleSet *pset)
+{
+ if(pset->adt)
+ expand_animdata(fd, mainvar, pset->adt);
+}
+
static void expand_group(FileData *fd, Main *mainvar, Group *group)
{
GroupObject *go;
@@ -11994,6 +12123,8 @@
break;
case ID_PA:
expand_particlesettings(fd, mainvar, (ParticleSettings *)id);
+ case ID_PS:
+ expand_particlesets(fd, mainvar, (ParticleSet *)id);
}
doit= 1;
Modified: branches/particles-2010/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/writefile.c 2010-08-08 12:12:48 UTC (rev 31164)
+++ branches/particles-2010/source/blender/blenloader/intern/writefile.c 2010-08-08 12:53:10 UTC (rev 31165)
@@ -122,6 +122,7 @@
#include "DNA_outliner_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_particle_types.h"
+#include "DNA_particleset_types.h"
#include "DNA_property_types.h"
#include "DNA_scene_types.h"
#include "DNA_sdna_types.h"
@@ -694,6 +695,52 @@
}
}
+static void write_particlesets(WriteData *wd, ListBase *idbase)
+{
+ ParticleSet *pset;
+ int i;
+
+ pset= idbase->first;
+ while(pset) {
+ if(pset->id.us>0 || wd->current) {
+ /* write LibData */
+ writestruct(wd, ID_PS, "ParticleSet", 1, pset);
+ if (pset->id.properties) IDP_WriteProperty(pset->id.properties, wd);
+ if (pset->adt) write_animdata(wd, pset->adt);
+
+ writedata(wd, DATA, pset->totpages * sizeof(ParticlePage), pset->pages);
+ for (i=0; i < pset->totpages; ++i) {
+ writedata(wd, DATA, pset->page_size * sizeof(NParticle), pset->pages[i].particles);
+ }
+
+ writestruct(wd, DATA, "ParticlePropertyInfo", pset->totprop, pset->properties);
+
+ #if 0
+ writestruct(wd, DATA, "PartDeflect", 1, part->pd);
+ writestruct(wd, DATA, "PartDeflect", 1, part->pd2);
+ writestruct(wd, DATA, "EffectorWeights", 1, part->effector_weights);
+
+ dw = part->dupliweights.first;
+ for(; dw; dw=dw->next)
+ writestruct(wd, DATA, "ParticleDupliWeight", 1, dw);
+
+ if(part->boids && part->phystype == PART_PHYS_BOIDS) {
+ BoidState *state = part->boids->states.first;
+
+ writestruct(wd, DATA, "BoidSettings", 1, part->boids);
+
+ for(; state; state=state->next)
+ write_boid_state(wd, state);
+ }
+ if(part->fluid && part->phystype == PART_PHYS_FLUID){
+ writestruct(wd, DATA, "SPHFluidSettings", 1, part->fluid);
+ }
+ #endif
+ }
+ pset= pset->id.next;
+ }
+}
+
static void write_properties(WriteData *wd, ListBase *lb)
{
bProperty *prop;
@@ -1240,6 +1287,16 @@
writestruct(wd, DATA, "MDefInfluence", mmd->totinfluence, mmd->dyninfluences);
writedata(wd, DATA, sizeof(int)*mmd->totvert, mmd->dynverts);
}
+ else if (md->type==eModifierType_NodeTree) {
+ NodeTreeModifierData *ntmd = (NodeTreeModifierData*) md;
+
+ /* nodetree is integral part of modifier, no libdata */
+ if(ntmd->nodetree) {
+ writestruct(wd, DATA, "bNodeTree", 1, ntmd->nodetree);
+ write_nodetree(wd, ntmd->nodetree);
+ }
+
+ }
}
}
@@ -2446,6 +2503,7 @@
write_textures (wd, &mainvar->tex);
write_meshs (wd, &mainvar->mesh);
write_particlesettings(wd, &mainvar->particle);
+ write_particlesets(wd, &mainvar->particleset);
write_nodetrees(wd, &mainvar->nodetree);
write_brushes (wd, &mainvar->brush);
write_scripts (wd, &mainvar->script);
Modified: branches/particles-2010/source/blender/editors/include/ED_node.h
===================================================================
--- branches/particles-2010/source/blender/editors/include/ED_node.h 2010-08-08 12:12:48 UTC (rev 31164)
+++ branches/particles-2010/source/blender/editors/include/ED_node.h 2010-08-08 12:53:10 UTC (rev 31165)
@@ -47,7 +47,7 @@
void ED_node_shader_default(struct Material *ma);
void ED_node_composit_default(struct Scene *sce);
void ED_node_texture_default(struct Tex *tex);
-void ED_node_particles_default(struct ParticleSet *pset);
+void ED_node_simulation_default(struct ParticleSet *pset);
/* node ops.c */
void ED_operatormacros_node(void);
Modified: branches/particles-2010/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_edit.c 2010-08-08 12:12:48 UTC (rev 31164)
+++ branches/particles-2010/source/blender/editors/space_node/node_edit.c 2010-08-08 12:53:10 UTC (rev 31165)
@@ -337,7 +337,7 @@
/* assumes nothing being done in ntree yet, sets the default in/out node */
/* called from shading buttons or header */
-void ED_node_particles_default(ParticleSet *pset)
+void ED_node_simulation_default(ParticleSet *pset)
{
#if 0
bNode *prog;
Modified: branches/particles-2010/source/blender/makesdna/DNA_particleset_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_particleset_types.h 2010-08-08 12:12:48 UTC (rev 31164)
+++ branches/particles-2010/source/blender/makesdna/DNA_particleset_types.h 2010-08-08 12:53:10 UTC (rev 31165)
@@ -31,6 +31,8 @@
#include "DNA_ID.h"
+struct AnimData;
+
typedef enum ParticleLife {
PLIFE_UNBORN = -1,
PLIFE_DEAD = 0,
@@ -108,6 +110,8 @@
typedef struct ParticleSet
{
ID id;
+ struct AnimData *adt;
+
int flag;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list