[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13416] branches/cloth/blender: svn merge -r 13382:13415 https://svn.blender.org/svnroot/bf-blender/trunk/ blender

Daniel Genrich daniel.genrich at gmx.net
Sat Jan 26 22:54:09 CET 2008


Revision: 13416
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13416
Author:   genscher
Date:     2008-01-26 22:54:09 +0100 (Sat, 26 Jan 2008)

Log Message:
-----------
svn merge -r 13382:13415 https://svn.blender.org/svnroot/bf-blender/trunk/blender

Modified Paths:
--------------
    branches/cloth/blender/release/scripts/lightwave_import.py
    branches/cloth/blender/source/blender/blenkernel/BKE_particle.h
    branches/cloth/blender/source/blender/blenkernel/BKE_utildefines.h
    branches/cloth/blender/source/blender/blenkernel/intern/constraint.c
    branches/cloth/blender/source/blender/blenkernel/intern/particle.c
    branches/cloth/blender/source/blender/blenkernel/intern/particle_system.c
    branches/cloth/blender/source/blender/blenlib/intern/storage.c
    branches/cloth/blender/source/blender/blenloader/intern/readfile.c
    branches/cloth/blender/source/blender/include/BDR_sculptmode.h
    branches/cloth/blender/source/blender/include/BIF_transform.h
    branches/cloth/blender/source/blender/include/butspace.h
    branches/cloth/blender/source/blender/include/transform.h
    branches/cloth/blender/source/blender/makesdna/DNA_constraint_types.h
    branches/cloth/blender/source/blender/makesdna/DNA_particle_types.h
    branches/cloth/blender/source/blender/makesdna/DNA_scene_types.h
    branches/cloth/blender/source/blender/python/api2_2x/doc/Render.py
    branches/cloth/blender/source/blender/python/api2_2x/sceneRender.c
    branches/cloth/blender/source/blender/render/extern/include/RE_pipeline.h
    branches/cloth/blender/source/blender/render/intern/include/occlusion.h
    branches/cloth/blender/source/blender/render/intern/include/render_types.h
    branches/cloth/blender/source/blender/render/intern/include/strand.h
    branches/cloth/blender/source/blender/render/intern/include/zbuf.h
    branches/cloth/blender/source/blender/render/intern/source/convertblender.c
    branches/cloth/blender/source/blender/render/intern/source/occlusion.c
    branches/cloth/blender/source/blender/render/intern/source/pipeline.c
    branches/cloth/blender/source/blender/render/intern/source/rendercore.c
    branches/cloth/blender/source/blender/render/intern/source/sss.c
    branches/cloth/blender/source/blender/render/intern/source/strand.c
    branches/cloth/blender/source/blender/render/intern/source/zbuf.c
    branches/cloth/blender/source/blender/src/buttons_object.c
    branches/cloth/blender/source/blender/src/buttons_scene.c
    branches/cloth/blender/source/blender/src/buttons_shading.c
    branches/cloth/blender/source/blender/src/drawaction.c
    branches/cloth/blender/source/blender/src/editaction.c
    branches/cloth/blender/source/blender/src/editconstraint.c
    branches/cloth/blender/source/blender/src/editipo.c
    branches/cloth/blender/source/blender/src/editmesh_tools.c
    branches/cloth/blender/source/blender/src/editnode.c
    branches/cloth/blender/source/blender/src/editobject.c
    branches/cloth/blender/source/blender/src/editseq.c
    branches/cloth/blender/source/blender/src/header_view3d.c
    branches/cloth/blender/source/blender/src/outliner.c
    branches/cloth/blender/source/blender/src/previewrender.c
    branches/cloth/blender/source/blender/src/sculptmode-stroke.c
    branches/cloth/blender/source/blender/src/sculptmode.c
    branches/cloth/blender/source/blender/src/transform.c

Modified: branches/cloth/blender/release/scripts/lightwave_import.py
===================================================================
--- branches/cloth/blender/release/scripts/lightwave_import.py	2008-01-26 20:50:34 UTC (rev 13415)
+++ branches/cloth/blender/release/scripts/lightwave_import.py	2008-01-26 21:54:09 UTC (rev 13416)
@@ -656,7 +656,12 @@
 # ima, IMAG, g_IMAG refers to clip dictionary 'ID' entries: refer to blok and surf
 	clip_dict = {}
 	data = cStringIO.StringIO(lwochunk.read())
