[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