Fix #23307: accessing FluidParticles.settings causes crash.
This commit is contained in:
@@ -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--;
|
||||
|
||||
Reference in New Issue
Block a user