[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25499] trunk/blender: * Rest length parameter for harmonic force springs.

Janne Karhu jhkarh at utu.fi
Mon Dec 21 12:19:07 CET 2009


Revision: 25499
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25499
Author:   jhk
Date:     2009-12-21 12:19:07 +0100 (Mon, 21 Dec 2009)

Log Message:
-----------
* Rest length parameter for harmonic force springs. Implementation is a slightly modified version of the patch provided by Ra?\195?\186l Fern?\195?\161ndez Hern?\195?\161ndez (Farsthary).
* Also added a "multiple springs" option to use every effector point as a harmonic spring instead of just one.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_physics_common.py
    trunk/blender/source/blender/blenkernel/intern/effect.c
    trunk/blender/source/blender/makesdna/DNA_object_force.h
    trunk/blender/source/blender/makesrna/intern/rna_object_force.c

Modified: trunk/blender/release/scripts/ui/properties_physics_common.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_physics_common.py	2009-12-21 10:50:32 UTC (rev 25498)
+++ trunk/blender/release/scripts/ui/properties_physics_common.py	2009-12-21 11:19:07 UTC (rev 25499)
@@ -150,6 +150,7 @@
         col.prop(field, "flow")
     elif field.type == 'HARMONIC':
         col.prop(field, "harmonic_damping", text="Damping")
+        col.prop(field, "rest_length")
     elif field.type == 'VORTEX' and field.shape != 'POINT':
         col.prop(field, "inflow")
     elif field.type == 'DRAG':
@@ -163,6 +164,8 @@
     col.prop(field, "seed")
     if field.type == 'TURBULENCE':
         col.prop(field, "global_coordinates", text="Global")
+    elif field.type == 'HARMONIC':
+        col.prop(field, "multiple_springs")
 
     split = layout.split()
 

Modified: trunk/blender/source/blender/blenkernel/intern/effect.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/effect.c	2009-12-21 10:50:32 UTC (rev 25498)
+++ trunk/blender/source/blender/blenkernel/intern/effect.c	2009-12-21 11:19:07 UTC (rev 25499)
@@ -128,7 +128,6 @@
 	pd->seed = ((unsigned int)(ceil(PIL_check_seconds_timer()))+1) % 128;
 	pd->f_strength = 1.0f;
 	pd->f_damp = 1.0f;
-	pd->f_size = 1.0f;
 
 	/* set sensible defaults based on type */
 	switch(type) {
@@ -139,6 +138,9 @@
 			pd->shape = PFIELD_SHAPE_PLANE;
 			pd->f_flow = 1.0f; /* realistic wind behavior */
 			break;
+		case PFIELD_TEXTURE:
+			pd->f_size = 1.0f;
+			break;
 	}
 	pd->flag = PFIELD_DO_LOCATION|PFIELD_DO_ROTATION;
 
@@ -693,6 +695,10 @@
 		sub_v3_v3v3(efd->vec_to_point, point->loc, efd->loc);
 		efd->distance = len_v3(efd->vec_to_point);
 
+		/* rest length for harmonic effector, will have to see later if this could be extended to other effectors */
+		if(eff->pd->forcefield == PFIELD_HARMONIC && eff->pd->f_size)
+			mul_v3_fl(efd->vec_to_point, (efd->distance-eff->pd->f_size)/efd->distance);
+
 		if(eff->flag & PE_USE_NORMAL_DATA) {
 			VECCOPY(efd->vec_to_point2, efd->vec_to_point);
 			VECCOPY(efd->nor2, efd->nor);
@@ -735,7 +741,7 @@
 			*/
 			efd->charge = eff->pd->f_strength;
 		}
-		else if(eff->pd->forcefield == PFIELD_HARMONIC) {
+		else if(eff->pd->forcefield == PFIELD_HARMONIC && (eff->pd->flag & PFIELD_MULTIPLE_SPRINGS)==0) {
 			/* every particle is mapped to only one harmonic effector particle */
 			*p= point->index % eff->psys->totpart;
 			*tot= *p + 1;

Modified: trunk/blender/source/blender/makesdna/DNA_object_force.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_object_force.h	2009-12-21 10:50:32 UTC (rev 25498)
+++ trunk/blender/source/blender/makesdna/DNA_object_force.h	2009-12-21 11:19:07 UTC (rev 25499)
@@ -71,7 +71,7 @@
 	float f_flow;		/* How much force is converted into "air flow", i.e.	*/
 						/* force used as the velocity of surrounding medium.	*/
 
-	float f_size;
+	float f_size;		/* Noise size for noise effector, restlength for harmonic effector */
 
 	/* fall-off */
 	float f_power;		/* The power law - real gravitation is 2 (square)	*/
@@ -320,6 +320,7 @@
 #define PFIELD_TEX_OBJECT		64
 #define PFIELD_GLOBAL_CO		64			/* used for turbulence */
 #define PFIELD_TEX_2D			128
+#define PFIELD_MULTIPLE_SPRINGS	128			/* used for harmonic force */
 #define PFIELD_USEMIN			256
 #define PFIELD_USEMAXR			512
 #define PFIELD_USEMINR			1024

Modified: trunk/blender/source/blender/makesrna/intern/rna_object_force.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object_force.c	2009-12-21 10:50:32 UTC (rev 25498)
+++ trunk/blender/source/blender/makesrna/intern/rna_object_force.c	2009-12-21 11:19:07 UTC (rev 25499)
@@ -1109,6 +1109,12 @@
 	RNA_def_property_range(prop, 0.0f, 10.0f);
 	RNA_def_property_ui_text(prop, "Size", "Size of the noise");
 	RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
+
+	prop= RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "f_size");
+	RNA_def_property_range(prop, 0.0f, 1000.0f);
+	RNA_def_property_ui_text(prop, "Rest Length", "Rest length of the harmonic force");
+	RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
 	
 	prop= RNA_def_property(srna, "falloff_power", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "f_power");
@@ -1221,6 +1227,11 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_VISIBILITY);
 	RNA_def_property_ui_text(prop, "Absorption", "Force gets absorbed by collision objects");
 	RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
+
+	prop= RNA_def_property(srna, "multiple_springs", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_MULTIPLE_SPRINGS);
+	RNA_def_property_ui_text(prop, "Multiple Springs", "Every point is effected by multiple springs");
+	RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
 	
 	/* Pointer */
 	





More information about the Bf-blender-cvs mailing list