Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/physics/particle_object.c')
-rw-r--r--source/blender/editors/physics/particle_object.c138
1 files changed, 92 insertions, 46 deletions
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index 214a9f22186..b03ec56c7e4 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -84,8 +84,9 @@ static int particle_system_add_exec(bContext *C, wmOperator *UNUSED(op))
Object *ob = ED_object_context(C);
Scene *scene = CTX_data_scene(C);
- if (!scene || !ob)
+ if (!scene || !ob) {
return OPERATOR_CANCELLED;
+ }
object_add_particle_system(bmain, scene, ob, NULL);
@@ -118,8 +119,9 @@ static int particle_system_remove_exec(bContext *C, wmOperator *UNUSED(op))
ViewLayer *view_layer = CTX_data_view_layer(C);
int mode_orig;
- if (!scene || !ob)
+ if (!scene || !ob) {
return OPERATOR_CANCELLED;
+ }
mode_orig = ob->mode;
object_remove_particle_system(bmain, scene, ob);
@@ -177,15 +179,18 @@ static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
psys = ptr.data;
/* add or copy particle setting */
- if (psys->part)
+ if (psys->part) {
part = BKE_particlesettings_copy(bmain, psys->part);
- else
+ }
+ else {
part = BKE_particlesettings_add(bmain, "ParticleSettings");
+ }
ob = ptr.id.data;
- if (psys->part)
+ if (psys->part) {
id_us_min(&psys->part->id);
+ }
psys->part = part;
@@ -225,12 +230,14 @@ static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
ParticleTarget *pt;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
pt = psys->targets.first;
- for (; pt; pt = pt->next)
+ for (; pt; pt = pt->next) {
pt->flag &= ~PTARGET_CURRENT;
+ }
pt = MEM_callocN(sizeof(ParticleTarget), "keyed particle target");
@@ -270,8 +277,9 @@ static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
ParticleTarget *pt;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
pt = psys->targets.first;
for (; pt; pt = pt->next) {
@@ -283,8 +291,9 @@ static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
}
pt = psys->targets.last;
- if (pt)
+ if (pt) {
pt->flag |= PTARGET_CURRENT;
+ }
DEG_relations_tag_update(bmain);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
@@ -317,8 +326,9 @@ static int target_move_up_exec(bContext *C, wmOperator *UNUSED(op))
Object *ob = ptr.id.data;
ParticleTarget *pt;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
pt = psys->targets.first;
for (; pt; pt = pt->next) {
@@ -356,8 +366,9 @@ static int target_move_down_exec(bContext *C, wmOperator *UNUSED(op))
Object *ob = ptr.id.data;
ParticleTarget *pt;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
pt = psys->targets.first;
for (; pt; pt = pt->next) {
if (pt->flag & PTARGET_CURRENT && pt->next) {
@@ -392,8 +403,9 @@ static int dupliob_refresh_exec(bContext *C, wmOperator *UNUSED(op))
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys = ptr.data;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
psys_check_group_weights(psys->part);
DEG_id_tag_update(&psys->part->id, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_REDO);
@@ -423,8 +435,9 @@ static int dupliob_move_up_exec(bContext *C, wmOperator *UNUSED(op))
ParticleSettings *part;
ParticleDupliWeight *dw;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
part = psys->part;
for (dw = part->instance_weights.first; dw; dw = dw->next) {
@@ -462,8 +475,9 @@ static int copy_particle_dupliob_exec(bContext *C, wmOperator *UNUSED(op))
ParticleSettings *part;
ParticleDupliWeight *dw;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
part = psys->part;
for (dw = part->instance_weights.first; dw; dw = dw->next) {
if (dw->flag & PART_DUPLIW_CURRENT) {
@@ -502,8 +516,9 @@ static int remove_particle_dupliob_exec(bContext *C, wmOperator *UNUSED(op))
ParticleSettings *part;
ParticleDupliWeight *dw;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
part = psys->part;
for (dw = part->instance_weights.first; dw; dw = dw->next) {
@@ -515,8 +530,9 @@ static int remove_particle_dupliob_exec(bContext *C, wmOperator *UNUSED(op))
}
dw = part->instance_weights.last;
- if (dw)
+ if (dw) {
dw->flag |= PART_DUPLIW_CURRENT;
+ }
DEG_id_tag_update(&part->id, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_REDO);
WM_event_add_notifier(C, NC_OBJECT | ND_PARTICLE, NULL);
@@ -547,8 +563,9 @@ static int dupliob_move_down_exec(bContext *C, wmOperator *UNUSED(op))
ParticleSettings *part;
ParticleDupliWeight *dw;
- if (!psys)
+ if (!psys) {
return OPERATOR_CANCELLED;
+ }
part = psys->part;
for (dw = part->instance_weights.first; dw; dw = dw->next) {
@@ -593,11 +610,13 @@ static void disconnect_hair(Depsgraph *depsgraph, Scene *scene, Object *ob, Part
int i, k;
float hairmat[4][4];
- if (!ob || !psys || psys->flag & PSYS_GLOBAL_HAIR)
+ if (!ob || !psys || psys->flag & PSYS_GLOBAL_HAIR) {
return;
+ }
- if (!psys->part || psys->part->type != PART_HAIR)
+ if (!psys->part || psys->part->type != PART_HAIR) {
return;
+ }
edit = psys->edit;
point = edit ? edit->points : NULL;
@@ -639,8 +658,9 @@ static int disconnect_hair_exec(bContext *C, wmOperator *op)
ParticleSystem *psys = NULL;
const bool all = RNA_boolean_get(op->ptr, "all");
- if (!ob)
+ if (!ob) {
return OPERATOR_CANCELLED;
+ }
if (all) {
for (psys = ob->particlesystem.first; psys; psys = psys->next) {
@@ -705,12 +725,15 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
float from_ob_imat[4][4], to_ob_imat[4][4];
float from_imat[4][4], to_imat[4][4];
- if (!target_psmd->mesh_final)
+ if (!target_psmd->mesh_final) {
return false;
- if (!psys->part || psys->part->type != PART_HAIR)
+ }
+ if (!psys->part || psys->part->type != PART_HAIR) {
return false;
- if (!target_psys->part || target_psys->part->type != PART_HAIR)
+ }
+ if (!target_psys->part || target_psys->part->type != PART_HAIR) {
return false;
+ }
edit_point = target_edit ? target_edit->points : NULL;
@@ -740,8 +763,9 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
mvert = mesh->mvert;
/* convert to global coordinates */
- for (i = 0; i < numverts; i++)
+ for (i = 0; i < numverts; i++) {
mul_m4_v3(to_mat, mvert[i].co);
+ }
if (mesh->totface != 0) {
mface = mesh->mface;
@@ -761,10 +785,12 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
float from_co[3];
BVHTreeNearest nearest;
- if (from_global)
+ if (from_global) {
mul_v3_m4v3(from_co, from_ob_imat, pa->hair[0].co);
- else
+ }
+ else {
mul_v3_m4v3(from_co, from_ob_imat, pa->hair[0].world_co);
+ }
mul_m4_v3(from_mat, from_co);
nearest.index = -1;
@@ -773,8 +799,9 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
BLI_bvhtree_find_nearest(bvhtree.tree, from_co, &nearest, bvhtree.nearest_callback, &bvhtree);
if (nearest.index == -1) {
- if (G.debug & G_DEBUG)
+ if (G.debug & G_DEBUG) {
printf("No nearest point found for hair root!");
+ }
continue;
}
@@ -790,8 +817,9 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
copy_v3_v3(v[3], mvert[mf->v4].co);
interp_weights_poly_v3(tpa->fuv, v, 4, nearest.co);
}
- else
+ else {
interp_weights_poly_v3(tpa->fuv, v, 3, nearest.co);
+ }
tpa->foffset = 0.0f;
tpa->num = nearest.index;
@@ -815,8 +843,9 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
float hairmat[4][4], imat[4][4];
float offset[3];
- if (to_global)
+ if (to_global) {
copy_m4_m4(imat, target_ob->obmat);
+ }
else {
/* note: using target_dm here, which is in target_ob object space and has full modifiers */
psys_mat_hair_to_object(target_ob, target_mesh, target_psys->part->from, tpa, hairmat);
@@ -832,10 +861,12 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
k++, key++, tkey++, ekey++) {
float co_orig[3];
- if (from_global)
+ if (from_global) {
mul_v3_m4v3(co_orig, from_ob_imat, key->co);
- else
+ }
+ else {
mul_v3_m4v3(co_orig, from_ob_imat, key->world_co);
+ }
mul_m4_v3(from_mat, co_orig);
add_v3_v3v3(tkey->co, co_orig, offset);
@@ -851,10 +882,12 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
for (k = 0, key = pa->hair, tkey = tpa->hair; k < tpa->totkey; k++, key++, tkey++) {
float co_orig[3];
- if (from_global)
+ if (from_global) {
mul_v3_m4v3(co_orig, from_ob_imat, key->co);
- else
+ }
+ else {
mul_v3_m4v3(co_orig, from_ob_imat, key->world_co);
+ }
mul_m4_v3(from_mat, co_orig);
add_v3_v3v3(tkey->co, co_orig, offset);
@@ -879,8 +912,9 @@ static bool connect_hair(Depsgraph *depsgraph, Scene *scene, Object *ob, Particl
{
bool ok;
- if (!psys)
+ if (!psys) {
return false;
+ }
ok = remap_hair_emitter(depsgraph,
scene,
@@ -907,8 +941,9 @@ static int connect_hair_exec(bContext *C, wmOperator *op)
const bool all = RNA_boolean_get(op->ptr, "all");
bool any_connected = false;
- if (!ob)
+ if (!ob) {
return OPERATOR_CANCELLED;
+ }
if (all) {
for (psys = ob->particlesystem.first; psys; psys = psys->next) {
@@ -966,8 +1001,9 @@ static void copy_particle_edit(Depsgraph *depsgraph,
KEY_K;
POINT_P;
- if (!edit_from)
+ if (!edit_from) {
return;
+ }
edit = MEM_dupallocN(edit_from);
edit->psys = psys;
@@ -1015,10 +1051,12 @@ static void remove_particle_systems_from_object(Object *ob_to)
{
ModifierData *md, *md_next;
- if (ob_to->type != OB_MESH)
+ if (ob_to->type != OB_MESH) {
return;
- if (!ob_to->data || ID_IS_LINKED(ob_to->data))
+ }
+ if (!ob_to->data || ID_IS_LINKED(ob_to->data)) {
return;
+ }
for (md = ob_to->modifiers.first; md; md = md_next) {
md_next = md->next;
@@ -1056,10 +1094,12 @@ static bool copy_particle_systems_to_object(const bContext *C,
CustomData_MeshMasks cdmask = {0};
int i, totpsys;
- if (ob_to->type != OB_MESH)
+ if (ob_to->type != OB_MESH) {
return false;
- if (!ob_to->data || ID_IS_LINKED(ob_to->data))
+ }
+ if (!ob_to->data || ID_IS_LINKED(ob_to->data)) {
return false;
+ }
/* For remapping we need a valid DM.
* Because the modifiers are appended at the end it's safe to use
@@ -1081,8 +1121,9 @@ static bool copy_particle_systems_to_object(const bContext *C,
psys = BKE_object_copy_particlesystem(psys_from, 0);
tmp_psys[i] = psys;
- if (psys_start == NULL)
+ if (psys_start == NULL) {
psys_start = psys;
+ }
psys_emitter_customdata_mask(psys, &cdmask);
}
@@ -1181,12 +1222,14 @@ static bool copy_particle_systems_to_object(const bContext *C,
static bool copy_particle_systems_poll(bContext *C)
{
Object *ob;
- if (!ED_operator_object_active_editable(C))
+ if (!ED_operator_object_active_editable(C)) {
return false;
+ }
ob = ED_object_active_context(C);
- if (BLI_listbase_is_empty(&ob->particlesystem))
+ if (BLI_listbase_is_empty(&ob->particlesystem)) {
return false;
+ }
return true;
}
@@ -1212,13 +1255,16 @@ static int copy_particle_systems_exec(bContext *C, wmOperator *op)
remove_particle_systems_from_object(ob_to);
changed = true;
}
- if (copy_particle_systems_to_object(C, scene, ob_from, psys_from, ob_to, space, false))
+ if (copy_particle_systems_to_object(C, scene, ob_from, psys_from, ob_to, space, false)) {
changed = true;
- else
+ }
+ else {
fail++;
+ }
- if (changed)
+ if (changed) {
changed_tot++;
+ }
}
}
CTX_DATA_END;