[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50116] trunk/blender: Fix #32201: particle size compatibility broken for object/group duplication.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Aug 22 15:10:43 CEST 2012


Revision: 50116
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50116
Author:   blendix
Date:     2012-08-22 13:10:43 +0000 (Wed, 22 Aug 2012)
Log Message:
-----------
Fix #32201: particle size compatibility broken for object/group duplication.

After 2.63 there was a bugfix to take object scale into account for the duplicated
objects, but this breaks compatibility on earlier files. Now there is an option to
control if the scale should be used or not.

Scale is used by default on newer files, and not used on older ones.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_particle.py
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_particle_types.h
    trunk/blender/source/blender/makesrna/intern/rna_particle.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_particle.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_particle.py	2012-08-22 13:10:37 UTC (rev 50115)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_particle.py	2012-08-22 13:10:43 UTC (rev 50116)
@@ -849,6 +849,7 @@
             sub = col.row()
             sub.prop(part, "use_global_dupli")
             sub.prop(part, "use_rotation_dupli")
+            sub.prop(part, "use_scale_dupli")
         elif part.render_type == 'GROUP':
             col.prop(part, "dupli_group")
             split = layout.split()
@@ -865,6 +866,7 @@
             sub.active = (part.use_whole_group is False)
             sub.prop(part, "use_global_dupli")
             sub.prop(part, "use_rotation_dupli")
+            sub.prop(part, "use_scale_dupli")
 
             if part.use_group_count and not part.use_whole_group:
                 row = layout.row()

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2012-08-22 13:10:37 UTC (rev 50115)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2012-08-22 13:10:43 UTC (rev 50116)
@@ -1469,6 +1469,18 @@
 					quat_to_mat4(obmat, q);
 					obmat[3][3] = 1.0f;
 					
+					/* add scaling if requested */
+					if ((part->draw & PART_DRAW_NO_SCALE_OB) == 0)
+						mult_m4_m4m4(obmat, obmat, size_mat);
+				}
+				else if (part->draw & PART_DRAW_NO_SCALE_OB) {
+					/* remove scaling */
+					float size_mat[4][4], original_size[3];
+
+					mat4_to_size(original_size, obmat);
+					size_to_mat4(size_mat, original_size);
+					invert_m4(size_mat);
+
 					mult_m4_m4m4(obmat, obmat, size_mat);
 				}
 				

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-08-22 13:10:37 UTC (rev 50115)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-08-22 13:10:43 UTC (rev 50116)
@@ -7925,10 +7925,17 @@
 	}
 
 	if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 14)) {
+		ParticleSettings *part;
 		bNodeTreeType *ntreetype = ntreeGetType(NTREE_COMPOSIT);
 
 		if (ntreetype && ntreetype->foreach_nodetree)
 			ntreetype->foreach_nodetree(main, NULL, do_version_ntree_keying_despill_balance);
+
+		/* keep compatibility for dupliobject particle size */
+		for (part=main->particle.first; part; part=part->id.next)
+			if (ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR))
+				if ((part->draw & PART_DRAW_ROTATE_OB) == 0)
+					part->draw |= PART_DRAW_NO_SCALE_OB;
 	}
 
 	if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 17)) {

Modified: trunk/blender/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_particle_types.h	2012-08-22 13:10:37 UTC (rev 50115)
+++ trunk/blender/source/blender/makesdna/DNA_particle_types.h	2012-08-22 13:10:43 UTC (rev 50116)
@@ -154,7 +154,8 @@
 	short type, from, distr, texact;
 	/* physics modes */
 	short phystype, rotmode, avemode, reactevent;
-	short draw, draw_as, draw_size, childtype;
+	int draw, pad1;
+	short draw_as, draw_size, childtype, pad2;
 	short ren_as, subframes, draw_col;
 	/* number of path segments, power of 2 except */
 	short draw_step, ren_step;
@@ -398,6 +399,7 @@
 #define PART_DRAW_MAT_COL		(1<<13) /* deprecated, but used in do_versions */
 #define PART_DRAW_WHOLE_GR		(1<<14)
 #define PART_DRAW_REN_STRAND	(1<<15)
+#define PART_DRAW_NO_SCALE_OB 	(1<<16) /* used with dupliobjects/groups */
 
 /* part->draw_col */
 #define PART_DRAW_COL_NONE		0

Modified: trunk/blender/source/blender/makesrna/intern/rna_particle.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_particle.c	2012-08-22 13:10:37 UTC (rev 50115)
+++ trunk/blender/source/blender/makesrna/intern/rna_particle.c	2012-08-22 13:10:43 UTC (rev 50116)
@@ -1846,6 +1846,11 @@
 	                         "particle rotation axis)");
 	RNA_def_property_update(prop, 0, "rna_Particle_redo");
 
+	prop = RNA_def_property(srna, "use_scale_dupli", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_negative_sdna(prop, NULL, "draw", PART_DRAW_NO_SCALE_OB);
+	RNA_def_property_ui_text(prop, "Scale", "Use object's scale for duplication");
+	RNA_def_property_update(prop, 0, "rna_Particle_redo");
+
 	prop = RNA_def_property(srna, "use_render_adaptive", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_REN_ADAPT);
 	RNA_def_property_ui_text(prop, "Adaptive render", "Draw steps of the particle path");




More information about the Bf-blender-cvs mailing list