Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/physics/particle_edit.c
| Show First 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
| /**************************** utilities *******************************/ | /**************************** utilities *******************************/ | ||||
| bool PE_poll(bContext *C) | bool PE_poll(bContext *C) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Object *ob = CTX_data_active_object(C); | Object *ob = CTX_data_active_object(C); | ||||
| if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) { | if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) { | ||||
| return 0; | return false; | ||||
| } | } | ||||
| return (PE_get_current(scene, ob) != NULL); | |||||
| PTCacheEdit *edit = PE_get_current(scene, ob); | |||||
| if (edit == NULL) { | |||||
| return false; | |||||
| } | |||||
| if (edit->psmd_eval == NULL || edit->psmd_eval->mesh_final == NULL) { | |||||
| return false; | |||||
| } | |||||
| return true; | |||||
| } | } | ||||
| bool PE_hair_poll(bContext *C) | bool PE_hair_poll(bContext *C) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Object *ob = CTX_data_active_object(C); | Object *ob = CTX_data_active_object(C); | ||||
| PTCacheEdit *edit; | |||||
| if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) { | if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) { | ||||
| return 0; | return false; | ||||
| } | |||||
| PTCacheEdit *edit = PE_get_current(scene, ob); | |||||
| if (edit == NULL || edit->psys == NULL) { | |||||
| return false; | |||||
| } | |||||
| if (edit->psmd_eval == NULL || edit->psmd_eval->mesh_final == NULL) { | |||||
| return false; | |||||
| } | } | ||||
| edit = PE_get_current(scene, ob); | |||||
| return (edit && edit->psys); | return true; | ||||
| } | } | ||||
| bool PE_poll_view3d(bContext *C) | bool PE_poll_view3d(bContext *C) | ||||
| { | { | ||||
| ScrArea *sa = CTX_wm_area(C); | ScrArea *sa = CTX_wm_area(C); | ||||
| ARegion *ar = CTX_wm_region(C); | ARegion *ar = CTX_wm_region(C); | ||||
| return (PE_poll(C) && (sa && sa->spacetype == SPACE_VIEW3D) && | return (PE_poll(C) && (sa && sa->spacetype == SPACE_VIEW3D) && | ||||
| ▲ Show 20 Lines • Show All 955 Lines • ▼ Show 20 Lines | static void PE_apply_mirror(Object *ob, ParticleSystem *psys) | ||||
| if (!psys) { | if (!psys) { | ||||
| return; | return; | ||||
| } | } | ||||
| edit = psys->edit; | edit = psys->edit; | ||||
| psmd_eval = edit->psmd_eval; | psmd_eval = edit->psmd_eval; | ||||
| if (!psmd_eval->mesh_final) { | if (psmd_eval == NULL || psmd_eval->mesh_final == NULL) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (!edit->mirror_cache) { | if (!edit->mirror_cache) { | ||||
| PE_update_mirror_cache(ob, psys); | PE_update_mirror_cache(ob, psys); | ||||
| } | } | ||||
| if (!edit->mirror_cache) { | if (!edit->mirror_cache) { | ||||
| ▲ Show 20 Lines • Show All 115 Lines • ▼ Show 20 Lines | static void pe_deflect_emitter(Scene *scene, Object *ob, PTCacheEdit *edit) | ||||
| if (edit == NULL || edit->psys == NULL || (pset->flag & PE_DEFLECT_EMITTER) == 0 || | if (edit == NULL || edit->psys == NULL || (pset->flag & PE_DEFLECT_EMITTER) == 0 || | ||||
| (edit->psys->flag & PSYS_GLOBAL_HAIR)) { | (edit->psys->flag & PSYS_GLOBAL_HAIR)) { | ||||
| return; | return; | ||||
| } | } | ||||
| psys = edit->psys; | psys = edit->psys; | ||||
| if (!edit->psmd_eval->mesh_final) { | if (edit->psmd_eval == NULL || edit->psmd_eval->mesh_final == NULL) { | ||||
| return; | return; | ||||
| } | } | ||||
| DeflectEmitterIter iter_data; | DeflectEmitterIter iter_data; | ||||
| iter_data.object = ob; | iter_data.object = ob; | ||||
| iter_data.psys = psys; | iter_data.psys = psys; | ||||
| iter_data.edit = edit; | iter_data.edit = edit; | ||||
| iter_data.dist = dist; | iter_data.dist = dist; | ||||
| ▲ Show 20 Lines • Show All 255 Lines • ▼ Show 20 Lines | |||||
| void update_world_cos(Depsgraph *UNUSED(depsgraph), Object *ob, PTCacheEdit *edit) | void update_world_cos(Depsgraph *UNUSED(depsgraph), Object *ob, PTCacheEdit *edit) | ||||
| { | { | ||||
| ParticleSystem *psys = edit->psys; | ParticleSystem *psys = edit->psys; | ||||
| ParticleSystemModifierData *psmd_eval = edit->psmd_eval; | ParticleSystemModifierData *psmd_eval = edit->psmd_eval; | ||||
| POINT_P; | POINT_P; | ||||
| KEY_K; | KEY_K; | ||||
| float hairmat[4][4]; | float hairmat[4][4]; | ||||
| if (psys == 0 || psys->edit == 0 || psmd_eval->mesh_final == NULL) { | if (psys == 0 || psys->edit == 0 || psmd_eval == NULL || psmd_eval->mesh_final == NULL) { | ||||
| return; | return; | ||||
| } | } | ||||
| LOOP_POINTS | LOOP_POINTS | ||||
| { | { | ||||
| if (!(psys->flag & PSYS_GLOBAL_HAIR)) { | if (!(psys->flag & PSYS_GLOBAL_HAIR)) { | ||||
| psys_mat_hair_to_global( | psys_mat_hair_to_global( | ||||
| ob, psmd_eval->mesh_final, psys->part->from, psys->particles + p, hairmat); | ob, psmd_eval->mesh_final, psys->part->from, psys->particles + p, hairmat); | ||||
| ▲ Show 20 Lines • Show All 4,016 Lines • Show Last 20 Lines | |||||