Revision: 23586 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23586 Author: blendix Date: 2009-10-01 18:30:05 +0200 (Thu, 01 Oct 2009)
Log Message: ----------- Fix crashes with .blend files saved in particle mode, derivedmesh can't be assumed to be made yet then. Modified Paths: -------------- trunk/blender/source/blender/editors/physics/particle_edit.c Modified: trunk/blender/source/blender/editors/physics/particle_edit.c =================================================================== --- trunk/blender/source/blender/editors/physics/particle_edit.c 2009-10-01 16:06:10 UTC (rev 23585) +++ trunk/blender/source/blender/editors/physics/particle_edit.c 2009-10-01 16:30:05 UTC (rev 23586) @@ -110,14 +110,11 @@ { Scene *scene= CTX_data_scene(C); Object *ob= CTX_data_active_object(C); - PTCacheEdit *edit; - if(!scene || !ob) + if(!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) return 0; - edit= PE_get_current(scene, ob); - - return (edit && (ob->mode & OB_MODE_PARTICLE_EDIT)); + return (PE_get_current(scene, ob) != NULL); } int PE_hair_poll(bContext *C) @@ -126,12 +123,12 @@ Object *ob= CTX_data_active_object(C); PTCacheEdit *edit; - if(!scene || !ob) + if(!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) return 0; edit= PE_get_current(scene, ob); - return (edit && edit->psys && (ob->mode & OB_MODE_PARTICLE_EDIT)); + return (edit && edit->psys); } int PE_poll_3dview(bContext *C) @@ -675,6 +672,9 @@ psmd= psys_get_modifier(ob, psys); totpart= psys->totpart; + if(!psmd->dm) + return; + tree= BLI_kdtree_new(totpart); /* insert particles into kd tree */ @@ -803,6 +803,9 @@ edit= psys->edit; psmd= psys_get_modifier(ob, psys); + if(!edit->mirror_cache || !psmd->dm) + return; + /* we delay settings the PARS_EDIT_RECALC for mirrored particles * to avoid doing mirror twice */ LOOP_POINTS { @@ -841,6 +844,9 @@ psys = edit->psys; psmd = psys_get_modifier(ob,psys); + if(!psmd->dm) + return; + LOOP_EDITED_POINTS { psys_mat_hair_to_object(ob, psmd->dm, psys->part->from, psys->particles + p, hairmat); @@ -994,6 +1000,9 @@ float *vec, *nor; int i, totface, totvert; + if(!dm) + return; + if(edit->emitter_cosnos) MEM_freeN(edit->emitter_cosnos); @@ -1079,7 +1088,7 @@ POINT_P; KEY_K; float hairmat[4][4]; - if(psys==0 || psys->edit==0) + if(psys==0 || psys->edit==0 || psmd->dm==NULL) return; LOOP_POINTS { @@ -2444,6 +2453,8 @@ return; psmd= psys_get_modifier(ob, psys); + if(!psmd->dm) + return; mirrorfaces= mesh_get_x_mirror_faces(ob, NULL); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs