Blender  V2.93
Macros | Functions | Variables
mball.c File Reference
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "DNA_defaults.h"
#include "DNA_material_types.h"
#include "DNA_meta_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_main.h"
#include "BKE_anim_data.h"
#include "BKE_curve.h"
#include "BKE_displist.h"
#include "BKE_idtype.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_material.h"
#include "BKE_mball.h"
#include "BKE_object.h"
#include "BKE_scene.h"
#include "DEG_depsgraph.h"
#include "BLO_read_write.h"

Go to the source code of this file.

Macros

#define DNA_DEPRECATED_ALLOW
 

Functions

static void metaball_init_data (ID *id)
 
static void metaball_copy_data (Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int UNUSED(flag))
 
static void metaball_free_data (ID *id)
 
static void metaball_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void metaball_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
static void metaball_blend_read_data (BlendDataReader *reader, ID *id)
 
static void metaball_blend_read_lib (BlendLibReader *reader, ID *id)
 
static void metaball_blend_read_expand (BlendExpander *expander, ID *id)
 
MetaBallBKE_mball_add (Main *bmain, const char *name)
 
MetaElemBKE_mball_element_add (MetaBall *mb, const int type)
 
void BKE_mball_texspace_calc (Object *ob)
 
BoundBoxBKE_mball_boundbox_get (Object *ob)
 
floatBKE_mball_make_orco (Object *ob, ListBase *dispbase)
 
bool BKE_mball_is_basis (Object *ob)
 Test, if ob is a basis meta-ball. More...
 
bool BKE_mball_is_basis_for (Object *ob1, Object *ob2)
 
bool BKE_mball_is_any_selected (const MetaBall *mb)
 
bool BKE_mball_is_any_selected_multi (Base **bases, int bases_len)
 
bool BKE_mball_is_any_unselected (const MetaBall *mb)
 
void BKE_mball_properties_copy (Scene *scene, Object *active_object)
 copy some properties from object to other meta-ball object with same base name More...
 
ObjectBKE_mball_basis_find (Scene *scene, Object *object)
 This function finds the basis MetaBall. More...
 
bool BKE_mball_minmax_ex (const MetaBall *mb, float min[3], float max[3], const float obmat[4][4], const short flag)
 
bool BKE_mball_minmax (const MetaBall *mb, float min[3], float max[3])
 
bool BKE_mball_center_median (const MetaBall *mb, float r_cent[3])
 
bool BKE_mball_center_bounds (const MetaBall *mb, float r_cent[3])
 
void BKE_mball_transform (MetaBall *mb, const float mat[4][4], const bool do_props)
 
void BKE_mball_translate (MetaBall *mb, const float offset[3])
 
int BKE_mball_select_count (const MetaBall *mb)
 
int BKE_mball_select_count_multi (Base **bases, int bases_len)
 
bool BKE_mball_select_all (MetaBall *mb)
 
bool BKE_mball_select_all_multi_ex (Base **bases, int bases_len)
 
bool BKE_mball_deselect_all (MetaBall *mb)
 
bool BKE_mball_deselect_all_multi_ex (Base **bases, int bases_len)
 
bool BKE_mball_select_swap (MetaBall *mb)
 
bool BKE_mball_select_swap_multi_ex (Base **bases, int bases_len)
 
void BKE_mball_batch_cache_dirty_tag (MetaBall *mb, int mode)
 
void BKE_mball_batch_cache_free (MetaBall *mb)
 

Variables

IDTypeInfo IDType_ID_MB
 
void(* BKE_mball_batch_cache_dirty_tag_cb )(MetaBall *mb, int mode) = NULL
 
void(* BKE_mball_batch_cache_free_cb )(MetaBall *mb) = NULL
 

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 39 of file mball.c.

Function Documentation

◆ BKE_mball_add()

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

Definition at line 214 of file mball.c.

References BKE_id_new(), and ID_MB.

Referenced by BKE_object_obdata_add_from_type().

◆ BKE_mball_basis_find()

Object* BKE_mball_basis_find ( Scene scene,
Object object 
)

This function finds the basis MetaBall.

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 511 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 ( MetaBall mb,
int  mode 
)

Definition at line 748 of file mball.c.

References MetaBall::batch_cache, and BKE_mball_batch_cache_dirty_tag_cb.

Referenced by BKE_object_batch_cache_dirty_tag().

