[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