[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