Blender  V3.3
Enumerations | Functions | Variables
BKE_mball.h File Reference

Go to the source code of this file.

Enumerations

enum  { BKE_MBALL_BATCH_DIRTY_ALL = 0 }
 

Functions

struct MetaBallBKE_mball_add (struct Main *bmain, const char *name)
 
bool BKE_mball_is_any_selected (const struct MetaBall *mb)
 
bool BKE_mball_is_any_selected_multi (struct Base **bases, int bases_len)
 
bool BKE_mball_is_any_unselected (const struct MetaBall *mb)
 
bool BKE_mball_is_same_group (const struct Object *ob1, const struct Object *ob2)
 
bool BKE_mball_is_basis_for (const struct Object *ob1, const struct Object *ob2)
 
bool BKE_mball_is_basis (const struct Object *ob)
 
struct ObjectBKE_mball_basis_find (struct Scene *scene, struct Object *ob)
 
void BKE_mball_texspace_calc (struct Object *ob)
 
struct BoundBoxBKE_mball_boundbox_get (struct Object *ob)
 
floatBKE_mball_make_orco (struct Object *ob, struct ListBase *dispbase)
 
void BKE_mball_properties_copy (struct Main *bmain, struct MetaBall *active_metaball)
 
bool BKE_mball_minmax_ex (const struct MetaBall *mb, float min[3], float max[3], const float obmat[4][4], short flag)
 
bool BKE_mball_minmax (const struct MetaBall *mb, float min[3], float max[3])
 
bool BKE_mball_center_median (const struct MetaBall *mb, float r_cent[3])
 
bool BKE_mball_center_bounds (const struct MetaBall *mb, float r_cent[3])
 
void BKE_mball_transform (struct MetaBall *mb, const float mat[4][4], bool do_props)
 
void BKE_mball_translate (struct MetaBall *mb, const float offset[3])
 
struct MetaElemBKE_mball_element_add (struct MetaBall *mb, int type)
 
int BKE_mball_select_count (const struct MetaBall *mb)
 
int BKE_mball_select_count_multi (struct Base **bases, int bases_len)
 
bool BKE_mball_select_all (struct MetaBall *mb)
 
bool BKE_mball_select_all_multi_ex (struct Base **bases, int bases_len)
 
bool BKE_mball_deselect_all (struct MetaBall *mb)
 
bool BKE_mball_deselect_all_multi_ex (struct Base **bases, int bases_len)
 
bool BKE_mball_select_swap (struct MetaBall *mb)
 
bool BKE_mball_select_swap_multi_ex (struct Base **bases, int bases_len)
 
void BKE_mball_batch_cache_dirty_tag (struct MetaBall *mb, int mode)
 
void BKE_mball_batch_cache_free (struct MetaBall *mb)
 

Variables

void(* BKE_mball_batch_cache_dirty_tag_cb )(struct MetaBall *mb, int mode)
 
void(* BKE_mball_batch_cache_free_cb )(struct MetaBall *mb)
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
BKE_MBALL_BATCH_DIRTY_ALL 

Definition at line 117 of file BKE_mball.h.

Function Documentation

◆ BKE_mball_add()

struct MetaBall* BKE_mball_add ( struct Main bmain,
const char *  name 
)

Definition at line 200 of file mball.c.

References BKE_id_new(), and ID_MB.

Referenced by BKE_object_obdata_add_from_type().

◆ BKE_mball_basis_find()

struct Object* BKE_mball_basis_find ( struct Scene scene,
struct Object ob 
)

This function finds the basis meta-ball.

Basis meta-ball doesn't include any number at the end of its name. All meta-balls with same base of name can be blended. meta-balls with different basic name can't be blended.

Warning
BKE_mball_is_basis() can fail on returned object, see function docs for details.

Definition at line 508 of file mball.c.

References BASE_FROM_DUPLI, BLI_split_name_num(), Object::id, LISTBASE_FOREACH, MAX_ID_NAME, ID::name, OB_MBALL, scene, STREQ, Object::type, and Scene::view_layers.

Referenced by BKE_displist_make_mball(), blender::deg::DepsgraphRelationBuilder::build_object_data_geometry(), and object_convert_exec().

◆ BKE_mball_batch_cache_dirty_tag()

void BKE_mball_batch_cache_dirty_tag ( struct MetaBall mb,
int  mode 
)

◆ BKE_mball_batch_cache_free()

