24 #define DNA_DEPRECATED_ALLOW
99 for (
int i = 0; i <
metaball->totcol; i++) {
174 .name_plural =
"metaballs",
177 .asset_type_info =
NULL,
184 .foreach_cache =
NULL,
185 .foreach_path =
NULL,
193 .blend_read_undo_preserve =
NULL,
195 .lib_override_apply_post =
NULL,
270 (
min)[0] = (
min)[1] = (
min)[2] = 1.0e30f;
271 (
max)[0] = (
max)[1] = (
max)[2] = -1.0e30f;
319 float *
data, *orco, *orcodata;
320 float loc[3],
size[3];
325 loc[0] = (bb->
vec[0][0] + bb->
vec[4][0]) / 2.0f;
326 size[0] = bb->
vec[4][0] - loc[0];
327 loc[1] = (bb->
vec[0][1] + bb->
vec[2][1]) / 2.0f;
328 size[1] = bb->
vec[2][1] - loc[1];
329 loc[2] = (bb->
vec[0][2] + bb->
vec[1][2]) / 2.0f;
330 size[2] = bb->
vec[1][2] - loc[2];
332 dl = dispbase->
first;
333 orcodata =
MEM_mallocN(
sizeof(
float[3]) * dl->
nr,
"MballOrco");
339 orco[0] = (
data[0] - loc[0]) /
size[0];
340 orco[1] = (
data[1] - loc[1]) /
size[1];
341 orco[2] = (
data[2] - loc[2]) /
size[2];
375 int basis1nr, basis2nr;
386 return STREQ(basis1name, basis2name);
406 for (
uint base_index = 0; base_index < bases_len; base_index++) {
419 if ((ml->flag &
SELECT) == 0) {
455 if (ob_src->data != metaball_src) {
456 ob_src = ob_src->id.next;
470 int obactive_nr, ob_nr;
474 for (ob_iter = ob_src->
id.
prev; ob_iter !=
NULL; ob_iter = ob_iter->
id.
prev) {
475 if (ob_iter->
id.
name[2] != obactive_name[0]) {
482 if (!
STREQ(obactive_name, ob_name)) {
489 for (ob_iter = ob_src->
id.
next; ob_iter !=
NULL; ob_iter = ob_iter->
id.
next) {
497 if (!
STREQ(obactive_name, ob_name)) {
518 Object *ob = base->object;
525 if (
STREQ(obname, basisname)) {
526 if (obnr < basisnr) {
540 const MetaBall *mb,
float min[3],
float max[3],
const float obmat[4][4],
const short flag)
543 bool changed =
false;
544 float centroid[3], vec[3];
549 if ((ml->flag & flag) == flag) {
550 const float scale_mb = (ml->rad * 0.5f) * scale;
560 for (
int i = -1; i != 3; i += 2) {
617 const float scale_sqrt =
sqrtf(scale);
660 for (
uint ob_index = 0; ob_index < bases_len; ob_index++) {
670 bool changed =
false;
672 if ((ml->flag &
SELECT) == 0) {
682 bool changed_multi =
false;
683 for (
uint ob_index = 0; ob_index < bases_len; ob_index++) {
688 return changed_multi;
693 bool changed =
false;
695 if ((ml->flag &
SELECT) != 0) {
705 bool changed_multi =
false;
706 for (
uint ob_index = 0; ob_index < bases_len; ob_index++) {
712 return changed_multi;
717 bool changed =
false;
727 bool changed_multi =
false;
728 for (
uint ob_index = 0; ob_index < bases_len; ob_index++) {
733 return changed_multi;
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
display list (or rather multi purpose list) stuff.
void BKE_displist_free(struct ListBase *lb)
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
void * BKE_id_new(struct Main *bmain, short type, const char *name)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(_data, _id_super, _cb_flag)
General operations, lookup, etc. for materials.
General operations, lookup, etc. for blender objects.
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void mul_m4_v3(const float M[4][4], float r[3])
float mat4_to_scale(const float M[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
void mat4_to_quat(float q[4], const float mat[4][4])
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE void add_v3_fl(float r[3], float f)
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
size_t BLI_split_name_num(char *left, int *nr, const char *name, char delim)
#define INIT_MINMAX(min, max)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_read_data_address(reader, ptr_p)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
#define BLO_read_id_address(reader, lib, id_ptr_p)
#define BLO_expand(expander, id)
void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p)
void BLO_write_pointer_array(BlendWriter *writer, uint num, const void *data_ptr)
#define BLT_I18NCONTEXT_ID_METABALL
void DEG_id_tag_update(struct ID *id, int flag)
#define ID_IS_LINKED(_id)
#define DNA_struct_default_get(struct_name)
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SyclQueue void void size_t num_bytes void
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static void metaball_blend_write(BlendWriter *writer, ID *id, const void *id_address)
bool BKE_mball_select_all_multi_ex(Base **bases, int bases_len)
bool BKE_mball_is_same_group(const Object *ob1, const Object *ob2)
int BKE_mball_select_count(const MetaBall *mb)
void BKE_mball_properties_copy(Main *bmain, MetaBall *metaball_src)
bool BKE_mball_select_swap_multi_ex(Base **bases, int bases_len)
void(* BKE_mball_batch_cache_dirty_tag_cb)(MetaBall *mb, int mode)
bool BKE_mball_deselect_all(MetaBall *mb)
float * BKE_mball_make_orco(Object *ob, ListBase *dispbase)
BoundBox * BKE_mball_boundbox_get(Object *ob)
MetaBall * BKE_mball_add(Main *bmain, const char *name)
static void metaball_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int UNUSED(flag))
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_center_bounds(const MetaBall *mb, float r_cent[3])
int BKE_mball_select_count_multi(Base **bases, int bases_len)
bool BKE_mball_is_any_unselected(const MetaBall *mb)
void BKE_mball_texspace_calc(Object *ob)
static void metaball_blend_read_data(BlendDataReader *reader, ID *id)
void BKE_mball_translate(MetaBall *mb, const float offset[3])
bool BKE_mball_is_any_selected_multi(Base **bases, int bases_len)
bool BKE_mball_minmax(const MetaBall *mb, float min[3], float max[3])
static void metaball_blend_read_lib(BlendLibReader *reader, ID *id)
static void mball_data_properties_copy(MetaBall *mb_dst, MetaBall *mb_src)
bool BKE_mball_center_median(const MetaBall *mb, float r_cent[3])
void BKE_mball_batch_cache_free(MetaBall *mb)
static void metaball_init_data(ID *id)
bool BKE_mball_deselect_all_multi_ex(Base **bases, int bases_len)
static void metaball_foreach_id(ID *id, LibraryForeachIDData *data)
void(* BKE_mball_batch_cache_free_cb)(MetaBall *mb)
bool BKE_mball_is_basis(const Object *ob)
static void metaball_free_data(ID *id)
bool BKE_mball_select_swap(MetaBall *mb)
bool BKE_mball_is_any_selected(const MetaBall *mb)
Object * BKE_mball_basis_find(Scene *scene, Object *object)
void BKE_mball_transform(MetaBall *mb, const float mat[4][4], const bool do_props)
bool BKE_mball_select_all(MetaBall *mb)
void BKE_mball_batch_cache_dirty_tag(MetaBall *mb, int mode)
static void metaball_blend_read_expand(BlendExpander *expander, ID *id)
MetaElem * BKE_mball_element_add(MetaBall *mb, const int type)
bool BKE_mball_is_basis_for(const Object *ob1, const Object *ob2)
static float metaball(PROCESS *process, float x, float y, float z)
struct CurveCache * curve_cache