diff options
Diffstat (limited to 'source/blender/editors/physics')
-rw-r--r-- | source/blender/editors/physics/SConscript | 2 | ||||
-rw-r--r-- | source/blender/editors/physics/particle_edit.c | 12 | ||||
-rw-r--r-- | source/blender/editors/physics/particle_object.c | 8 |
3 files changed, 14 insertions, 8 deletions
diff --git a/source/blender/editors/physics/SConscript b/source/blender/editors/physics/SConscript index 188416eb04c..a478b2afb1c 100644 --- a/source/blender/editors/physics/SConscript +++ b/source/blender/editors/physics/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../gpu ../../blenloader' +incs += ' ../../gpu ../../blenloader ../../bmesh' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' defs = '' diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index dbf03e34c32..9929de8e89c 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -1064,7 +1064,7 @@ static void recalc_emitter_field(Object *ob, ParticleSystem *psys) BLI_kdtree_free(edit->emitter_field); - totface=dm->getNumFaces(dm); + totface=dm->getNumTessFaces(dm); /*totvert=dm->getNumVerts(dm);*/ /*UNSUED*/ edit->emitter_cosnos=MEM_callocN(totface*6*sizeof(float),"emitter cosnos"); @@ -1075,7 +1075,7 @@ static void recalc_emitter_field(Object *ob, ParticleSystem *psys) nor=vec+3; for(i=0; i<totface; i++, vec+=6, nor+=6) { - MFace *mface=dm->getFaceData(dm,i,CD_MFACE); + MFace *mface=dm->getTessFaceData(dm,i,CD_MFACE); MVert *mvert; mvert=dm->getVertData(dm,mface->v1,CD_MVERT); @@ -2563,7 +2563,7 @@ static void PE_mirror_x(Scene *scene, Object *ob, int tagged) PTCacheEditPoint *newpoint, *new_points; POINT_P; KEY_K; HairKey *hkey; - int *mirrorfaces; + int *mirrorfaces = NULL; int rotation, totpart, newtotpart; if(psys->flag & PSYS_GLOBAL_HAIR) @@ -3067,6 +3067,8 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, return 0; } + /* BMESH_ONLY, deform dm may not have tessface */ + DM_ensure_tessface(dm); if(pa_minmax==0){ @@ -3079,8 +3081,8 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, copy_v3_v3(p_max,pa_minmax+3); } - totface=dm->getNumFaces(dm); - mface=dm->getFaceDataArray(dm,CD_MFACE); + totface=dm->getNumTessFaces(dm); + mface=dm->getTessFaceDataArray(dm,CD_MFACE); mvert=dm->getVertDataArray(dm,CD_MVERT); /* lets intersect the faces */ diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c index b26661da4a2..5732f6419d1 100644 --- a/source/blender/editors/physics/particle_object.c +++ b/source/blender/editors/physics/particle_object.c @@ -645,10 +645,14 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) if(psmd->dm->deformedOnly) /* we don't want to mess up psmd->dm when converting to global coordinates below */ - dm= CDDM_copy(psmd->dm); + dm= CDDM_copy(psmd->dm, 0); else dm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); + /* BMESH_ONLY, deform dm may not have tessface */ + DM_ensure_tessface(dm); + + numverts = dm->getNumVerts (dm); /* convert to global coordinates */ @@ -671,7 +675,7 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys) continue; } - mface = CDDM_get_face(dm,nearest.index); + mface = CDDM_get_tessface(dm,nearest.index); copy_v3_v3(v[0], CDDM_get_vert(dm,mface->v1)->co); copy_v3_v3(v[1], CDDM_get_vert(dm,mface->v2)->co); |