Blender V5.0
MOD_softbody.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2005 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BLT_translation.hh"
10
12#include "DNA_screen_types.h"
13
14#include "BKE_softbody.h"
15
17#include "UI_resources.hh"
18
19#include "RNA_prototypes.hh"
20
21#include "DEG_depsgraph.hh"
25
26#include "MOD_modifiertypes.hh"
27#include "MOD_ui_common.hh"
28
29static void deform_verts(ModifierData * /*md*/,
30 const ModifierEvalContext *ctx,
31 Mesh * /*mesh*/,
33{
36 scene,
37 ctx->object,
39 reinterpret_cast<float (*)[3]>(positions.data()),
40 positions.size());
41}
42
43static bool depends_on_time(Scene * /*scene*/, ModifierData * /*md*/)
44{
45 return true;
46}
47
49{
50 if (ctx->object->soft) {
51 /* Actual code uses ccd_build_deflector_hash */
53 ctx->object,
56 nullptr,
57 "Softbody Collision");
59 ctx->node, ctx->object, ctx->object->soft->effector_weights, true, 0, "Softbody Field");
60 }
61 /* We need our own transformation as well. */
62 DEG_add_depends_on_transform_relation(ctx->node, "SoftBody Modifier");
63}
64
65static void panel_draw(const bContext * /*C*/, Panel *panel)
66{
67 uiLayout *layout = panel->layout;
68
70
71 layout->label(RPT_("Settings are inside the Physics tab"), ICON_NONE);
72
74}
75
76static void panel_register(ARegionType *region_type)
77{
79}
80
82 /*idname*/ "Softbody",
83 /*name*/ N_("Softbody"),
84 /*struct_name*/ "SoftbodyModifierData",
85 /*struct_size*/ sizeof(SoftbodyModifierData),
86 /*srna*/ &RNA_SoftBodyModifier,
91 /*icon*/ ICON_MOD_SOFT,
92
93 /*copy_data*/ nullptr,
94
95 /*deform_verts*/ deform_verts,
96 /*deform_matrices*/ nullptr,
97 /*deform_verts_EM*/ nullptr,
98 /*deform_matrices_EM*/ nullptr,
99 /*modify_mesh*/ nullptr,
100 /*modify_geometry_set*/ nullptr,
101
102 /*init_data*/ nullptr,
103 /*required_data_mask*/ nullptr,
104 /*free_data*/ nullptr,
105 /*is_disabled*/ nullptr,
106 /*update_depsgraph*/ update_depsgraph,
107 /*depends_on_time*/ depends_on_time,
108 /*depends_on_normals*/ nullptr,
109 /*foreach_ID_link*/ nullptr,
110 /*foreach_tex_link*/ nullptr,
111 /*free_runtime_data*/ nullptr,
112 /*panel_register*/ panel_register,
113 /*blend_write*/ nullptr,
114 /*blend_read*/ nullptr,
115 /*foreach_cache*/ nullptr,
116 /*foreach_working_space_color*/ nullptr,
117};
@ eModifierTypeFlag_Single
@ eModifierTypeFlag_UsesPointCache
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_AcceptsVertexCosOnly
@ eModifierTypeFlag_RequiresOriginalData
void sbObjectStep(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, float cfra, float(*vertexCos)[3], int numVerts)
Definition softbody.cc:3504
#define RPT_(msgid)
void DEG_add_depends_on_transform_relation(DepsNodeHandle *node_handle, const char *description)
void DEG_add_collision_relations(DepsNodeHandle *handle, Object *object, Collection *collection, unsigned int modifier_type, DEG_CollobjFilterFunction filter_function, const char *name)
void DEG_add_forcefield_relations(DepsNodeHandle *handle, Object *object, EffectorWeights *eff, bool add_absorption, int skip_forcefield, const char *name)
float DEG_get_ctime(const Depsgraph *graph)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
@ eModifierType_Collision
@ eModifierType_Softbody
static void deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void panel_register(ARegionType *region_type)
static void panel_draw(const bContext *, Panel *panel)
static bool depends_on_time(Scene *, ModifierData *)
Definition MOD_build.cc:47
static void panel_register(ARegionType *region_type)
static void update_depsgraph(ModifierData *, const ModifierUpdateDepsgraphContext *ctx)
static void deform_verts(ModifierData *, const ModifierEvalContext *ctx, Mesh *, blender::MutableSpan< blender::float3 > positions)
static void panel_draw(const bContext *, Panel *panel)
static bool depends_on_time(Scene *, ModifierData *)
ModifierTypeInfo modifierType_Softbody
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_error_message_draw(uiLayout *layout, PointerRNA *ptr)
constexpr int64_t size() const
Definition BLI_span.hh:493
constexpr T * data() const
Definition BLI_span.hh:539
static void update_depsgraph(tGraphSliderOp *gso)
struct SoftBody * soft
struct uiLayout * layout
struct Collection * collision_group
struct EffectorWeights * effector_weights
void label(blender::StringRef name, int icon)
#define N_(msgid)
PointerRNA * ptr
Definition wm_files.cc:4238