-	image_index, = struct.unpack(">L", data.read(4))
+	data_str = data.read(4)
+	if len(data_str) < 4: # can be zero also??? :/
+		# Should not happen but lw can import so we should too
+		return 
+	
+	image_index, = struct.unpack(">L", data_str)
 	clip_dict['ID'] = image_index
 	i = 4
 	while(i < lwochunk.chunksize):
@@ -1634,11 +1639,11 @@
 		return
 	
 	Blender.Window.FileSelector(read, "Import LWO", '*.lwo')
-	
 
 if __name__=='__main__':
 	main()
 
+
 # Cams debugging lwo loader
 """
 TIME= Blender.sys.time()

Modified: branches/cloth/blender/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/BKE_particle.h	2008-01-26 20:50:34 UTC (rev 13415)
+++ branches/cloth/blender/source/blender/blenkernel/BKE_particle.h	2008-01-26 21:54:09 UTC (rev 13416)
@@ -215,7 +215,7 @@
 void psys_free(struct Object * ob, struct ParticleSystem * psys);
 void psys_free_children(struct ParticleSystem *psys);
 
-void psys_render_set(struct Object *ob, struct ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy);
+void psys_render_set(struct Object *ob, struct ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy, int timeoffset);
 void psys_render_restore(struct Object *ob, struct ParticleSystem *psys);
 int psys_render_simplify_distribution(struct ParticleThreadContext *ctx, int tot);
 int psys_render_simplify_params(struct ParticleSystem *psys, struct ChildParticle *cpa, float *params);

Modified: branches/cloth/blender/source/blender/blenkernel/BKE_utildefines.h
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/BKE_utildefines.h	2008-01-26 20:50:34 UTC (rev 13415)
+++ branches/cloth/blender/source/blender/blenkernel/BKE_utildefines.h	2008-01-26 21:54:09 UTC (rev 13416)
@@ -112,6 +112,7 @@
 #define VECADD(v1,v2,v3) 	{*(v1)= *(v2) + *(v3); *(v1+1)= *(v2+1) + *(v3+1); *(v1+2)= *(v2+2) + *(v3+2);}
 #define VECSUB(v1,v2,v3) 	{*(v1)= *(v2) - *(v3); *(v1+1)= *(v2+1) - *(v3+1); *(v1+2)= *(v2+2) - *(v3+2);}
 #define VECADDFAC(v1,v2,v3,fac) {*(v1)= *(v2) + *(v3)*(fac); *(v1+1)= *(v2+1) + *(v3+1)*(fac); *(v1+2)= *(v2+2) + *(v3+2)*(fac);}
+#define QUATADDFAC(v1,v2,v3,fac) {*(v1)= *(v2) + *(v3)*(fac); *(v1+1)= *(v2+1) + *(v3+1)*(fac); *(v1+2)= *(v2+2) + *(v3+2)*(fac); *(v1+3)= *(v2+3) + *(v3+3)*(fac);}
 
 #define INPR(v1, v2)		( (v1)[0]*(v2)[0] + (v1)[1]*(v2)[1] + (v1)[2]*(v2)[2] )
 

Modified: branches/cloth/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/constraint.c	2008-01-26 20:50:34 UTC (rev 13415)
+++ branches/cloth/blender/source/blender/blenkernel/intern/constraint.c	2008-01-26 21:54:09 UTC (rev 13416)
@@ -2382,6 +2382,118 @@
 	locktrack_evaluate /* evaluate */
 };
 
+/* ---------- Limit Distance Constraint ----------- */
+
+static void distlimit_new_data (void *cdata)
+{
+	bDistLimitConstraint *data= (bDistLimitConstraint *)cdata;
+	
+	data->dist= 0.0;
+}
+
+static void distlimit_get_tars (bConstraint *con, ListBase *list)
+{
+	if (con && list) {
+		bDistLimitConstraint *data= con->data;
+		bConstraintTarget *ct;
+		
+		/* standard target-getting macro for single-target constraints */
+		SINGLETARGET_GET_TARS(con, data->tar, data->subtarget, ct, list)
+	}
+}
+
+static void distlimit_flush_tars (bConstraint *con, ListBase *list, short nocopy)
+{
+	if (con && list) {
+		bDistLimitConstraint *data= con->data;
+		bConstraintTarget *ct= list->first;
+		
+		/* the following macro is used for all standard single-target constraints */
+		SINGLETARGET_FLUSH_TARS(con, data->tar, data->subtarget, ct, list, nocopy)
+	}
+}
+
+static void distlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets)
+{
+	bDistLimitConstraint *data= con->data;
+	bConstraintTarget *ct= targets->first;
+	
+	/* only evaluate if there is a target */
+	if (VALID_CONS_TARGET(ct)) {
+		float dvec[3], dist=0.0f, sfac=1.0f;
+		short clamp_surf= 0;
+		
+		/* calculate our current distance from the target */
+		dist= VecLenf(cob->matrix[3], ct->matrix[3]);
+		
+		/* set distance (flag is only set when user demands it) */
+		if (data->dist == 0)
+			data->dist= dist;
+		
+		/* check if we're which way to clamp from, and calculate interpolation factor (if needed) */
+		if (data->mode == LIMITDIST_OUTSIDE) {
+			/* if inside, then move to surface */
+			if (dist <= data->dist) {
+				clamp_surf= 1;
+				sfac= data->dist / dist;
+			}
+			/* if soft-distance is enabled, start fading once owner is dist+softdist from the target */
+			else if (data->flag & LIMITDIST_USESOFT) {
+				if (dist <= (data->dist + data->soft)) {
+					
+				}
+			}
+		}
+		else if (data->mode == LIMITDIST_INSIDE) {
+			/* if outside, then move to surface */
+			if (dist >= data->dist) {
+				clamp_surf= 1;
+				sfac= data->dist / dist;
+			}
+			/* if soft-distance is enabled, start fading once owner is dist-soft from the target */
+			else if (data->flag & LIMITDIST_USESOFT) {
+				// FIXME: there's a problem with "jumping" when this kicks in
+				if (dist >= (data->dist - data->soft)) {
+					sfac = data->soft*(1.0 - exp(-(dist - data->dist)/data->soft)) + data->dist;
+					sfac /= dist;
+					
+					clamp_surf= 1;
+				}
+			}
+		}
+		else {
+			if (IS_EQ(dist, data->dist)==0) {
+				clamp_surf= 1;
+				sfac= data->dist / dist;
+			}
+		}
+		
+		/* clamp to 'surface' (i.e. move owner so that dist == data->dist) */
+		if (clamp_surf) {
+			/* simply interpolate along line formed by target -> owner */
+			VecLerpf(dvec, ct->matrix[3], cob->matrix[3], sfac);
+			
+			/* copy new vector onto owner */
+			VECCOPY(cob->matrix[3], dvec);
+		}
+	}
+}
+
+static bConstraintTypeInfo CTI_DISTLIMIT = {
+	CONSTRAINT_TYPE_DISTLIMIT, /* type */
+	sizeof(bDistLimitConstraint), /* size */
+	"Limit Distance", /* name */
+	"bDistLimitConstraint", /* struct name */
+	NULL, /* free data */
+	NULL, /* relink data */
+	NULL, /* copy data */
+	distlimit_new_data, /* new data */
+	distlimit_get_tars, /* get constraint targets */
+	distlimit_flush_tars, /* flush constraint targets */
+	default_get_tarmat, /* get a target matrix */
+	distlimit_evaluate /* evaluate */
+};
+
 /* ---------- Stretch To ------------ */
 
 static void stretchto_new_data (void *cdata)
@@ -3067,12 +3179,12 @@
 	constraintsTypeInfo[11]= &CTI_PYTHON;			/* Python/Script Constraint */
 	constraintsTypeInfo[12]= &CTI_ACTION;			/* Action Constraint */
 	constraintsTypeInfo[13]= &CTI_LOCKTRACK;		/* Locked-Track Constraint */
-	constraintsTypeInfo[14]= NULL;					/* 'Distance Limit' Constraint */
+	constraintsTypeInfo[14]= &CTI_DISTLIMIT;		/* Limit Distance Constraint */
 	constraintsTypeInfo[15]= &CTI_STRETCHTO; 		/* StretchTo Constaint */ 
 	constraintsTypeInfo[16]= &CTI_MINMAX;  			/* Floor Constraint */
 	constraintsTypeInfo[17]= &CTI_RIGIDBODYJOINT;	/* RigidBody Constraint */
 	constraintsTypeInfo[18]= &CTI_CLAMPTO; 			/* ClampTo Constraint */	
-	constraintsTypeInfo[19]= &CTI_TRANSFORM;		/* Transformation Constraint */	
+	constraintsTypeInfo[19]= &CTI_TRANSFORM;		/* Transformation Constraint */
 }
 
 /* This function should be used for getting the appropriate type-info when only

Modified: branches/cloth/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/particle.c	2008-01-26 20:50:34 UTC (rev 13415)
+++ branches/cloth/blender/source/blender/blenkernel/intern/particle.c	2008-01-26 21:54:09 UTC (rev 13416)
@@ -394,6 +394,7 @@
 	int winx, winy;
 
 	int dosimplify;
+	int timeoffset;
 	ParticleRenderElem *elems;
 	int *origindex;
 } ParticleRenderData;
@@ -455,13 +456,15 @@
 	return area;
 }
 
-void psys_render_set(Object *ob, ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy)
+void psys_render_set(Object *ob, ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy, int timeoffset)
 {
 	ParticleRenderData*data;
 	ParticleSystemModifierData *psmd= psys_get_modifier(ob, psys);
 
 	if(!G.rendering)
 		return;
+	if(psys->renderdata)
+		return;
 
 	data= MEM_callocN(sizeof(ParticleRenderData), "ParticleRenderData");
 
@@ -489,6 +492,8 @@
 	data->winx= winx;
 	data->winy= winy;
 
+	data->timeoffset= timeoffset;
+
 	psys->renderdata= data;
 }
 
@@ -554,9 +559,15 @@
 
 	if(part->draw_as!=PART_DRAW_PATH || !(part->draw & PART_DRAW_REN_STRAND))
 		return tot;
-	if(!ctx->psys->renderdata || !(part->simplify_flag & PART_SIMPLIFY_ENABLE))
+	if(!ctx->psys->renderdata)
 		return tot;
 
+	data= ctx->psys->renderdata;
+	if(data->timeoffset)
+		return 0;
+	if(!(part->simplify_flag & PART_SIMPLIFY_ENABLE))
+		return tot;
+
 	mvert= dm->getVertArray(dm);
 	mface= dm->getFaceArray(dm);
 	origindex= dm->getFaceDataArray(dm, CD_ORIGINDEX);
@@ -571,7 +582,6 @@
 	facetotvert= MEM_callocN(sizeof(int)*totorigface, "SimplifyFaceArea");
 	elems= MEM_callocN(sizeof(ParticleRenderElem)*totorigface, "SimplifyFaceElem");
 
-	data= ctx->psys->renderdata;
 	if(data->elems)
 		MEM_freeN(data->elems);
 
@@ -2076,7 +2086,7 @@
 			rough_t = t;
 
 		if(part->rough1 != 0.0 && pa_rough1 != 0.0)
-				do_rough(orco, rough_t, pa_rough1*part->rough1, part->rough1_size, 0.0, (ParticleKey*)state);
+			do_rough(orco, rough_t, pa_rough1*part->rough1, part->rough1_size, 0.0, (ParticleKey*)state);
 
 		if(part->rough2 != 0.0 && pa_rough2 != 0.0)
 			do_rough(cpa->rand, rough_t, pa_rough2*part->rough2, part->rough2_size, part->rough2_thres, (ParticleKey*)state);
@@ -2262,6 +2272,7 @@
 	float sel_col[3];
 	float nosel_col[3];
 	float length, vec[3];
+	float *vg_effector= NULL, effector=0.0f;
 
 	/* we don't have anything valid to create paths from so let's quit here */
 	if((psys->flag & PSYS_HAIR_DONE)==0 && (psys->flag & PSYS_KEYED)==0)
@@ -2310,6 +2321,9 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list