void BKE_mball_batch_cache_free ( struct MetaBall mb)

Definition at line 749 of file mball.c.

References MetaBall::batch_cache, and BKE_mball_batch_cache_free_cb.

Referenced by metaball_free_data().

◆ BKE_mball_boundbox_get()

struct BoundBox* BKE_mball_boundbox_get ( struct Object ob)

Return or compute bounding-box for given meta-ball object.

Definition at line 298 of file mball.c.

References Object_Runtime::bb, BKE_mball_texspace_calc(), BLI_assert, BOUNDBOX_DIRTY, Object_Runtime::curve_cache, BoundBox::flag, NULL, OB_MBALL, Object::runtime, and Object::type.

Referenced by BKE_object_boundbox_get().

◆ BKE_mball_center_bounds()

bool BKE_mball_center_bounds ( const struct MetaBall mb,
float  r_cent[3] 
)

Referenced by object_origin_set_exec().

◆ BKE_mball_center_median()

bool BKE_mball_center_median ( const struct MetaBall mb,
float  r_cent[3] 
)

Referenced by object_origin_set_exec().

◆ BKE_mball_deselect_all()

bool BKE_mball_deselect_all ( struct MetaBall mb)

◆ BKE_mball_deselect_all_multi_ex()

bool BKE_mball_deselect_all_multi_ex ( struct Base **  bases,
int  bases_len 
)

◆ BKE_mball_element_add()

struct MetaElem* BKE_mball_element_add ( struct MetaBall mb,
int  type 
)

Most simple meta-element adding function.

Note
don't do context manipulation here (rna uses).

Definition at line 209 of file mball.c.

References BLI_addtail(), MetaBall::elems, MetaElem::expx, MetaElem::expy, MetaElem::expz, MetaElem::flag, MB_BALL, MB_CUBE, MB_ELIPSOID, MB_PLANE, MB_SCALE_RAD, MB_TUBE, MEM_callocN, MetaElem::quat, MetaElem::rad, MetaElem::s, type, MetaElem::type, and unit_qt().

Referenced by ED_mball_add_primitive().

◆ BKE_mball_is_any_selected()

bool BKE_mball_is_any_selected ( const struct MetaBall mb)

◆ BKE_mball_is_any_selected_multi()

bool BKE_mball_is_any_selected_multi ( struct Base **  bases,
int  bases_len 
)

Definition at line 404 of file mball.c.

References BKE_mball_is_any_selected(), Object::data, if(), and Base::object.

Referenced by mball_select_all_exec().

◆ BKE_mball_is_any_unselected()

bool BKE_mball_is_any_unselected ( const struct MetaBall mb)

◆ BKE_mball_is_basis()

bool BKE_mball_is_basis ( const struct Object ob)

◆ BKE_mball_is_basis_for()

bool BKE_mball_is_basis_for ( const struct Object ob1,
const struct Object ob2 
)

Return true if ob1 and ob2 are part of the same metaBall group, and ob1 is its basis.

Referenced by libblock_remap_data_postprocess_object_update().

◆ BKE_mball_is_same_group()

bool BKE_mball_is_same_group ( const struct Object ob1,
const struct Object ob2 
)

Return true if ob1 and ob2 are part of the same metaBall group.

Note
Currently checks whether their two base names (without numerical suffix) is the same.

◆ BKE_mball_make_orco()

float* BKE_mball_make_orco ( struct Object ob,
struct ListBase dispbase 
)

◆ BKE_mball_minmax()

bool BKE_mball_minmax ( const struct MetaBall mb,
float  min[3],
float  max[3] 
)

◆ BKE_mball_minmax_ex()

bool BKE_mball_minmax_ex ( const struct MetaBall mb,
float  min[3],
float  max[3],
const float  obmat[4][4],
short  flag 
)

◆ BKE_mball_properties_copy()

void BKE_mball_properties_copy ( struct Main bmain,
struct MetaBall active_metaball 
)

Copy some properties from a meta-ball obdata to all other meta-ball obdata belonging to the same family (i.e. object sharing the same name basis).

When some properties (wire-size, threshold, update flags) of meta-ball are changed, then this properties are copied to all meta-balls in same "group" (meta-balls with same base name: MBall, MBall.001, MBall.002, etc). The most important is to copy properties to the base meta-ball, because this meta-ball influences polygonization of meta-balls.