◆ BKE_mball_batch_cache_free()

void BKE_mball_batch_cache_free ( MetaBall mb)

Definition at line 754 of file mball.c.

References MetaBall::batch_cache, and BKE_mball_batch_cache_free_cb.

Referenced by metaball_free_data().

◆ BKE_mball_boundbox_get()

BoundBox* BKE_mball_boundbox_get ( Object ob)

Return or compute bbox for given metaball object.

Definition at line 322 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 MetaBall mb,
float  r_cent[3] 
)

Definition at line 605 of file mball.c.

References BKE_mball_minmax(), max, mid_v3_v3v3(), and min.

◆ BKE_mball_center_median()

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

Definition at line 587 of file mball.c.

References add_v3_v3(), MetaBall::elems, LISTBASE_FOREACH, mul_v3_fl(), and zero_v3().

◆ BKE_mball_deselect_all()

bool BKE_mball_deselect_all ( MetaBall mb)

◆ BKE_mball_deselect_all_multi_ex()

bool BKE_mball_deselect_all_multi_ex ( Base **  bases,
int  bases_len 
)

◆ BKE_mball_element_add()

MetaElem* BKE_mball_element_add ( MetaBall mb,
const int  type 
)

◆ BKE_mball_is_any_selected()

bool BKE_mball_is_any_selected ( const MetaBall mb)

Definition at line 426 of file mball.c.

References MetaBall::editelems, ListBase::first, NULL, and SELECT.

Referenced by BKE_mball_is_any_selected_multi().

◆ BKE_mball_is_any_selected_multi()

bool BKE_mball_is_any_selected_multi ( Base **  bases,
int  bases_len 
)

Definition at line 436 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 MetaBall mb)

Definition at line 448 of file mball.c.

References MetaBall::editelems, ListBase::first, NULL, and SELECT.

◆ BKE_mball_is_basis()

bool BKE_mball_is_basis ( Object ob)

Test, if ob is a basis meta-ball.

It test last character of Object ID name. If last character is digit it return 0, else it return 1.

Meta-Ball Basis Notes from Blender-2.5x

This is a can of worms.

This really needs a rewrite/refactor its totally broken in anything other than basic cases Multiple Scenes + Set Scenes & mixing meta-ball basis should work but fails to update the depsgraph on rename and linking into scenes or removal of basis meta-ball. So take care when changing this code.

Main idiot thing here is that the system returns BKE_mball_basis_find() objects which fail a BKE_mball_is_basis() test.

Not only that but the depsgraph and their areas depend on this behavior, so making small fixes here isn't worth it.

  • Campbell

Definition at line 398 of file mball.c.

References Object::id, len, and ID::name.

Referenced by BKE_mball_is_basis_for(), DRW_mball_batch_cache_pos_vertbuf_get(), DRW_metaball_batch_cache_get_edge_detection(), DRW_metaball_batch_cache_get_surface_shaded(), DRW_metaball_batch_cache_get_triangles_with_normals(), DRW_metaball_batch_cache_get_wireframes_face(), libblock_remap_data_postprocess_object_update(), object_convert_exec(), and OVERLAY_bounds().

◆ BKE_mball_is_basis_for()

bool BKE_mball_is_basis_for ( Object ob1,
Object ob2 
)

◆ BKE_mball_make_orco()

float* BKE_mball_make_orco ( Object ob,
ListBase dispbase 
)

◆ BKE_mball_minmax()

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

◆ BKE_mball_minmax_ex()

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

◆ BKE_mball_properties_copy()

void BKE_mball_properties_copy ( Scene scene,
Object active_object 
)

copy some properties from object to other meta-ball object with same base name

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 influence polygonization of meta-balls.

Definition at line 465 of file mball.c.

References BKE_scene_base_iter_next(), BLI_split_name_num(), Object::data, DEG_id_tag_update(), MetaBall::flag, MetaBall::id, Object::id, MAX_ID_NAME, ID::name, NULL, OB_MBALL, MetaBall::rendersize, scene, STREQ, MetaBall::thresh, Object::type, and MetaBall::wiresize.

◆ BKE_mball_select_all()

bool BKE_mball_select_all ( MetaBall mb)

Definition at line 673 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 ( Base **  bases,
int  bases_len 
)

Definition at line 685 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 MetaBall mb)

