Fix #23307: accessing FluidParticles.settings causes crash.

This commit is contained in:
Brecht Van Lommel
2010-08-15 08:53:28 +00:00
parent 4959f424b8
commit dd9ce7ba04

View File

@@ -239,12 +239,25 @@ static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr)
particle_recalc(bmain, scene, ptr, PSYS_RECALC_CHILD);
}
static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget *target)
{
ParticleSystem *psys;
ParticleTarget *pt;
for(psys=ob->particlesystem.first; psys; psys=psys->next)
for(pt=psys->targets.first; pt; pt=pt->next)
if(pt == target)
return psys;
return NULL;
}
static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if(ptr->type==&RNA_ParticleTarget) {
ParticleTarget *pt = (ParticleTarget*)ptr->data;
Object *ob = (Object*)ptr->id.data;
ParticleSystem *kpsys=NULL, *psys=psys_get_current(ob);
ParticleTarget *pt = (ParticleTarget*)ptr->data;
ParticleSystem *kpsys=NULL, *psys=rna_particle_system_for_target(ob, pt);
if(pt->ob==ob || pt->ob==NULL) {
kpsys = BLI_findlink(&ob->particlesystem, pt->psys-1);
@@ -277,7 +290,8 @@ static void rna_Particle_target_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if(ptr->type==&RNA_ParticleTarget) {
Object *ob = (Object*)ptr->id.data;
ParticleSystem *psys = psys_get_current(ob);
ParticleTarget *pt = (ParticleTarget*)ptr->data;
ParticleSystem *psys = rna_particle_system_for_target(ob, pt);
psys->recalc = PSYS_RECALC_REDO;
@@ -302,16 +316,15 @@ static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *pt
}
static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
{
Object *ob= (Object*)ptr->id.data;
ParticleSettings *part = psys_get_current(ob)->part;
ParticleSystem *psys= (ParticleSystem*)ptr->data;
ParticleSettings *part = psys->part;
return rna_pointer_inherit_refine(ptr, &RNA_ParticleSettings, part);
}
static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value)
{
Object *ob= (Object*)ptr->id.data;
ParticleSystem *psys = psys_get_current(ob);
ParticleSystem *psys= (ParticleSystem*)ptr->data;
if(psys->part)
psys->part->id.us--;