WARNING: This code does not cover all potential corner-cases. E.g. if:

|   Object   |   ObData   |
| ---------- | ---------- |
| Meta_A     | Meta_A     |
| Meta_A.001 | Meta_A.001 |
| Meta_B     | Meta_A     |
| Meta_B.001 | Meta_B.001 |

Calling this function with metaball_src being Meta_A.001 will update Meta_A, but NOT Meta_B.001. So in the 'Meta_B' family, the two metaballs will have unmatching settings now.

Solving this case would drastically increase the complexity of this code though, so don't think it would be worth it.

Definition at line 435 of file mball.c.

References BLI_split_name_num(), Object::data, ListBase::first, Object::id, ID_IS_LINKED, MAX_ID_NAME, mball_data_properties_copy(), ID::name, ID::next, NULL, OB_MBALL, Main::objects, ID::prev, STREQ, and Object::type.

◆ BKE_mball_select_all()

bool BKE_mball_select_all ( struct MetaBall mb)

Definition at line 668 of file mball.c.

References MetaBall::editelems, LISTBASE_FOREACH, and SELECT.

Referenced by BKE_mball_select_all_multi_ex().

◆ BKE_mball_select_all_multi_ex()

bool BKE_mball_select_all_multi_ex ( struct Base **  bases,
int  bases_len 
)

Definition at line 680 of file mball.c.

References BKE_mball_select_all(), Object::data, and Base::object.

Referenced by mball_select_all_exec().

◆ BKE_mball_select_count()

int BKE_mball_select_count ( const struct MetaBall mb)

◆ BKE_mball_select_count_multi()

int BKE_mball_select_count_multi ( struct Base **  bases,
int  bases_len 
)

Definition at line 657 of file mball.c.

References BKE_mball_select_count(), Object::data, and Base::object.

Referenced by mball_select_similar_exec().

◆ BKE_mball_select_swap()

bool BKE_mball_select_swap ( struct MetaBall mb)

Definition at line 715 of file mball.c.

References MetaBall::editelems, LISTBASE_FOREACH, and SELECT.

Referenced by BKE_mball_select_swap_multi_ex().

◆ BKE_mball_select_swap_multi_ex()

bool BKE_mball_select_swap_multi_ex ( struct Base **  bases,
int  bases_len 
)

Definition at line 725 of file mball.c.

References BKE_mball_select_swap(), Object::data, and Base::object.

Referenced by mball_select_all_exec().

◆ BKE_mball_texspace_calc()

void BKE_mball_texspace_calc ( struct Object ob)

Compute bounding box of all meta-elements / meta-ball.

Bounding box is computed from polygonized surface. ob is basic meta-balls (with name Meta for example). All other meta-ball objects (with names Meta.001, Meta.002, etc) are included in this bounding-box.

Definition at line 255 of file mball.c.

References Object_Runtime::bb, BKE_boundbox_init_from_minmax(), BOUNDBOX_DIRTY, Object_Runtime::curve_cache, data, CurveCache::disp, ListBase::first, BoundBox::flag, max, MEM_callocN, min, minmax_v3v3_v3(), DispList::next, DispList::nr, NULL, Object::runtime, and DispList::verts.

Referenced by BKE_displist_make_mball(), and BKE_mball_boundbox_get().

◆ BKE_mball_transform()

void BKE_mball_transform ( struct MetaBall mb,
const float  mat[4][4],
bool  do_props 
)

◆ BKE_mball_translate()

void BKE_mball_translate ( struct MetaBall mb,
const float  offset[3] 
)

Definition at line 639 of file mball.c.

References add_v3_v3(), MetaBall::elems, LISTBASE_FOREACH, and offset.

Referenced by object_origin_set_exec().

Variable Documentation

◆ BKE_mball_batch_cache_dirty_tag_cb

void(* BKE_mball_batch_cache_dirty_tag_cb) (struct MetaBall *mb, int mode) ( struct MetaBall mb,
int  mode 
)
extern

Definition at line 740 of file mball.c.

Referenced by BKE_mball_batch_cache_dirty_tag(), and DRW_engines_register().

◆ BKE_mball_batch_cache_free_cb

void(* BKE_mball_batch_cache_free_cb) (struct MetaBall *mb) ( struct MetaBall mb)
extern

Definition at line 741 of file mball.c.

Referenced by BKE_mball_batch_cache_free(), and DRW_engines_register().