22#define DNA_DEPRECATED_ALLOW
70 std::optional<Library *> ,
245 radius_stiffness[0] += offset;
246 radius_stiffness[1] += offset;
248 return radius_stiffness;
252 float radius = ml->
rad;
285 int basis1nr, basis2nr;
296 return STREQ(basis1name, basis2name);
316 for (
Base *base : bases) {
317 Object *obedit = base->object;
329 if ((ml->flag &
SELECT) == 0) {
367 if (ob_src->data != metaball_src) {
368 ob_src =
static_cast<Object *
>(ob_src->id.next);
381 Object *ob_iter =
nullptr;
382 int obactive_nr, ob_nr;
386 for (ob_iter =
static_cast<Object *
>(ob_src->id.prev); ob_iter !=
nullptr;
389 if (ob_iter->
id.
name[2] != obactive_name[0]) {
396 if (!
STREQ(obactive_name, ob_name)) {
403 for (ob_iter =
static_cast<Object *
>(ob_src->id.next); ob_iter !=
nullptr;
413 if (!
STREQ(obactive_name, ob_name)) {
435 Object *ob = base->object;
442 if (
STREQ(obname, basisname)) {
443 if (obnr < basisnr) {
457 const MetaBall *mb,
float min[3],
float max[3],
const float obmat[4][4],
const short flag)
460 bool changed =
false;
461 float centroid[3], vec[3];
467 const float scale_mb = (ml->rad * 0.5f) * scale;
477 for (
int i = -1;
i != 3;
i += 2) {
534 const float scale_sqrt =
sqrtf(scale);
577 for (
Base *base : bases) {
578 Object *obedit = base->object;
587 bool changed =
false;
589 if ((ml->flag &
SELECT) == 0) {
599 bool changed_multi =
false;
600 for (
Base *base : bases) {
601 Object *obedit = base->object;
605 return changed_multi;
610 bool changed =
false;
612 if ((ml->flag &
SELECT) != 0) {
622 bool changed_multi =
false;
623 for (
Base *base : bases) {
624 Object *obedit = base->object;
629 return changed_multi;
634 bool changed =
false;
644 bool changed_multi =
false;
645 for (
Base *base : bases) {
646 Object *obedit = base->object;
650 return changed_multi;
664 if (ob != basis_object) {
669 if (
mesh ==
nullptr) {
681 reinterpret_cast<float(*)[3]
>(
mesh->vert_positions_for_write().data()),
686 mesh->tag_positions_changed();
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
void BKE_lattice_deform_coords(const Object *ob_lattice, const Object *ob_target, float(*vert_coords)[3], int vert_coords_len, short flag, const char *defgrp_name, float fac)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void * BKE_id_new(Main *bmain, short type, const char *name)
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
@ IDWALK_DO_DEPRECATED_POINTERS
#define BKE_LIB_FOREACHID_PROCESS_ID_NOCHECK(data_, id_, cb_flag_)
Mesh * BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob)
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(Object *ob)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void void void void BLI_duplicatelist(ListBase *dst, const ListBase *src) ATTR_NONNULL(1
MINLINE float min_fff(float a, float b, float c)
float mat4_to_scale(const float mat[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[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])
#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_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
void BLO_write_pointer_array(BlendWriter *writer, int64_t num, const void *data_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, int64_t array_size, void **ptr_p)
#define BLT_I18NCONTEXT_ID_METABALL
void DEG_id_tag_update(ID *id, unsigned int flags)
#define DNA_struct_default_get(struct_name)
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
blender::StringRef BLI_string_split_name_number(const blender::StringRef name_full, const char delim, int &r_number)
BMesh const char void * data
BPy_StructRNA * depsgraph
#define ID_IS_EDITABLE(_id)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
static void metaball_blend_write(BlendWriter *writer, ID *id, const void *id_address)
void BKE_mball_data_update(Depsgraph *depsgraph, Scene *scene, Object *ob)
Object * BKE_mball_basis_find(Scene *scene, Object *object)
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_deselect_all(MetaBall *mb)
bool BKE_mball_is_any_selected_multi(const Span< Base * > bases)
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])
bool BKE_mball_is_any_unselected(const MetaBall *mb)
bool BKE_mball_select_swap_multi_ex(const Span< Base * > bases)
MetaBall * BKE_mball_add(Main *bmain, const char *name)
static void metaball_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
static void metaball_blend_read_data(BlendDataReader *reader, ID *id)
void BKE_mball_translate(MetaBall *mb, const float offset[3])
bool BKE_mball_minmax(const MetaBall *mb, float min[3], float max[3])
static void mball_data_properties_copy(MetaBall *mb_dst, MetaBall *mb_src)
bool BKE_mball_center_median(const MetaBall *mb, float r_cent[3])
static void metaball_init_data(ID *id)
blender::float2 BKE_mball_element_display_radius_calc_with_stiffness(const MetaElem *ml)
static void metaball_foreach_id(ID *id, LibraryForeachIDData *data)
float BKE_mball_element_display_radius_calc(const MetaElem *ml)
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)
bool BKE_mball_deselect_all_multi_ex(const Span< Base * > bases)
void BKE_mball_transform(MetaBall *mb, const float mat[4][4], const bool do_props)
bool BKE_mball_select_all(MetaBall *mb)
bool BKE_mball_select_all_multi_ex(const Span< Base * > bases)
int BKE_mball_select_count_multi(const Span< Base * > bases)
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)
VecBase< float, 2 > float2
static GeometrySet from_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
ObjectRuntimeHandle * runtime