87#include "RNA_prototypes.hh"
152 const int mode = md_eval->
mode;
155 md_eval->
mode = mode;
205 next_md = next_md->
next;
264 if ((md != exclude) && (md->type == type)) {
274 const bool include_orig,
275 bool (*callback)(
Object *ob,
void *callback_data),
278 ID *ob_data_id =
static_cast<ID *
>(orig_ob->
data);
288 int totfound = include_orig ? 0 : 1;
293 if (((ob != orig_ob) || include_orig) && (ob->
data == orig_ob->
data)) {
294 if (callback(ob, callback_data)) {
302 else if (include_orig) {
303 return callback(orig_ob, callback_data);
318 int totlevel = *((
char *)totlevel_v);
366 *r_sort_depsgraph =
true;
369 *r_sort_depsgraph =
true;
401 bool sort_depsgraph =
false;
419 bool sort_depsgraph =
false;
452 BKE_report(reports, error_type,
"Cannot move above a modifier requiring original data");
458 BKE_report(reports, error_type,
"Cannot move modifier beyond the start of the list");
490 BKE_report(reports, error_type,
"Cannot move beyond a non-deforming modifier");
496 BKE_report(reports, error_type,
"Cannot move modifier beyond the end of the list");
523 BKE_report(reports, error_type,
"Cannot move modifier beyond the end of the stack");
530 if (md_index < index) {
534 for (; md_index < index; md_index++, md_target = md_target->
next) {
536 if (!allow_partial || md == md_target) {
549 else if (md_index > index) {
553 for (; md_index > index; md_index--, md_target = md_target->
prev) {
555 if (!allow_partial || md == md_target) {
606 "Object '%s' does not support %s modifiers",
616 "Modifier can only be added once to object '%s'",
625 "Copying modifier '%s' to object '%s' failed",
673 int verts_num = 0, edges_num = 0;
675 for (
int a = 0; a < part_num; a++) {
685 for (
int a = 0; a < child_num; a++) {
694 if (verts_num == 0) {
711 for (
int a = 0; a < part_num; a++) {
714 for (
int k = 0; k <= kmax; k++, key++, cvert++, vert_index++) {
715 positions[vert_index] = key->
co;
717 edges[edge_index] =
int2(cvert - 1, cvert);
722 select_vert.
span[vert_index] =
true;
728 for (
int a = 0; a < child_num; a++) {
731 for (
int k = 0; k <= kmax; k++, key++, cvert++, vert_index++) {
734 edges[edge_index] =
int2(cvert - 1, cvert);
739 select_vert.
span[vert_index] =
true;
764 "vertex size mismatch (Mesh '%s':%d != KeyBlock '%s':%d)",
793 const bool use_virtual_modifiers,
794 const bool build_shapekey_layers,
798 reinterpret_cast<Mesh *
>(ob_eval->
runtime->data_orig) :
799 reinterpret_cast<Mesh *
>(ob_eval->
data);
811 if (build_shapekey_layers &&
mesh->key) {
819 Mesh *mesh_temp =
reinterpret_cast<Mesh *
>(
823 if (use_virtual_modifiers) {
828 md_eval_virt = md_eval_virt->
next)
840 mti_virt->
deform_verts(md_eval_virt, &mectx, mesh_temp, deformedVerts);
848 result->tag_positions_changed();
850 if (build_shapekey_layers) {
855 if (build_shapekey_layers) {
864 BKE_report(reports,
RPT_ERROR,
"Evaluated geometry from modifier does not contain a mesh");
871 if (mesh_temp !=
result) {
925 if (key ==
nullptr) {
962 grease_pencil_temp->
runtime->eval_frame = eval_frame;
964 GeometryOwnershipType::Owned);
977 grease_pencil_orig.layers().index_range(),
1003 for (
const int layer_i : grease_pencil_orig.layers().index_range()) {
1004 const Layer &layer = grease_pencil_orig.layer(layer_i);
1005 for (
const auto &[key, value] : layer.
frames().
items()) {
1006 if (value.is_end()) {
1009 layer_indices_to_apply_per_frame.
lookup_or_add(key, {}).append(layer_i);
1014 Array<int> sorted_frame_times(layer_indices_to_apply_per_frame.
size());
1016 for (
const int key : layer_indices_to_apply_per_frame.
keys()) {
1017 sorted_frame_times[
i++] = key;
1019 std::sort(sorted_frame_times.
begin(), sorted_frame_times.
end());
1022 bool changed =
false;
1023 for (
const int eval_frame : sorted_frame_times) {
1024 const Span<int> layer_indices = layer_indices_to_apply_per_frame.
lookup(eval_frame).as_span();
1025 scene->
r.
cfra = eval_frame;
1031 ob_eval->
runtime->data_orig) :
1032 &grease_pencil_orig;
1036 grease_pencil_temp->
runtime->eval_frame = eval_frame;
1038 GeometryOwnershipType::Owned);
1052 grease_pencil_result, eval_frame, orig_layers_to_apply, grease_pencil_orig);
1058 scene->
r.
cfra = prev_frame;
1073 const bool do_all_keyframes)
1096 if (mmd && mmd->
totlvl &&
1115 if (!mesh_applied) {
1124 mesh->attributes_for_write().remove_anonymous();
1144 "Cannot apply constructive modifiers on curve. Convert curve to mesh in order to apply");
1150 "Applied modifier only changed CV points, not tessellated/bevel vertices");
1153 mti->
deform_verts(md_eval, &mectx,
nullptr, vertexCos);
1169 mti->
deform_verts(md_eval, &mectx,
nullptr, positions);
1187 BKE_report(reports,
RPT_ERROR,
"Evaluated geometry from modifier does not contain curves");
1193 curves_eval.
geometry.wrap().attributes_for_write().remove_anonymous();
1213 reports,
RPT_ERROR,
"Evaluated geometry from modifier does not contain a point cloud");
1220 pointcloud_eval->attributes_for_write().remove_anonymous();
1232 bool success =
false;
1233 if (do_all_keyframes) {
1240 depsgraph, scene, ob, grease_pencil_orig, md);
1248 "Evaluated geometry from modifier does not contain Grease Pencil geometry");
1280 const bool do_all_keyframes)
1295 "Constructive modifier cannot be applied to multi-res data in sculpt mode");
1300 BKE_report(reports,
RPT_INFO,
"Applied modifier was not first, result may not be as expected");
1309 Depsgraph *local_depsgraph =
nullptr;
1327 apply_depsgraph = local_depsgraph;
1338 bool did_apply =
false;
1344 reports, apply_depsgraph, scene, ob, md_eval, do_all_keyframes);
1348 if (!keep_modifier) {
1355 if (local_depsgraph !=
nullptr) {
1407 "use_selected_objects",
1410 "Affect all selected objects instead of just the active object");
1424 bool changed =
false;
1481 group_item = md_item;
1487 group_item =
nullptr;
1504 ot->name =
"Add Modifier";
1505 ot->description =
"Add a procedural operation/effect to the active object";
1506 ot->idname =
"OBJECT_OT_modifier_add";
1535 const bool is_editmode_allowed,
1536 const bool is_liboverride_allowed)
1543 if (
mod ==
nullptr && ob !=
nullptr) {
1550 if (obtype_flag && ((1 << ob->
type) & obtype_flag) == 0) {
1559 C,
"Cannot edit modifiers coming from linked data in a library override");
1586 ot->srna,
"modifier",
nullptr,
MAX_NAME,
"Modifier",
"Name of the modifier to edit");
1593 ot->srna,
"report",
false,
"Report",
"Create a notification after the operation");
1612 if (ctx_ptr.
data !=
nullptr) {
1643 if (ctx_ptr.
data !=
nullptr) {
1675 if (md && type != 0 && md->
type != type) {
1697 bool changed =
false;
1701 if (md ==
nullptr) {
1705 int mode_orig = ob->
mode;
1747 ot->name =
"Remove Modifier";
1748 ot->description =
"Remove a modifier from the active object";
1749 ot->idname =
"OBJECT_OT_modifier_remove";
1790 ot->name =
"Clear Object Modifiers";
1791 ot->description =
"Clear all modifiers from the selected objects";
1792 ot->idname =
"OBJECT_OT_modifiers_clear";
1832 ot->name =
"Move Up Modifier";
1833 ot->description =
"Move modifier up in the stack";
1834 ot->idname =
"OBJECT_OT_modifier_move_up";
1879 ot->name =
"Move Down Modifier";
1880 ot->description =
"Move modifier down in the stack";
1881 ot->idname =
"OBJECT_OT_modifier_move_down";
1905 bool changed =
false;
1939 ot->name =
"Move Active Modifier to Index";
1941 "Change the modifier's index in the stack so it evaluates after the set number of others";
1942 ot->idname =
"OBJECT_OT_modifier_move_to_index";
1952 ot->srna,
"index", 0, 0, INT_MAX,
"Index",
"The index to move the modifier to", 0, INT_MAX);
1977 if (md !=
nullptr) {
1982 C,
"Constructive modifier cannot be applied to multi-res data in sculpt mode");
2015 bool changed =
false;
2019 if (md ==
nullptr) {
2093 IFACE_(
"Apply Modifier"),
2094 IFACE_(
"Make data single-user, apply modifier, and remove it from the list."),
2109 ot->name =
"Apply Modifier";
2110 ot->description =
"Apply modifier and remove from the stack";
2111 ot->idname =
"OBJECT_OT_modifier_apply";
2127 "For mesh objects, merge UV coordinates that share a vertex to account for "
2128 "imprecision in some modifiers");
2132 "Make Data Single User",
2133 "Make the object's data single user if needed");
2138 "Apply to all keyframes",
2139 "For Grease Pencil objects, apply the modifier to all the keyframes");
2179 return TIP_(
"Apply modifier as a new shapekey and keep it in the stack");
2187 ot->name =
"Apply Modifier as Shape Key";
2188 ot->description =
"Apply modifier as a new shape key and remove from the stack";
2189 ot->idname =
"OBJECT_OT_modifier_apply_as_shapekey";
2200 ot->srna,
"keep_modifier",
false,
"Keep Modifier",
"Do not remove the modifier from stack");
2243 ot->name =
"Convert Particles to Mesh";
2244 ot->description =
"Convert particles to a mesh object";
2245 ot->idname =
"OBJECT_OT_modifier_convert";
2269 bool changed =
false;
2304 ot->name =
"Copy Modifier";
2305 ot->description =
"Duplicate modifier at the same position in the stack";
2306 ot->idname =
"OBJECT_OT_modifier_copy";
2350 ot->name =
"Set Active Modifier";
2351 ot->description =
"Activate the modifier to use as the context";
2352 ot->idname =
"OBJECT_OT_modifier_set_active";
2396 if (num_copied > 0) {
2444 bool found_supported_objects =
false;
2453 found_supported_objects =
true;
2458 found_supported_objects =
true;
2464 if (!found_supported_objects) {
2473 ot->name =
"Copy Modifier to Selected";
2474 ot->description =
"Copy the modifier from the active object to all selected objects";
2475 ot->idname =
"OBJECT_OT_modifier_copy_to_selected";
2495 if (
object == active_object) {
2533 ot->name =
"Copy Modifiers to Selected Objects";
2534 ot->idname =
"OBJECT_OT_modifiers_copy_to_selected";
2535 ot->description =
"Copy modifiers to other selected objects";
2568 return (ob !=
nullptr &&
2629 ot->name =
"Skin Root Mark";
2630 ot->description =
"Mark selected vertices as roots";
2631 ot->idname =
"OBJECT_OT_skin_root_mark";
2683 {
SKIN_LOOSE_MARK,
"MARK", 0,
"Mark",
"Mark selected vertices as loose"},
2684 {
SKIN_LOOSE_CLEAR,
"CLEAR", 0,
"Clear",
"Set selected vertices as not loose"},
2685 {0,
nullptr, 0,
nullptr,
nullptr},
2688 ot->name =
"Skin Mark/Clear Loose";
2689 ot->description =
"Mark/clear selected vertices as loose";
2690 ot->idname =
"OBJECT_OT_skin_loose_mark_clear";
2731 ot->name =
"Skin Radii Equalize";
2732 ot->description =
"Make skin radii of selected vertices equal on each axis";
2733 ot->idname =
"OBJECT_OT_skin_radii_equalize";
2751 for (
int i = 0;
i < emap[parent_v].
size();
i++) {
2752 int endx = emap[parent_v][
i];
2753 const int2 &edge = edges[endx];
2765 bone->
parent = parent_bone;
2766 if (parent_bone !=
nullptr) {
2777 if (dg !=
nullptr) {
2797 const Span<float3> positions_eval = me_eval_deform->vert_positions();
2800 mesh->deform_verts_for_write();
2818 me_edges,
mesh->verts_num, vert_to_edge_offsets, vert_to_edge_indices);
2824 for (
int v = 0;
v <
mesh->verts_num;
v++) {
2831 if (emap[
v].
size() > 1) {
2837 bone->
head[1] = 1.0f;
2841 if (emap[
v].
size() >= 1) {
2843 skin_ob, positions_eval, me_edges.
data(), arm, edges_visited, emap, bone,
v);
2902 ot->name =
"Skin Armature Create";
2903 ot->description =
"Create an armature that parallels the skin layout";
2904 ot->idname =
"OBJECT_OT_skin_armature_create";
2943 const bool is_bind = (csmd->
bind_coords !=
nullptr);
2982 ot->name =
"Corrective Smooth Bind";
2983 ot->description =
"Bind base pose in Corrective Smooth modifier";
2984 ot->idname =
"OBJECT_OT_correctivesmooth_bind";
3015 if (mmd ==
nullptr) {
3060 ot->name =
"Mesh Deform Bind";
3061 ot->description =
"Bind mesh to cage in mesh deform modifier";
3062 ot->idname =
"OBJECT_OT_meshdeform_bind";
3115 ot->name =
"Explode Refresh";
3116 ot->description =
"Refresh data in the Explode modifier";
3117 ot->idname =
"OBJECT_OT_explode_refresh";
3165 return (
G.is_break);
3194 worker_status->
stop =
false;
3203 oj->
ocean =
nullptr;
3245 int cfra = scene->
r.
cfra;
3250 for (
int f = omd->
bakestart; f <= omd->bakeend; f++) {
3274 scene->
r.
cfra = cfra;
3282 scene->
r.
cfra = cfra;
3288 "Simulating ocean...",
3316 ot->name =
"Bake Ocean";
3317 ot->description =
"Bake an image sequence of ocean data";
3318 ot->idname =
"OBJECT_OT_ocean_bake";
3328 RNA_def_boolean(
ot->srna,
"free",
false,
"Free",
"Free the bake, rather than generating it");
3349 if (lmd ==
nullptr) {
3371 if (lmd_eval->
vertexco ==
nullptr) {
3399 ot->name =
"Laplacian Deform Bind";
3400 ot->description =
"Bind mesh to system in laplacian deform modifier";
3401 ot->idname =
"OBJECT_OT_laplaciandeform_bind";
3431 if (smd ==
nullptr) {
3468 ot->name =
"Surface Deform Bind";
3469 ot->description =
"Bind mesh to target in surface deform modifier";
3470 ot->idname =
"OBJECT_OT_surfacedeform_bind";
3499 if (nmd ==
nullptr) {
3507 nmd->
settings.
properties, std::string(input_name + std::string(
"_use_attribute")).c_str());
3508 if (!use_attribute) {
3529 ot->name =
"Input Attribute Toggle";
3531 "Switch between an attribute and a single value to define the data for every element";
3532 ot->idname =
"OBJECT_OT_geometry_nodes_input_attribute_toggle";
3560 if (
tree ==
nullptr) {
3569 if (new_tree ==
nullptr) {
3585 ot->name =
"New Geometry Node Group";
3587 "Duplicate the active geometry node group and assign it to the active modifier";
3588 ot->idname =
"OBJECT_OT_geometry_node_tree_copy_assign";
3613 if (dmd ==
nullptr) {
3620 const int new_active_index = std::clamp(dmd->segment_active_index + 1, 0, dmd->segments_num);
3621 if (dmd->segments_num != 0) {
3623 memcpy(new_segments,
3624 dmd->segments_array,
3627 memcpy(new_segments + new_active_index + 1,
3628 dmd->segments_array + new_active_index,
3650 dmd->segments_array = new_segments;
3651 dmd->segments_num++;
3652 dmd->segment_active_index = new_active_index;
3673 ot->name =
"Add Segment";
3674 ot->description =
"Add a segment to the dash modifier";
3675 ot->idname =
"OBJECT_OT_grease_pencil_dash_modifier_segment_add";
3695 if (dmd ==
nullptr) {
3699 if (!dmd->segments().index_range().contains(dmd->segment_active_index)) {
3705 &dmd->segment_active_index,
3706 dmd->segment_active_index,
3728 ot->name =
"Remove Dash Segment";
3729 ot->description =
"Remove the active segment from the dash modifier";
3730 ot->idname =
"OBJECT_OT_grease_pencil_dash_modifier_segment_remove";
3742 ot->srna,
"index", 0, 0, INT_MAX,
"Index",
"Index of the segment to remove", 0, INT_MAX);
3756 if (dmd ==
nullptr) {
3760 if (dmd->segments_num < 2) {
3766 switch (direction) {
3768 if (dmd->segment_active_index == 0) {
3772 std::swap(dmd->segments_array[dmd->segment_active_index],
3773 dmd->segments_array[dmd->segment_active_index - 1]);
3775 dmd->segment_active_index--;
3778 if (dmd->segment_active_index == dmd->segments_num - 1) {
3782 std::swap(dmd->segments_array[dmd->segment_active_index],
3783 dmd->segments_array[dmd->segment_active_index + 1]);
3785 dmd->segment_active_index++;
3812 {0,
nullptr, 0,
nullptr,
nullptr},
3816 ot->name =
"Move Dash Segment";
3817 ot->description =
"Move the active dash segment up or down";
3818 ot->idname =
"OBJECT_OT_grease_pencil_dash_modifier_segment_move";
3849 if (tmd ==
nullptr) {
3856 const int new_active_index = std::clamp(tmd->segment_active_index + 1, 0, tmd->segments_num);
3857 if (tmd->segments_num != 0) {
3859 memcpy(new_segments,
3860 tmd->segments_array,
3863 memcpy(new_segments + new_active_index + 1,
3864 tmd->segments_array + new_active_index,
3886 tmd->segments_array = new_segments;
3887 tmd->segments_num++;
3888 tmd->segment_active_index++;
3909 ot->name =
"Add Segment";
3910 ot->description =
"Add a segment to the time modifier";
3911 ot->idname =
"OBJECT_OT_grease_pencil_time_modifier_segment_add";
3931 if (tmd ==
nullptr) {
3935 if (!tmd->segments().index_range().contains(tmd->segment_active_index)) {
3941 &tmd->segment_active_index,
3942 tmd->segment_active_index,
3964 ot->name =
"Remove Segment";
3965 ot->description =
"Remove the active segment from the time modifier";
3966 ot->idname =
"OBJECT_OT_grease_pencil_time_modifier_segment_remove";
3978 ot->srna,
"index", 0, 0, INT_MAX,
"Index",
"Index of the segment to remove", 0, INT_MAX);
3992 if (tmd ==
nullptr) {
3996 if (tmd->segments_num < 2) {
4002 switch (direction) {
4004 if (tmd->segment_active_index == 0) {
4008 std::swap(tmd->segments_array[tmd->segment_active_index],
4009 tmd->segments_array[tmd->segment_active_index - 1]);
4011 tmd->segment_active_index--;
4014 if (tmd->segment_active_index == tmd->segments_num - 1) {
4018 std::swap(tmd->segments_array[tmd->segment_active_index],
4019 tmd->segments_array[tmd->segment_active_index + 1]);
4021 tmd->segment_active_index++;
4048 {0,
nullptr, 0,
nullptr,
nullptr},
4052 ot->name =
"Move Segment";
4053 ot->description =
"Move the active time segment up or down";
4054 ot->idname =
"OBJECT_OT_grease_pencil_time_modifier_segment_move";
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
void ANIM_armature_bonecoll_show_all(bArmature *armature)
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time) ATTR_WARN_UNUSED_RESULT
void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, const struct AnimationEvalContext *anim_eval_context, eAnimData_Recalc recalc, bool flush_to_original)
bool BKE_animdata_drivers_remove_for_rna_struct(struct ID &owner_id, struct StructRNA &type, void *data)
#define CTX_DATA_BEGIN(C, Type, instance, member)
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type)
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
bool CTX_data_selected_objects(const bContext *C, blender::Vector< PointerRNA > *list)
Main * CTX_data_main(const bContext *C)
bool CTX_data_selected_editable_objects(const bContext *C, blender::Vector< PointerRNA > *list)
wmWindowManager * CTX_wm_manager(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
blender::Array< blender::float3 > BKE_curve_nurbs_vert_coords_alloc(const ListBase *lb)
void BKE_curve_nurbs_vert_coords_apply(ListBase *lb, const blender::Span< blender::float3 > vert_coords, bool constrain_2d)
Low-level operations for curves that cannot be defined in the C++ header yet.
void BKE_curves_data_update(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object)
Low-level operations for curves.
int CustomData_get_offset(const CustomData *data, eCustomDataType type)
int CustomData_get_layer_index_n(const CustomData *data, eCustomDataType type, int n)
void * CustomData_bmesh_get(const CustomData *data, void *block, eCustomDataType type)
const CustomData_MeshMasks CD_MASK_BAREMESH
void * CustomData_get_layer_for_write(CustomData *data, eCustomDataType type, int totelem)
const void * CustomData_add_layer_with_data(CustomData *data, eCustomDataType type, void *layer_data, int totelem, const blender::ImplicitSharingInfo *sharing_info)
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
const CustomData_MeshMasks CD_MASK_DERIVEDMESH
bool CustomData_free_layer_active(CustomData *data, eCustomDataType type)
display list (or rather multi purpose list) stuff.
void BKE_displist_make_curveTypes(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, bool for_render)
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
struct PartDeflect * BKE_partdeflect_new(int type)
Low-level operations for grease pencil.
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define IDP_bool_set(prop, value)
#define IDP_int_get(prop)
#define IDP_int_set(prop, value)
#define IDP_bool_get(prop)
Key * BKE_key_add(Main *bmain, ID *id)
KeyBlock * BKE_keyblock_add(Key *key, const char *name)
void BKE_keyblock_convert_to_mesh(const KeyBlock *kb, blender::MutableSpan< blender::float3 > vert_positions)
void BKE_keyblock_convert_from_mesh(const Mesh *mesh, const Key *key, KeyBlock *kb)
void BKE_lattice_vert_coords_apply(Lattice *lt, blender::Span< blender::float3 > vert_coordss)
void BKE_lattice_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
blender::Array< blender::float3 > BKE_lattice_vert_coords_alloc(const Lattice *lt)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
bool BKE_id_is_editable(const Main *bmain, const ID *id)
void BKE_id_free(Main *bmain, void *idv)
void BKE_main_id_newptr_and_tag_clear(Main *bmain)
ID * BKE_id_copy_ex(Main *bmain, const ID *id, ID **new_id_p, int flag)
void BKE_main_ensure_invariants(Main &bmain, std::optional< blender::Span< ID * > > modified_ids=std::nullopt)
General operations, lookup, etc. for materials.
void BKE_object_material_from_eval_data(Main *bmain, Object *ob_orig, const ID *data_eval)
void BKE_mball_data_update(Depsgraph *depsgraph, Scene *scene, Object *ob)
void BKE_mesh_ensure_skin_customdata(Mesh *mesh)
void BKE_mesh_nomain_to_meshkey(Mesh *mesh_src, Mesh *mesh_dst, KeyBlock *kb)
Mesh * BKE_mesh_new_nomain(int verts_num, int edges_num, int faces_num, int corners_num)
void BKE_mesh_nomain_to_mesh(Mesh *mesh_src, Mesh *mesh_dst, Object *ob, bool process_shape_keys=true)
void BKE_mesh_merge_customdata_for_apply_modifier(Mesh *mesh)
bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode)
ModifierData * BKE_modifiers_findby_type(const Object *ob, ModifierType type)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
void BKE_modifiers_persistent_uid_init(const Object &object, ModifierData &md)
@ eModifierTypeFlag_Single
@ eModifierTypeFlag_NoUserAdd
@ eModifierTypeFlag_RequiresOriginalData
ModifierData * BKE_modifier_get_original(const Object *object, ModifierData *md)
ModifierData * BKE_modifiers_findby_name(const Object *ob, const char *name)
const char * BKE_modifier_path_relbase(Main *bmain, Object *ob)
bool BKE_modifier_is_same_topology(ModifierData *md)
void BKE_modifier_unique_name(ListBase *modifiers, ModifierData *md)
void BKE_modifier_free(ModifierData *md)
bool BKE_modifier_is_nonlocal_in_liboverride(const Object *ob, const ModifierData *md)
void BKE_modifier_remove_from_list(Object *ob, ModifierData *md)
ModifierData * BKE_modifier_get_evaluated(Depsgraph *depsgraph, Object *object, ModifierData *md)
ModifierData * BKE_modifiers_get_virtual_modifierlist(const Object *ob, VirtualModifierData *data)
ModifierData * BKE_modifier_new(int type)
void BKE_modifier_copydata(const ModifierData *md, ModifierData *target)
void multires_customdata_delete(Mesh *mesh)
bool multiresModifier_reshapeFromDeformModifier(Depsgraph *depsgraph, Object *ob, MultiresModifierData *mmd, ModifierData *deform_md)
MultiresModifierData * find_multires_modifier_before(Scene *scene, ModifierData *lastmd)
void multiresModifier_set_levels_from_disps(MultiresModifierData *mmd, Object *ob)
void multires_force_sculpt_rebuild(Object *object)
void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl)
General operations, lookup, etc. for blender objects.
void BKE_object_eval_reset(Object *ob_eval)
void BKE_object_modifier_set_active(Object *ob, ModifierData *md)
bool BKE_object_is_in_editmode(const Object *ob)
bool BKE_object_supports_modifiers(const Object *ob)
Object * BKE_object_add(Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name) ATTR_NONNULL(1
ModifierData * BKE_object_active_modifier(const Object *ob)
void BKE_object_link_modifiers(Object *ob_dst, const Object *ob_src)
bool BKE_object_support_modifier_type_check(const Object *ob, int modifier_type)
bool BKE_object_copy_modifier(Main *bmain, const Scene *scene, Object *ob_dst, const Object *ob_src, const ModifierData *md)
void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
void BKE_object_free_derived_caches(Object *ob)
struct Ocean * BKE_ocean_add(void)
void BKE_ocean_bake(struct Ocean *o, struct OceanCache *och, void(*update_cb)(void *, float progress, int *cancel), void *update_cb_data)
void BKE_ocean_free_modifier_cache(struct OceanModifierData *omd)
bool BKE_ocean_init_from_modifier(struct Ocean *ocean, struct OceanModifierData const *omd, int resolution)
void BKE_ocean_free(struct Ocean *oc)
struct OceanCache * BKE_ocean_init_cache(const char *bakepath, const char *relbase, int start, int end, float wave_scale, float chop_amount, float foam_coverage, float foam_fade, int resolution)
void BKE_sculpt_mask_layers_ensure(Depsgraph *depsgraph, Main *bmain, Object *ob, MultiresModifierData *mmd)
struct ModifierData * object_add_particle_system(struct Main *bmain, const struct Scene *scene, struct Object *ob, const char *name)
void object_remove_particle_system(struct Main *bmain, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys)
struct ParticleSystem * psys_eval_get(struct Depsgraph *depsgraph, struct Object *object, struct ParticleSystem *psys)
void psys_apply_hair_lattice(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys)
struct ModifierData * object_copy_particle_system(struct Main *bmain, const struct Scene *scene, struct Object *ob, const struct ParticleSystem *psys_orig)
General operations for point clouds.
PointCloud * BKE_pointcloud_copy_for_eval(const PointCloud *pointcloud_src)
void BKE_pointcloud_nomain_to_pointcloud(PointCloud *pointcloud_src, PointCloud *pointcloud_dst)
void BKE_pointcloud_data_update(Depsgraph *depsgraph, Scene *scene, Object *object)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_scene_graph_update_for_newframe(Depsgraph *depsgraph)
struct SoftBody * sbNew(void)
void sbFree(struct Object *ob)
void BKE_volume_data_update(Depsgraph *depsgraph, Scene *scene, Object *object)
#define BLI_assert_unreachable()
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
GSet * BLI_gset_ptr_new(const char *info)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_gset_add(GSet *gs, void *key)
void BLI_kdtree_nd_ free(KDTree *tree)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_listbase_swaplinks(ListBase *listbase, void *vlinka, void *vlinkb) ATTR_NONNULL(1
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define SNPRINTF_UTF8(dst, format,...)
#define STRNCPY_UTF8(dst, src)
size_t void BLI_uniquename_cb(blender::FunctionRef< bool(blender::StringRefNull)> unique_check, const char *defname, char delim, char *name, size_t name_maxncpy) ATTR_NONNULL(2
#define CLOG_ERROR(clg_ref,...)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_disable_visibility_optimization(Depsgraph *depsgraph)
Depsgraph * DEG_graph_new(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
void DEG_evaluate_on_refresh(Depsgraph *graph, DepsgraphEvaluateSyncWriteback sync_writeback=DEG_EVALUATE_SYNC_WRITEBACK_NO)
void DEG_graph_free(Depsgraph *graph)
void DEG_relations_tag_update(Main *bmain)
void DEG_graph_build_from_ids(Depsgraph *graph, blender::Span< ID * > ids)
float DEG_get_ctime(const Depsgraph *graph)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
ViewLayer * DEG_get_input_view_layer(const Depsgraph *graph)
Main * DEG_get_bmain(const Depsgraph *graph)
Scene * DEG_get_input_scene(const Depsgraph *graph)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
#define ID_IS_EDITABLE(_id)
#define ID_REAL_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define DNA_struct_default_get(struct_name)
@ eModifierFlag_OverrideLibrary_Local
@ NODES_MODIFIER_HIDE_DATABLOCK_SELECTOR
@ eModifierType_ParticleSystem
@ eModifierType_MeshDeform
@ eModifierType_GreasePencilTime
@ eModifierType_LaplacianDeform
@ eModifierType_GreasePencilDash
@ eModifierType_SurfaceDeform
@ eModifierType_CorrectiveSmooth
@ eModifierType_Collision
@ MOD_LAPLACIANDEFORM_BIND
bool ED_operator_object_active_only(bContext *C)
bool ED_operator_object_active_local_editable(bContext *C)
bool ED_operator_object_active(bContext *C)
bool ED_operator_object_active_editable(bContext *C)
Read Guarded memory(de)allocation.
PointerRNA * UI_region_panel_custom_data_under_cursor(const bContext *C, const wmEvent *event)
@ WM_JOB_TYPE_OBJECT_SIM_OCEAN
EditBone * ED_armature_ebone_add(bArmature *arm, const char *name)
void ED_armature_edit_free(bArmature *arm)
void ED_armature_from_edit(Main *bmain, bArmature *arm)
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_elem_flag_test(ele, hflag)
void BM_data_layer_free(BMesh *bm, CustomData *data, int type)
#define BM_ITER_ELEM(ele, iter, data, itype)
#define BM_ITER_MESH(ele, iter, bm, itype)
BMesh const char void * data
BLI_INLINE BMVert * BM_edge_other_vert(BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
BPy_StructRNA * depsgraph
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
ItemIterator items() const &
static IndexMask from_indices(Span< T > indices, IndexMaskMemory &memory)
const Value & lookup(const Key &key) const
KeyIterator keys() const &
Value & lookup_or_add(const Key &key, const Value &value)
constexpr const T * data() const
void append(const T &value)
GSpanAttributeWriter lookup_or_add_for_write_span(StringRef attribute_id, AttrDomain domain, AttrType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
const Map< FramesMapKeyT, GreasePencilFrame > & frames() const
VecBase< float, D > constexpr mod(VecOp< float, D >, VecOp< float, D >) RET
static const char * modifier_name[LS_MODIFIER_NUM]
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
void ED_mesh_deform_bind_callback(Object *object, MeshDeformModifierData *mmd, Mesh *cagemesh, float *vertexcos, int verts_num, float cagemat[4][4])
void ensure_non_empty_layer_names(Main &bmain, GreasePencil &grease_pencil)
int edge_other_vert(const int2 edge, const int vert)
GroupedSpan< int > build_vert_to_edge_map(Span< int2 > edges, int verts_num, Array< int > &r_offsets, Array< int > &r_indices)
void mesh_remove_invalid_attribute_strings(Mesh &mesh)
Mesh * mesh_get_eval_deform(Depsgraph *depsgraph, const Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
Mesh * mesh_create_eval_final(Depsgraph *depsgraph, const Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
void remove_index(T **items, int *items_num, int *active_index, const int index, void(*destruct_item)(T *))
void apply_eval_grease_pencil_data(const GreasePencil &eval_grease_pencil, const int eval_frame, const IndexMask &orig_layers, GreasePencil &orig_grease_pencil)
void modifier_register_use_selected_objects_prop(wmOperatorType *ot)
static void skin_armature_bone_create(Object *skin_ob, const Span< float3 > positions, const int2 *edges, bArmature *arm, BLI_bitmap *edges_visited, const GroupedSpan< int > emap, EditBone *parent_bone, int parent_v)
static wmOperatorStatus modifier_apply_exec_ex(bContext *C, wmOperator *op, int apply_as, bool keep_modifier)
ModifierData * modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob)
static wmOperatorStatus modifier_add_exec(bContext *C, wmOperator *op)
static wmOperatorStatus modifier_copy_to_selected_exec(bContext *C, wmOperator *op)
bool modifier_apply(Main *bmain, ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, ModifierData *md, int mode, bool keep_modifier, bool do_all_keyframes)
static wmOperatorStatus laplaciandeform_bind_exec(bContext *C, wmOperator *op)
static bool object_modifier_remove(Main *bmain, Scene *scene, Object *ob, ModifierData *md, bool *r_sort_depsgraph)
static int oceanbake_breakjob(void *)
static wmOperatorStatus modifier_move_to_index_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static bool modifier_apply_shape(Main *bmain, ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, ModifierData *md_eval)
static wmOperatorStatus time_modifier_segment_add_invoke(bContext *C, wmOperator *op, const wmEvent *)
void OBJECT_OT_geometry_node_tree_copy_assign(wmOperatorType *ot)
bool modifier_copy_to_object(Main *bmain, const Scene *scene, const Object *ob_src, const ModifierData *md, Object *ob_dst, ReportList *reports)
static wmOperatorStatus skin_radii_equalize_exec(bContext *C, wmOperator *)
static bool object_modifier_safe_to_delete(Main *bmain, Object *ob, ModifierData *exclude, ModifierType type)
static wmOperatorStatus meshdeform_bind_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus modifier_apply_exec(bContext *C, wmOperator *op)
static wmOperatorStatus modifier_apply_as_shapekey_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus modifier_move_up_exec(bContext *C, wmOperator *op)
static std::string modifier_apply_as_shapekey_get_description(bContext *, wmOperatorType *, PointerRNA *ptr)
static bool correctivesmooth_poll(bContext *C)
static bool object_modifier_check_move_after(ReportList *reports, eReportType error_type, ModifierData *md, ModifierData *md_next)
static const EnumPropertyItem * modifier_add_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static bool edit_modifier_poll(bContext *C)
static wmOperatorStatus modifier_set_active_exec(bContext *C, wmOperator *op)
static void oceanbake_startjob(void *customdata, wmJobWorkerStatus *worker_status)
static wmOperatorStatus dash_modifier_segment_add_exec(bContext *C, wmOperator *op)
bool edit_modifier_invoke_properties(bContext *C, wmOperator *op)
static void edit_modifier_report_property(wmOperatorType *ot)
static wmOperatorStatus modifier_remove_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void OBJECT_OT_grease_pencil_dash_modifier_segment_add(wmOperatorType *ot)
static void oceanbake_endjob(void *customdata)
bool iter_other(Main *bmain, Object *orig_ob, bool include_orig, bool(*callback)(Object *ob, void *callback_data), void *callback_data)
static bool ocean_bake_poll(bContext *C)
static wmOperatorStatus modifier_apply_as_shapekey_exec(bContext *C, wmOperator *op)
static wmOperatorStatus geometry_nodes_input_attribute_toggle_exec(bContext *C, wmOperator *op)
static wmOperatorStatus dash_modifier_segment_remove_exec(bContext *C, wmOperator *op)
bool modifier_move_up(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md)
static wmOperatorStatus modifier_copy_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void OBJECT_OT_meshdeform_bind(wmOperatorType *ot)
static wmOperatorStatus meshdeform_bind_exec(bContext *C, wmOperator *op)
static wmOperatorStatus modifier_convert_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus skin_armature_create_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus time_modifier_segment_add_exec(bContext *C, wmOperator *op)
void OBJECT_OT_modifier_move_to_index(wmOperatorType *ot)
static wmOperatorStatus modifiers_clear_exec(bContext *C, wmOperator *)
static void object_force_modifier_bind_simple_options(Depsgraph *depsgraph, Object *object, ModifierData *md)
bool multires_update_totlevels(Object *ob, void *totlevel_v)
void OBJECT_OT_explode_refresh(wmOperatorType *ot)
void OBJECT_OT_ocean_bake(wmOperatorType *ot)
void OBJECT_OT_skin_root_mark(wmOperatorType *ot)
static wmOperatorStatus skin_loose_mark_clear_exec(bContext *C, wmOperator *op)
static bool apply_grease_pencil_for_modifier(Depsgraph *depsgraph, Object *ob, GreasePencil &grease_pencil_orig, ModifierData *md_eval)
static wmOperatorStatus modifier_copy_to_selected_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus correctivesmooth_bind_invoke(bContext *C, wmOperator *op, const wmEvent *)
static bool edit_modifier_liboverride_allowed_poll(bContext *C)
static void skin_root_clear(BMVert *bm_vert, GSet *visited, const int cd_vert_skin_offset)
static wmOperatorStatus time_modifier_segment_remove_exec(bContext *C, wmOperator *op)
static bool modifier_apply_as_shapekey_poll(bContext *C)
static wmOperatorStatus time_modifier_segment_remove_invoke(bContext *C, wmOperator *op, const wmEvent *)
void OBJECT_OT_modifier_move_down(wmOperatorType *ot)
static bool surfacedeform_bind_poll(bContext *C)
void OBJECT_OT_modifier_remove(wmOperatorType *ot)
static wmOperatorStatus surfacedeform_bind_exec(bContext *C, wmOperator *op)
void OBJECT_OT_grease_pencil_dash_modifier_segment_remove(wmOperatorType *ot)
static wmOperatorStatus dash_modifier_segment_move_invoke(bContext *C, wmOperator *op, const wmEvent *)
void OBJECT_OT_modifier_apply(wmOperatorType *ot)
static void oceanbake_update(void *customdata, float progress, int *cancel)
bool edit_modifier_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag, bool is_editmode_allowed, bool is_liboverride_allowed)
static void dash_modifier_segment_free(GreasePencilDashModifierSegment *)
static Mesh * create_applied_mesh_for_modifier(Depsgraph *depsgraph, Scene *scene, Object *ob_eval, ModifierData *md_eval, const bool use_virtual_modifiers, const bool build_shapekey_layers, ReportList *reports)
void OBJECT_OT_modifier_apply_as_shapekey(wmOperatorType *ot)
static bool modifier_apply_obdata(ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, ModifierData *md_eval, const bool do_all_keyframes)
static wmOperatorStatus modifier_remove_exec(bContext *C, wmOperator *op)
ModifierData * edit_modifier_property_get(wmOperator *op, Object *ob, int type)
static bool time_modifier_segment_poll(bContext *C)
static bool skin_edit_poll(bContext *C)
void OBJECT_OT_modifier_convert(wmOperatorType *ot)
void OBJECT_OT_grease_pencil_time_modifier_segment_move(wmOperatorType *ot)
bool modifier_copy(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
static bool edit_modifier_invoke_properties_with_hover(bContext *C, wmOperator *op, const wmEvent *event, wmOperatorStatus *r_retval)
static bool meshdeform_poll(bContext *C)
static bool apply_grease_pencil_for_modifier_all_keyframes(Depsgraph *depsgraph, Scene *scene, Object *ob, GreasePencil &grease_pencil_orig, ModifierData *md)
static bool modifiers_copy_to_selected_poll(bContext *C)
Object * context_active_object(const bContext *C)
static wmOperatorStatus object_modifiers_copy_exec(bContext *C, wmOperator *op)
static bool modifiers_clear_poll(bContext *C)
bool modifier_move_down(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md)
static wmOperatorStatus time_modifier_segment_move_exec(bContext *C, wmOperator *op)
static wmOperatorStatus modifier_add_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void add_shapekey_layers(Mesh &mesh_dest, const Mesh &mesh_src)
static wmOperatorStatus modifier_apply_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static Object * modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain, Object *skin_ob)
static wmOperatorStatus explode_refresh_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus laplaciandeform_bind_invoke(bContext *C, wmOperator *op, const wmEvent *)
void OBJECT_OT_modifier_move_up(wmOperatorType *ot)
static wmOperatorStatus correctivesmooth_bind_exec(bContext *C, wmOperator *op)
void OBJECT_OT_geometry_nodes_input_attribute_toggle(wmOperatorType *ot)
void OBJECT_OT_modifiers_copy_to_selected(wmOperatorType *ot)
static wmOperatorStatus dash_modifier_segment_remove_invoke(bContext *C, wmOperator *op, const wmEvent *)
static bool laplaciandeform_poll(bContext *C)
static wmOperatorStatus skin_root_mark_exec(bContext *C, wmOperator *)
static bool object_modifier_check_move_before(ReportList *reports, eReportType error_type, ModifierData *md, ModifierData *md_prev)
static wmOperatorStatus surfacedeform_bind_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus skin_armature_create_exec(bContext *C, wmOperator *op)
static bool skin_poll(bContext *C)
static void oceanbake_free(void *customdata)
static wmOperatorStatus modifier_convert_exec(bContext *C, wmOperator *op)
void OBJECT_OT_correctivesmooth_bind(wmOperatorType *ot)
static wmOperatorStatus modifier_move_down_exec(bContext *C, wmOperator *op)
void OBJECT_OT_surfacedeform_bind(wmOperatorType *ot)
void OBJECT_OT_skin_radii_equalize(wmOperatorType *ot)
static bool modifier_apply_poll(bContext *C)
bool convert_psys_to_mesh(ReportList *reports, Main *bmain, Depsgraph *depsgraph, Scene *scene, ViewLayer *view_layer, Object *ob, ModifierData *md)
bool modifier_move_to_index(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md, int index, bool allow_partial)
void OBJECT_OT_modifier_add(wmOperatorType *ot)
static wmOperatorStatus explode_refresh_exec(bContext *C, wmOperator *op)
static wmOperatorStatus modifier_move_to_index_exec(bContext *C, wmOperator *op)
void OBJECT_OT_modifier_copy(wmOperatorType *ot)
void OBJECT_OT_laplaciandeform_bind(wmOperatorType *ot)
static wmOperatorStatus dash_modifier_segment_add_invoke(bContext *C, wmOperator *op, const wmEvent *)
static bool object_has_modifier(const Object *ob, const ModifierData *exclude, ModifierType type)
void vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode)
static wmOperatorStatus dash_modifier_segment_move_exec(bContext *C, wmOperator *op)
static wmOperatorStatus geometry_node_tree_copy_assign_exec(bContext *C, wmOperator *)
void OBJECT_OT_skin_loose_mark_clear(wmOperatorType *ot)
static bool object_has_modifier_cb(Object *ob, void *data)
static bool dash_modifier_segment_poll(bContext *C)
void OBJECT_OT_modifier_copy_to_selected(wmOperatorType *ot)
void OBJECT_OT_modifier_set_active(wmOperatorType *ot)
static void time_modifier_segment_free(GreasePencilTimeModifierSegment *)
static wmOperatorStatus ocean_bake_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus time_modifier_segment_move_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus modifier_move_up_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void OBJECT_OT_modifiers_clear(wmOperatorType *ot)
static wmOperatorStatus modifier_copy_exec(bContext *C, wmOperator *op)
static bool modifier_copy_to_selected_poll(bContext *C)
void OBJECT_OT_grease_pencil_time_modifier_segment_remove(wmOperatorType *ot)
Vector< PointerRNA > modifier_get_edit_objects(const bContext &C, const wmOperator &op)
void modifier_link(bContext *C, Object *ob_dst, Object *ob_src)
void modifiers_clear(Main *bmain, Scene *scene, Object *ob)
void OBJECT_OT_grease_pencil_time_modifier_segment_add(wmOperatorType *ot)
void OBJECT_OT_grease_pencil_dash_modifier_segment_move(wmOperatorType *ot)
static void object_force_modifier_update_for_bind(Depsgraph *depsgraph, Object *ob)
static wmOperatorStatus modifier_move_down_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void edit_modifier_properties(wmOperatorType *ot)
static void modifier_skin_customdata_delete(Object *ob)
void OBJECT_OT_skin_armature_create(wmOperatorType *ot)
static bool explode_poll(bContext *C)
static wmOperatorStatus ocean_bake_exec(bContext *C, wmOperator *op)
bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
static wmOperatorStatus modifier_set_active_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void copy_shared_pointer(T *src_ptr, const ImplicitSharingInfo *src_sharing_info, T **r_dst_ptr, const ImplicitSharingInfo **r_dst_sharing_info)
void free_shared_data(T **data, const ImplicitSharingInfo **sharing_info)
VecBase< int32_t, 2 > int2
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_int_get(PointerRNA *ptr, const char *name)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_id_pointer_create(ID *id)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
const EnumPropertyItem rna_enum_object_modifier_type_items[]
unsigned int bind_coords_num
CorrectiveSmoothDeltaCache delta_cache
const ImplicitSharingInfoHandle * bind_coords_sharing_info
GeometryComponent & get_component_for_write(GeometryComponent::Type component_type)
static GeometrySet from_grease_pencil(GreasePencil *grease_pencil, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
bool has_grease_pencil() const
GreasePencilRuntimeHandle * runtime
struct ModifierData * next
struct ModifierData * prev
void(* modify_geometry_set)(ModifierData *md, const ModifierEvalContext *ctx, blender::bke::GeometrySet *geometry_set)
void(* deform_verts)(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
bool(* is_disabled)(const Scene *scene, ModifierData *md, bool use_render_params)
Mesh *(* modify_mesh)(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
struct bNodeTree * node_group
struct NodesModifierSettings settings
struct IDProperty * properties
ObjectRuntimeHandle * runtime
struct OceanCache * oceancache
struct ParticleCacheKey ** childcache
struct ParticleCacheKey ** pathcache
GeometryComponent & get_component_for_write(GeometryComponent::Type component_type)
static GeometrySet from_curves(Curves *curves, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
bool has_pointcloud() const
static GeometrySet from_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
Curves * get_curves_for_write()
static GeometrySet from_pointcloud(PointCloud *pointcloud, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
MutableVArraySpan< T > span
wmEventModifierFlag modifier
struct ReportList * reports
void WM_cursor_wait(bool val)
void WM_main_add_notifier(uint type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))
wmOperatorStatus WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
wmOperatorStatus WM_operator_confirm_ex(bContext *C, wmOperator *op, const char *title, const char *message, const char *confirm_text, int icon, bool cancel_default)