[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28756] trunk/blender/source/blender: Fix:

Matt Ebb matt at mke3.net
Fri May 14 09:09:16 CEST 2010


Revision: 28756
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28756
Author:   broken
Date:     2010-05-14 09:09:15 +0200 (Fri, 14 May 2010)

Log Message:
-----------
Fix:
[#22310] Duplicate Does Not Propogate SimpleDeform's VGroup
[#22321] duplicating object with smoke settings doesnt duplicate smoke settings

^ Genscher, you may want to check that but I thought it was pretty straightforward. 

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_smoke.h
    trunk/blender/source/blender/blenkernel/intern/smoke.c
    trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_smoke.c

Modified: trunk/blender/source/blender/blenkernel/BKE_smoke.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_smoke.h	2010-05-14 02:27:09 UTC (rev 28755)
+++ trunk/blender/source/blender/blenkernel/BKE_smoke.h	2010-05-14 07:09:15 UTC (rev 28756)
@@ -40,6 +40,7 @@
 void smokeModifier_reset(struct SmokeModifierData *smd);
 void smokeModifier_reset_turbulence(struct SmokeModifierData *smd);
 void smokeModifier_createType(struct SmokeModifierData *smd);
+void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData *tsmd);
 
 long long smoke_get_mem_req(int xres, int yres, int zres, int amplify);
 

Modified: trunk/blender/source/blender/blenkernel/intern/smoke.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/smoke.c	2010-05-14 02:27:09 UTC (rev 28755)
+++ trunk/blender/source/blender/blenkernel/intern/smoke.c	2010-05-14 07:09:15 UTC (rev 28756)
@@ -753,6 +753,41 @@
 	}
 }
 
+void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData *tsmd)
+{
+	tsmd->type = smd->type;
+	tsmd->time = smd->time;
+	
+	smokeModifier_createType(tsmd);
+
+	if (tsmd->domain) {
+		tsmd->domain->maxres = smd->domain->maxres;
+		tsmd->domain->amplify = smd->domain->amplify;
+		tsmd->domain->omega = smd->domain->omega;
+		tsmd->domain->alpha = smd->domain->alpha;
+		tsmd->domain->beta = smd->domain->beta;
+		tsmd->domain->flags = smd->domain->flags;
+		tsmd->domain->strength = smd->domain->strength;
+		tsmd->domain->noise = smd->domain->noise;
+		tsmd->domain->diss_speed = smd->domain->diss_speed;
+		tsmd->domain->viewsettings = smd->domain->viewsettings;
+		tsmd->domain->fluid_group = smd->domain->fluid_group;
+		tsmd->domain->coll_group = smd->domain->coll_group;
+		
+		MEM_freeN(tsmd->domain->effector_weights);
+		tsmd->domain->effector_weights = MEM_dupallocN(smd->domain->effector_weights);
+	} else if (tsmd->flow) {
+		tsmd->flow->density = smd->flow->density;
+		tsmd->flow->temp = smd->flow->temp;
+		tsmd->flow->psys = smd->flow->psys;
+		tsmd->flow->type = smd->flow->type;
+	} else if (tsmd->coll) {
+		;
+		/* leave it as initialised, collision settings is mostly caches */
+	}
+}
+
+
 // forward decleration
 static void smoke_calc_transparency(float *result, float *input, float *p0, float *p1, int res[3], float dx, float *light, bresenham_callback cb, float correct);
 static float calc_voxel_transp(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c	2010-05-14 02:27:09 UTC (rev 28755)
+++ trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c	2010-05-14 07:09:15 UTC (rev 28756)
@@ -283,8 +283,10 @@
 	tsmd->mode	= smd->mode;
 	tsmd->axis  = smd->axis;
 	tsmd->origin= smd->origin;
+	tsmd->originOpts= smd->originOpts;
 	tsmd->factor= smd->factor;
 	memcpy(tsmd->limit, smd->limit, sizeof(tsmd->limit));
+	strcpy(tsmd->vgroup_name, smd->vgroup_name);
 }
 
 static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)

Modified: trunk/blender/source/blender/modifiers/intern/MOD_smoke.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_smoke.c	2010-05-14 02:27:09 UTC (rev 28755)
+++ trunk/blender/source/blender/modifiers/intern/MOD_smoke.c	2010-05-14 07:09:15 UTC (rev 28756)
@@ -32,6 +32,8 @@
 
 #include "stddef.h"
 
+#include "MEM_guardedalloc.h"
+
 #include "BKE_cdderivedmesh.h"
 #include "BKE_modifier.h"
 #include "BKE_smoke.h"
@@ -52,6 +54,14 @@
 	smd->time = -1;
 }
 
+static void copyData(ModifierData *md, ModifierData *target)
+{
+	SmokeModifierData *smd  = (SmokeModifierData*)md;
+	SmokeModifierData *tsmd = (SmokeModifierData*)target;
+	
+	smokeModifier_copy(smd, tsmd);
+}
+
 static void freeData(ModifierData *md)
 {
 	SmokeModifierData *smd = (SmokeModifierData*) md;
@@ -117,7 +127,7 @@
 							| eModifierTypeFlag_UsesPointCache
 							| eModifierTypeFlag_Single,
 
-	/* copyData */          0,
+	/* copyData */          copyData,
 	/* deformVerts */       deformVerts,
 	/* deformVertsEM */     0,
 	/* deformMatricesEM */  0,





More information about the Bf-blender-cvs mailing list