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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to