Definition at line 651 of file mball.c.

References MetaBall::editelems, LISTBASE_FOREACH, and SELECT.

Referenced by BKE_mball_select_count_multi().

◆ BKE_mball_select_count_multi()

int BKE_mball_select_count_multi ( Base **  bases,
int  bases_len 
)

Definition at line 662 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 ( MetaBall mb)

Definition at line 720 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 ( Base **  bases,
int  bases_len 
)

Definition at line 730 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 ( Object ob)

Compute bounding box of all MetaElem / MetaBall

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 278 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(), BKE_displist_make_mball_forRender(), and BKE_mball_boundbox_get().

◆ BKE_mball_transform()

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

◆ BKE_mball_translate()

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

Definition at line 643 of file mball.c.

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

Referenced by object_origin_set_exec().

◆ metaball_blend_read_data()

static void metaball_blend_read_data ( BlendDataReader reader,
ID id 
)
static

◆ metaball_blend_read_expand()

static void metaball_blend_read_expand ( BlendExpander expander,
ID id 
)
static

Definition at line 176 of file mball.c.

References Freestyle::a, BLO_expand, MetaBall::mat, and MetaBall::totcol.

◆ metaball_blend_read_lib()

static void metaball_blend_read_lib ( BlendLibReader reader,
ID id 
)
static

◆ metaball_blend_write()

static void metaball_blend_write ( BlendWriter writer,
ID id,
const void *  id_address 
)
static

◆ metaball_copy_data()

static void metaball_copy_data ( Main UNUSEDbmain,
ID id_dst,
const ID id_src,
const int   UNUSEDflag 
)
static

◆ metaball_foreach_id()

static void metaball_foreach_id ( ID id,
LibraryForeachIDData data 
)
static

Definition at line 111 of file mball.c.

References BKE_LIB_FOREACHID_PROCESS, data, IDWALK_CB_USER, and metaball().

◆ metaball_free_data()

static void metaball_free_data ( ID id)
static

◆ metaball_init_data()

static void metaball_init_data ( ID id)
static

Variable Documentation

◆ BKE_mball_batch_cache_dirty_tag_cb

void(* BKE_mball_batch_cache_dirty_tag_cb) (MetaBall *mb, int mode) ( MetaBall mb,
int  mode 
) = NULL

Definition at line 745 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) (MetaBall *mb) ( MetaBall mb) = NULL

Definition at line 746 of file mball.c.

Referenced by BKE_mball_batch_cache_free(), and DRW_engines_register().

◆ IDType_ID_MB

IDTypeInfo IDType_ID_MB
Initial value:
= {
.id_code = ID_MB,
.id_filter = FILTER_ID_MB,
.main_listbase_index = INDEX_ID_MB,
.struct_size = sizeof(MetaBall),
.name = "Metaball",
.name_plural = "metaballs",
.translation_context = BLT_I18NCONTEXT_ID_METABALL,
.flags = 0,
.copy_data = metaball_copy_data,
.free_data = metaball_free_data,
.make_local = NULL,
.foreach_id = metaball_foreach_id,
.foreach_cache = NULL,
.owner_get = NULL,
.blend_write = metaball_blend_write,
.blend_read_data = metaball_blend_read_data,
.blend_read_lib = metaball_blend_read_lib,
.blend_read_expand = metaball_blend_read_expand,
.blend_read_undo_preserve = NULL,
.lib_override_apply_post = NULL,
}
#define BLT_I18NCONTEXT_ID_METABALL
#define FILTER_ID_MB
Definition: DNA_ID.h:717
@ INDEX_ID_MB
Definition: DNA_ID.h:829
@ ID_MB
Definition: DNA_ID_enums.h:62
struct MetaBall MetaBall
static void init_data(ModifierData *md)
static void metaball_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: mball.c:119
static void metaball_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int UNUSED(flag))
Definition: mball.c:80
static void metaball_blend_read_data(BlendDataReader *reader, ID *id)
Definition: mball.c:147
static void metaball_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: mball.c:166
static void metaball_init_data(ID *id)
Definition: mball.c:71
static void metaball_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: mball.c:111
static void metaball_free_data(ID *id)
Definition: mball.c:97
static void metaball_blend_read_expand(BlendExpander *expander, ID *id)
Definition: mball.c:176

Definition at line 184 of file mball.c.