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:
authorCampbell Barton <ideasman42@gmail.com>2019-04-17 07:17:24 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-04-17 07:21:24 +0300
commite12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch)
tree8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/blenkernel/intern/mball.c
parentb3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff)
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211. For details on usage and instructions for migrating branches without conflicts, see: https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r--source/blender/blenkernel/intern/mball.c720
1 files changed, 361 insertions, 359 deletions
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 6a28c341fac..8ab042d5446 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -63,37 +63,38 @@
/** Free (or release) any data used by this mball (does not free the mball itself). */
void BKE_mball_free(MetaBall *mb)
{
- BKE_animdata_free((ID *)mb, false);
+ BKE_animdata_free((ID *)mb, false);
- BKE_mball_batch_cache_free(mb);
+ BKE_mball_batch_cache_free(mb);
- MEM_SAFE_FREE(mb->mat);
+ MEM_SAFE_FREE(mb->mat);
- BLI_freelistN(&mb->elems);
- if (mb->disp.first) BKE_displist_free(&mb->disp);
+ BLI_freelistN(&mb->elems);
+ if (mb->disp.first)
+ BKE_displist_free(&mb->disp);
}
void BKE_mball_init(MetaBall *mb)
{
- BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(mb, id));
+ BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(mb, id));
- mb->size[0] = mb->size[1] = mb->size[2] = 1.0;
- mb->texflag = MB_AUTOSPACE;
+ mb->size[0] = mb->size[1] = mb->size[2] = 1.0;
+ mb->texflag = MB_AUTOSPACE;
- mb->wiresize = 0.4f;
- mb->rendersize = 0.2f;
- mb->thresh = 0.6f;
+ mb->wiresize = 0.4f;
+ mb->rendersize = 0.2f;
+ mb->thresh = 0.6f;
}
MetaBall *BKE_mball_add(Main *bmain, const char *name)
{
- MetaBall *mb;
+ MetaBall *mb;
- mb = BKE_libblock_alloc(bmain, ID_MB, name, 0);
+ mb = BKE_libblock_alloc(bmain, ID_MB, name, 0);
- BKE_mball_init(mb);
+ BKE_mball_init(mb);
- return mb;
+ return mb;
}
/**
@@ -104,76 +105,79 @@ MetaBall *BKE_mball_add(Main *bmain, const char *name)
*
* \param flag: Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more).
*/
-void BKE_mball_copy_data(Main *UNUSED(bmain), MetaBall *mb_dst, const MetaBall *mb_src, const int UNUSED(flag))
+void BKE_mball_copy_data(Main *UNUSED(bmain),
+ MetaBall *mb_dst,
+ const MetaBall *mb_src,
+ const int UNUSED(flag))
{
- BLI_duplicatelist(&mb_dst->elems, &mb_src->elems);
+ BLI_duplicatelist(&mb_dst->elems, &mb_src->elems);
- mb_dst->mat = MEM_dupallocN(mb_src->mat);
+ mb_dst->mat = MEM_dupallocN(mb_src->mat);
- mb_dst->editelems = NULL;
- mb_dst->lastelem = NULL;
- mb_dst->batch_cache = NULL;
+ mb_dst->editelems = NULL;
+ mb_dst->lastelem = NULL;
+ mb_dst->batch_cache = NULL;
}
MetaBall *BKE_mball_copy(Main *bmain, const MetaBall *mb)
{
- MetaBall *mb_copy;
- BKE_id_copy(bmain, &mb->id, (ID **)&mb_copy);
- return mb_copy;
+ MetaBall *mb_copy;
+ BKE_id_copy(bmain, &mb->id, (ID **)&mb_copy);
+ return mb_copy;
}
void BKE_mball_make_local(Main *bmain, MetaBall *mb, const bool lib_local)
{
- BKE_id_make_local_generic(bmain, &mb->id, true, lib_local);
+ BKE_id_make_local_generic(bmain, &mb->id, true, lib_local);
}
/* most simple meta-element adding function
* don't do context manipulation here (rna uses) */
MetaElem *BKE_mball_element_add(MetaBall *mb, const int type)
{
- MetaElem *ml = MEM_callocN(sizeof(MetaElem), "metaelem");
+ MetaElem *ml = MEM_callocN(sizeof(MetaElem), "metaelem");
- unit_qt(ml->quat);
+ unit_qt(ml->quat);
- ml->rad = 2.0;
- ml->s = 2.0;
- ml->flag = MB_SCALE_RAD;
+ ml->rad = 2.0;
+ ml->s = 2.0;
+ ml->flag = MB_SCALE_RAD;
- switch (type) {
- case MB_BALL:
- ml->type = MB_BALL;
- ml->expx = ml->expy = ml->expz = 1.0;
+ switch (type) {
+ case MB_BALL:
+ ml->type = MB_BALL;
+ ml->expx = ml->expy = ml->expz = 1.0;
- break;
- case MB_TUBE:
- ml->type = MB_TUBE;
- ml->expx = ml->expy = ml->expz = 1.0;
+ break;
+ case MB_TUBE:
+ ml->type = MB_TUBE;
+ ml->expx = ml->expy = ml->expz = 1.0;
- break;
- case MB_PLANE:
- ml->type = MB_PLANE;
- ml->expx = ml->expy = ml->expz = 1.0;
+ break;
+ case MB_PLANE:
+ ml->type = MB_PLANE;
+ ml->expx = ml->expy = ml->expz = 1.0;
- break;
- case MB_ELIPSOID:
- ml->type = MB_ELIPSOID;
- ml->expx = 1.2f;
- ml->expy = 0.8f;
- ml->expz = 1.0;
+ break;
+ case MB_ELIPSOID:
+ ml->type = MB_ELIPSOID;
+ ml->expx = 1.2f;
+ ml->expy = 0.8f;
+ ml->expz = 1.0;
- break;
- case MB_CUBE:
- ml->type = MB_CUBE;
- ml->expx = ml->expy = ml->expz = 1.0;
+ break;
+ case MB_CUBE:
+ ml->type = MB_CUBE;
+ ml->expx = ml->expy = ml->expz = 1.0;
- break;
- default:
- break;
- }
+ break;
+ default:
+ break;
+ }
- BLI_addtail(&mb->elems, ml);
+ BLI_addtail(&mb->elems, ml);
- return ml;
+ return ml;
}
/** Compute bounding box of all MetaElems/MetaBalls.
*
@@ -183,95 +187,96 @@ MetaElem *BKE_mball_element_add(MetaBall *mb, const int type)
*/
void BKE_mball_texspace_calc(Object *ob)
{
- DispList *dl;
- BoundBox *bb;
- float *data, min[3], max[3] /*, loc[3], size[3] */;
- int tot;
- bool do_it = false;
-
- if (ob->runtime.bb == NULL) {
- ob->runtime.bb = MEM_callocN(sizeof(BoundBox), "mb boundbox");
- }
- bb = ob->runtime.bb;
-
- /* Weird one, this. */
-/* INIT_MINMAX(min, max); */
- (min)[0] = (min)[1] = (min)[2] = 1.0e30f;
- (max)[0] = (max)[1] = (max)[2] = -1.0e30f;
-
- dl = ob->runtime.curve_cache->disp.first;
- while (dl) {
- tot = dl->nr;
- if (tot) do_it = true;
- data = dl->verts;
- while (tot--) {
- /* Also weird... but longer. From utildefines. */
- minmax_v3v3_v3(min, max, data);
- data += 3;
- }
- dl = dl->next;
- }
-
- if (!do_it) {
- min[0] = min[1] = min[2] = -1.0f;
- max[0] = max[1] = max[2] = 1.0f;
- }
-
- BKE_boundbox_init_from_minmax(bb, min, max);
-
- bb->flag &= ~BOUNDBOX_DIRTY;
+ DispList *dl;
+ BoundBox *bb;
+ float *data, min[3], max[3] /*, loc[3], size[3] */;
+ int tot;
+ bool do_it = false;
+
+ if (ob->runtime.bb == NULL) {
+ ob->runtime.bb = MEM_callocN(sizeof(BoundBox), "mb boundbox");
+ }
+ bb = ob->runtime.bb;
+
+ /* Weird one, this. */
+ /* INIT_MINMAX(min, max); */
+ (min)[0] = (min)[1] = (min)[2] = 1.0e30f;
+ (max)[0] = (max)[1] = (max)[2] = -1.0e30f;
+
+ dl = ob->runtime.curve_cache->disp.first;
+ while (dl) {
+ tot = dl->nr;
+ if (tot)
+ do_it = true;
+ data = dl->verts;
+ while (tot--) {
+ /* Also weird... but longer. From utildefines. */
+ minmax_v3v3_v3(min, max, data);
+ data += 3;
+ }
+ dl = dl->next;
+ }
+
+ if (!do_it) {
+ min[0] = min[1] = min[2] = -1.0f;
+ max[0] = max[1] = max[2] = 1.0f;
+ }
+
+ BKE_boundbox_init_from_minmax(bb, min, max);
+
+ bb->flag &= ~BOUNDBOX_DIRTY;
}
/** Return or compute bbox for given metaball object. */
BoundBox *BKE_mball_boundbox_get(Object *ob)
{
- BLI_assert(ob->type == OB_MBALL);
+ BLI_assert(ob->type == OB_MBALL);
- if (ob->runtime.bb != NULL && (ob->runtime.bb->flag & BOUNDBOX_DIRTY) == 0) {
- return ob->runtime.bb;
- }
+ if (ob->runtime.bb != NULL && (ob->runtime.bb->flag & BOUNDBOX_DIRTY) == 0) {
+ return ob->runtime.bb;
+ }
- /* This should always only be called with evaluated objects, but currently RNA is a problem here... */
- if (ob->runtime.curve_cache != NULL) {
- BKE_mball_texspace_calc(ob);
- }
+ /* This should always only be called with evaluated objects, but currently RNA is a problem here... */
+ if (ob->runtime.curve_cache != NULL) {
+ BKE_mball_texspace_calc(ob);
+ }
- return ob->runtime.bb;
+ return ob->runtime.bb;
}
float *BKE_mball_make_orco(Object *ob, ListBase *dispbase)
{
- BoundBox *bb;
- DispList *dl;
- float *data, *orco, *orcodata;
- float loc[3], size[3];
- int a;
+ BoundBox *bb;
+ DispList *dl;
+ float *data, *orco, *orcodata;
+ float loc[3], size[3];
+ int a;
- /* restore size and loc */
- bb = ob->runtime.bb;
- loc[0] = (bb->vec[0][0] + bb->vec[4][0]) / 2.0f;
- size[0] = bb->vec[4][0] - loc[0];
- loc[1] = (bb->vec[0][1] + bb->vec[2][1]) / 2.0f;
- size[1] = bb->vec[2][1] - loc[1];
- loc[2] = (bb->vec[0][2] + bb->vec[1][2]) / 2.0f;
- size[2] = bb->vec[1][2] - loc[2];
+ /* restore size and loc */
+ bb = ob->runtime.bb;
+ loc[0] = (bb->vec[0][0] + bb->vec[4][0]) / 2.0f;
+ size[0] = bb->vec[4][0] - loc[0];
+ loc[1] = (bb->vec[0][1] + bb->vec[2][1]) / 2.0f;
+ size[1] = bb->vec[2][1] - loc[1];
+ loc[2] = (bb->vec[0][2] + bb->vec[1][2]) / 2.0f;
+ size[2] = bb->vec[1][2] - loc[2];
- dl = dispbase->first;
- orcodata = MEM_mallocN(sizeof(float) * 3 * dl->nr, "MballOrco");
+ dl = dispbase->first;
+ orcodata = MEM_mallocN(sizeof(float) * 3 * dl->nr, "MballOrco");
- data = dl->verts;
- orco = orcodata;
- a = dl->nr;
- while (a--) {
- orco[0] = (data[0] - loc[0]) / size[0];
- orco[1] = (data[1] - loc[1]) / size[1];
- orco[2] = (data[2] - loc[2]) / size[2];
+ data = dl->verts;
+ orco = orcodata;
+ a = dl->nr;
+ while (a--) {
+ orco[0] = (data[0] - loc[0]) / size[0];
+ orco[1] = (data[1] - loc[1]) / size[1];
+ orco[2] = (data[2] - loc[2]) / size[2];
- data += 3;
- orco += 3;
- }
+ data += 3;
+ orco += 3;
+ }
- return orcodata;
+ return orcodata;
}
/* Note on mball basis stuff 2.5x (this is a can of worms)
@@ -285,7 +290,6 @@ float *BKE_mball_make_orco(Object *ob, ListBase *dispbase)
* - Campbell
*/
-
/** \brief Test, if Object *ob is basic MetaBall.
*
* It test last character of Object ID name. If last character
@@ -293,64 +297,63 @@ float *BKE_mball_make_orco(Object *ob, ListBase *dispbase)
*/
bool BKE_mball_is_basis(Object *ob)
{
- /* just a quick test */
- const int len = strlen(ob->id.name);
- return (!isdigit(ob->id.name[len - 1]));
+ /* just a quick test */
+ const int len = strlen(ob->id.name);
+ return (!isdigit(ob->id.name[len - 1]));
}
/* return nonzero if ob1 is a basis mball for ob */
bool BKE_mball_is_basis_for(Object *ob1, Object *ob2)
{
- int basis1nr, basis2nr;
- char basis1name[MAX_ID_NAME], basis2name[MAX_ID_NAME];
+ int basis1nr, basis2nr;
+ char basis1name[MAX_ID_NAME], basis2name[MAX_ID_NAME];
- if (ob1->id.name[2] != ob2->id.name[2]) {
- /* Quick return in case first char of both ID's names is not the same... */
- return false;
- }
+ if (ob1->id.name[2] != ob2->id.name[2]) {
+ /* Quick return in case first char of both ID's names is not the same... */
+ return false;
+ }
- BLI_split_name_num(basis1name, &basis1nr, ob1->id.name + 2, '.');
- BLI_split_name_num(basis2name, &basis2nr, ob2->id.name + 2, '.');
+ BLI_split_name_num(basis1name, &basis1nr, ob1->id.name + 2, '.');
+ BLI_split_name_num(basis2name, &basis2nr, ob2->id.name + 2, '.');
- if (STREQ(basis1name, basis2name)) {
- return BKE_mball_is_basis(ob1);
- }
- else {
- return false;
- }
+ if (STREQ(basis1name, basis2name)) {
+ return BKE_mball_is_basis(ob1);
+ }
+ else {
+ return false;
+ }
}
bool BKE_mball_is_any_selected(const MetaBall *mb)
{
- for (const MetaElem *ml = mb->editelems->first; ml != NULL; ml = ml->next) {
- if (ml->flag & SELECT) {
- return true;
- }
- }
- return false;
+ for (const MetaElem *ml = mb->editelems->first; ml != NULL; ml = ml->next) {
+ if (ml->flag & SELECT) {
+ return true;
+ }
+ }
+ return false;
}
-
bool BKE_mball_is_any_selected_multi(Base **bases, int bases_len)
{
- for (uint base_index = 0; base_index < bases_len; base_index++) {
- Object *obedit = bases[base_index]->object;
- MetaBall *mb = (MetaBall *)obedit->data;
- if (BKE_mball_is_any_selected(mb)) {
- return true;
- }
- }
- return false;
+ for (uint base_index = 0; base_index < bases_len; base_index++) {
+ Object *obedit = bases[base_index]->object;
+ MetaBall *mb = (MetaBall *)obedit->data;
+ if (BKE_mball_is_any_selected(mb)) {
+ return true;
+ }
+ }
+ return false;
}
bool BKE_mball_is_any_unselected(const MetaBall *mb)
{
- for (const MetaElem *ml = mb->editelems->first; ml != NULL; ml = ml->next) {
- if ((ml->flag & SELECT) == 0) {
- return true;
- }
- }
- return false;
+ for (const MetaElem *ml = mb->editelems->first; ml != NULL; ml = ml->next) {
+ if ((ml->flag & SELECT) == 0) {
+ return true;
+ }
+ }
+ return false;
}
/* \brief copy some properties from object to other metaball object with same base name
@@ -361,40 +364,40 @@ bool BKE_mball_is_any_unselected(const MetaBall *mb)
* because this metaball influence polygonisation of metaballs. */
void BKE_mball_properties_copy(Scene *scene, Object *active_object)
{
- Scene *sce_iter = scene;
- Base *base;
- Object *ob;
- MetaBall *active_mball = (MetaBall *)active_object->data;
- int basisnr, obnr;
- char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
- SceneBaseIter iter;
-
- BLI_split_name_num(basisname, &basisnr, active_object->id.name + 2, '.');
-
- /* Pass depsgraph as NULL, which means we will not expand into
- * duplis unlike when we generate the mball. Expanding duplis
- * would not be compatible when editing multiple view layers. */
- BKE_scene_base_iter_next(NULL, &iter, &sce_iter, 0, NULL, NULL);
- while (BKE_scene_base_iter_next(NULL, &iter, &sce_iter, 1, &base, &ob)) {
- if (ob->type == OB_MBALL) {
- if (ob != active_object) {
- BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
-
- /* Object ob has to be in same "group" ... it means, that it has to have
- * same base of its name */
- if (STREQ(obname, basisname)) {
- MetaBall *mb = ob->data;
-
- /* Copy properties from selected/edited metaball */
- mb->wiresize = active_mball->wiresize;
- mb->rendersize = active_mball->rendersize;
- mb->thresh = active_mball->thresh;
- mb->flag = active_mball->flag;
- DEG_id_tag_update(&mb->id, 0);
- }
- }
- }
- }
+ Scene *sce_iter = scene;
+ Base *base;
+ Object *ob;
+ MetaBall *active_mball = (MetaBall *)active_object->data;
+ int basisnr, obnr;
+ char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
+ SceneBaseIter iter;
+
+ BLI_split_name_num(basisname, &basisnr, active_object->id.name + 2, '.');
+
+ /* Pass depsgraph as NULL, which means we will not expand into
+ * duplis unlike when we generate the mball. Expanding duplis
+ * would not be compatible when editing multiple view layers. */
+ BKE_scene_base_iter_next(NULL, &iter, &sce_iter, 0, NULL, NULL);
+ while (BKE_scene_base_iter_next(NULL, &iter, &sce_iter, 1, &base, &ob)) {
+ if (ob->type == OB_MBALL) {
+ if (ob != active_object) {
+ BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
+
+ /* Object ob has to be in same "group" ... it means, that it has to have
+ * same base of its name */
+ if (STREQ(obname, basisname)) {
+ MetaBall *mb = ob->data;
+
+ /* Copy properties from selected/edited metaball */
+ mb->wiresize = active_mball->wiresize;
+ mb->rendersize = active_mball->rendersize;
+ mb->thresh = active_mball->thresh;
+ mb->flag = active_mball->flag;
+ DEG_id_tag_update(&mb->id, 0);
+ }
+ }
+ }
+ }
}
/** \brief This function finds basic MetaBall.
@@ -408,234 +411,233 @@ void BKE_mball_properties_copy(Scene *scene, Object *active_object)
*/
Object *BKE_mball_basis_find(Scene *scene, Object *basis)
{
- Object *bob = basis;
- int basisnr, obnr;
- char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
+ Object *bob = basis;
+ int basisnr, obnr;
+ char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
- BLI_split_name_num(basisname, &basisnr, basis->id.name + 2, '.');
+ BLI_split_name_num(basisname, &basisnr, basis->id.name + 2, '.');
- for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
- for (Base *base = view_layer->object_bases.first; base; base = base->next) {
- Object *ob = base->object;
- if ((ob->type == OB_MBALL) && !(base->flag & BASE_FROM_DUPLI)) {
- if (ob != bob) {
- BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer;
+ view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ Object *ob = base->object;
+ if ((ob->type == OB_MBALL) && !(base->flag & BASE_FROM_DUPLI)) {
+ if (ob != bob) {
+ BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
- /* object ob has to be in same "group" ... it means, that it has to have same base of its name */
- if (STREQ(obname, basisname)) {
- if (obnr < basisnr) {
- basis = ob;
- basisnr = obnr;
- }
- }
- }
- }
- }
- }
+ /* object ob has to be in same "group" ... it means, that it has to have same base of its name */
+ if (STREQ(obname, basisname)) {
+ if (obnr < basisnr) {
+ basis = ob;
+ basisnr = obnr;
+ }
+ }
+ }
+ }
+ }
+ }
- return basis;
+ return basis;
}
bool BKE_mball_minmax_ex(
- const MetaBall *mb, float min[3], float max[3],
- const float obmat[4][4], const short flag)
+ const MetaBall *mb, float min[3], float max[3], const float obmat[4][4], const short flag)
{
- const float scale = obmat ? mat4_to_scale(obmat) : 1.0f;
- bool changed = false;
- float centroid[3], vec[3];
+ const float scale = obmat ? mat4_to_scale(obmat) : 1.0f;
+ bool changed = false;
+ float centroid[3], vec[3];
- INIT_MINMAX(min, max);
+ INIT_MINMAX(min, max);
- for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
- if ((ml->flag & flag) == flag) {
- const float scale_mb = (ml->rad * 0.5f) * scale;
- int i;
+ for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
+ if ((ml->flag & flag) == flag) {
+ const float scale_mb = (ml->rad * 0.5f) * scale;
+ int i;
- if (obmat) {
- mul_v3_m4v3(centroid, obmat, &ml->x);
- }
- else {
- copy_v3_v3(centroid, &ml->x);
- }
+ if (obmat) {
+ mul_v3_m4v3(centroid, obmat, &ml->x);
+ }
+ else {
+ copy_v3_v3(centroid, &ml->x);
+ }
- /* TODO, non circle shapes cubes etc, probably nobody notices - campbell */
- for (i = -1; i != 3; i += 2) {
- copy_v3_v3(vec, centroid);
- add_v3_fl(vec, scale_mb * i);
- minmax_v3v3_v3(min, max, vec);
- }
- changed = true;
- }
- }
+ /* TODO, non circle shapes cubes etc, probably nobody notices - campbell */
+ for (i = -1; i != 3; i += 2) {
+ copy_v3_v3(vec, centroid);
+ add_v3_fl(vec, scale_mb * i);
+ minmax_v3v3_v3(min, max, vec);
+ }
+ changed = true;
+ }
+ }
- return changed;
+ return changed;
}
-
/* basic vertex data functions */
bool BKE_mball_minmax(const MetaBall *mb, float min[3], float max[3])
{
- INIT_MINMAX(min, max);
+ INIT_MINMAX(min, max);
- for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
- minmax_v3v3_v3(min, max, &ml->x);
- }
+ for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
+ minmax_v3v3_v3(min, max, &ml->x);
+ }
- return (BLI_listbase_is_empty(&mb->elems) == false);
+ return (BLI_listbase_is_empty(&mb->elems) == false);
}
bool BKE_mball_center_median(const MetaBall *mb, float r_cent[3])
{
- int total = 0;
+ int total = 0;
- zero_v3(r_cent);
+ zero_v3(r_cent);
- for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
- add_v3_v3(r_cent, &ml->x);
- total++;
- }
+ for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
+ add_v3_v3(r_cent, &ml->x);
+ total++;
+ }
- if (total) {
- mul_v3_fl(r_cent, 1.0f / (float)total);
- }
+ if (total) {
+ mul_v3_fl(r_cent, 1.0f / (float)total);
+ }
- return (total != 0);
+ return (total != 0);
}
bool BKE_mball_center_bounds(const MetaBall *mb, float r_cent[3])
{
- float min[3], max[3];
+ float min[3], max[3];
- if (BKE_mball_minmax(mb, min, max)) {
- mid_v3_v3v3(r_cent, min, max);
- return true;
- }
+ if (BKE_mball_minmax(mb, min, max)) {
+ mid_v3_v3v3(r_cent, min, max);
+ return true;
+ }
- return false;
+ return false;
}
void BKE_mball_transform(MetaBall *mb, float mat[4][4], const bool do_props)
{
- float quat[4];
- const float scale = mat4_to_scale(mat);
- const float scale_sqrt = sqrtf(scale);
+ float quat[4];
+ const float scale = mat4_to_scale(mat);
+ const float scale_sqrt = sqrtf(scale);
- mat4_to_quat(quat, mat);
+ mat4_to_quat(quat, mat);
- for (MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
- mul_m4_v3(mat, &ml->x);
- mul_qt_qtqt(ml->quat, quat, ml->quat);
+ for (MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
+ mul_m4_v3(mat, &ml->x);
+ mul_qt_qtqt(ml->quat, quat, ml->quat);
- if (do_props) {
- ml->rad *= scale;
- /* hrmf, probably elems shouldn't be
- * treating scale differently - campbell */
- if (!MB_TYPE_SIZE_SQUARED(ml->type)) {
- mul_v3_fl(&ml->expx, scale);
- }
- else {
- mul_v3_fl(&ml->expx, scale_sqrt);
- }
- }
- }
+ if (do_props) {
+ ml->rad *= scale;
+ /* hrmf, probably elems shouldn't be
+ * treating scale differently - campbell */
+ if (!MB_TYPE_SIZE_SQUARED(ml->type)) {
+ mul_v3_fl(&ml->expx, scale);
+ }
+ else {
+ mul_v3_fl(&ml->expx, scale_sqrt);
+ }
+ }
+ }
}
void BKE_mball_translate(MetaBall *mb, const float offset[3])
{
- for (MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
- add_v3_v3(&ml->x, offset);
- }
+ for (MetaElem *ml = mb->elems.first; ml; ml = ml->next) {
+ add_v3_v3(&ml->x, offset);
+ }
}
/* *** select funcs *** */
int BKE_mball_select_count(const MetaBall *mb)
{
- int sel = 0;
- for (const MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
- if (ml->flag & SELECT) {
- sel++;
- }
- }
- return sel;
+ int sel = 0;
+ for (const MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
+ if (ml->flag & SELECT) {
+ sel++;
+ }
+ }
+ return sel;
}
int BKE_mball_select_count_multi(Base **bases, int bases_len)
{
- int sel = 0;
- for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
- const Object *obedit = bases[ob_index]->object;
- const MetaBall *mb = (MetaBall *)obedit->data;
- sel += BKE_mball_select_count(mb);
- }
- return sel;
+ int sel = 0;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ const Object *obedit = bases[ob_index]->object;
+ const MetaBall *mb = (MetaBall *)obedit->data;
+ sel += BKE_mball_select_count(mb);
+ }
+ return sel;
}
bool BKE_mball_select_all(MetaBall *mb)
{
- bool changed = false;
- for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
- if ((ml->flag & SELECT) == 0) {
- ml->flag |= SELECT;
- changed = true;
- }
- }
- return changed;
+ bool changed = false;
+ for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
+ if ((ml->flag & SELECT) == 0) {
+ ml->flag |= SELECT;
+ changed = true;
+ }
+ }
+ return changed;
}
bool BKE_mball_select_all_multi_ex(Base **bases, int bases_len)
{
- bool changed_multi = false;
- for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
- Object *obedit = bases[ob_index]->object;
- MetaBall *mb = obedit->data;
- changed_multi |= BKE_mball_select_all(mb);
- }
- return changed_multi;
+ bool changed_multi = false;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ Object *obedit = bases[ob_index]->object;
+ MetaBall *mb = obedit->data;
+ changed_multi |= BKE_mball_select_all(mb);
+ }
+ return changed_multi;
}
bool BKE_mball_deselect_all(MetaBall *mb)
{
- bool changed = false;
- for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
- if ((ml->flag & SELECT) != 0) {
- ml->flag &= ~SELECT;
- changed = true;
- }
- }
- return changed;
+ bool changed = false;
+ for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
+ if ((ml->flag & SELECT) != 0) {
+ ml->flag &= ~SELECT;
+ changed = true;
+ }
+ }
+ return changed;
}
bool BKE_mball_deselect_all_multi_ex(Base **bases, int bases_len)
{
- bool changed_multi = false;
- for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
- Object *obedit = bases[ob_index]->object;
- MetaBall *mb = obedit->data;
- changed_multi |= BKE_mball_deselect_all(mb);
- DEG_id_tag_update(&mb->id, ID_RECALC_SELECT);
- }
- return changed_multi;
+ bool changed_multi = false;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ Object *obedit = bases[ob_index]->object;
+ MetaBall *mb = obedit->data;
+ changed_multi |= BKE_mball_deselect_all(mb);
+ DEG_id_tag_update(&mb->id, ID_RECALC_SELECT);
+ }
+ return changed_multi;
}
bool BKE_mball_select_swap(MetaBall *mb)
{
- bool changed = false;
- for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
- ml->flag ^= SELECT;
- changed = true;
- }
- return changed;
+ bool changed = false;
+ for (MetaElem *ml = mb->editelems->first; ml; ml = ml->next) {
+ ml->flag ^= SELECT;
+ changed = true;
+ }
+ return changed;
}
bool BKE_mball_select_swap_multi_ex(Base **bases, int bases_len)
{
- bool changed_multi = false;
- for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
- Object *obedit = bases[ob_index]->object;
- MetaBall *mb = (MetaBall *)obedit->data;
- changed_multi |= BKE_mball_select_swap(mb);
- }
- return changed_multi;
+ bool changed_multi = false;
+ for (uint ob_index = 0; ob_index < bases_len; ob_index++) {
+ Object *obedit = bases[ob_index]->object;
+ MetaBall *mb = (MetaBall *)obedit->data;
+ changed_multi |= BKE_mball_select_swap(mb);
+ }
+ return changed_multi;
}
/* **** Depsgraph evaluation **** */
@@ -647,13 +649,13 @@ void (*BKE_mball_batch_cache_free_cb)(MetaBall *mb) = NULL;
void BKE_mball_batch_cache_dirty_tag(MetaBall *mb, int mode)
{
- if (mb->batch_cache) {
- BKE_mball_batch_cache_dirty_tag_cb(mb, mode);
- }
+ if (mb->batch_cache) {
+ BKE_mball_batch_cache_dirty_tag_cb(mb, mode);
+ }
}
void BKE_mball_batch_cache_free(MetaBall *mb)
{
- if (mb->batch_cache) {
- BKE_mball_batch_cache_free_cb(mb);
- }
+ if (mb->batch_cache) {
+ BKE_mball_batch_cache_free_cb(mb);
+ }
}