Blender  V3.3
MOD_softbody.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2005 Blender Foundation. All rights reserved. */
3 
8 #include <stdio.h>
9 
10 #include "BLI_utildefines.h"
11 
12 #include "BLT_translation.h"
13 
14 #include "DNA_mesh_types.h"
15 #include "DNA_object_force_types.h"
16 #include "DNA_scene_types.h"
17 #include "DNA_screen_types.h"
18 
19 #include "BKE_context.h"
20 #include "BKE_layer.h"
21 #include "BKE_particle.h"
22 #include "BKE_screen.h"
23 #include "BKE_softbody.h"
24 
25 #include "UI_interface.h"
26 #include "UI_resources.h"
27 
28 #include "RNA_access.h"
29 #include "RNA_prototypes.h"
30 
31 #include "DEG_depsgraph.h"
32 #include "DEG_depsgraph_build.h"
33 #include "DEG_depsgraph_physics.h"
34 #include "DEG_depsgraph_query.h"
35 
36 #include "MOD_modifiertypes.h"
37 #include "MOD_ui_common.h"
38 
39 static void deformVerts(ModifierData *UNUSED(md),
40  const ModifierEvalContext *ctx,
41  Mesh *UNUSED(derivedData),
42  float (*vertexCos)[3],
43  int verts_num)
44 {
47  ctx->depsgraph, scene, ctx->object, DEG_get_ctime(ctx->depsgraph), vertexCos, verts_num);
48 }
49 
50 static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *UNUSED(md))
51 {
52  return true;
53 }
54 
56 {
57  if (ctx->object->soft) {
58  /* Actual code uses ccd_build_deflector_hash */
60  ctx->object,
63  NULL,
64  "Softbody Collision");
66  ctx->node, ctx->object, ctx->object->soft->effector_weights, true, 0, "Softbody Field");
67  }
68  /* We need own transformation as well. */
69  DEG_add_modifier_to_transform_relation(ctx->node, "SoftBody Modifier");
70 }
71 
72 static void panel_draw(const bContext *UNUSED(C), Panel *panel)
73 {
74  uiLayout *layout = panel->layout;
75 
77 
78  uiItemL(layout, TIP_("Settings are inside the Physics tab"), ICON_NONE);
79 
80  modifier_panel_end(layout, ptr);
81 }
82 
83 static void panelRegister(ARegionType *region_type)
84 {
86 }
87 
89  /* name */ N_("Softbody"),
90  /* structName */ "SoftbodyModifierData",
91  /* structSize */ sizeof(SoftbodyModifierData),
92  /* srna */ &RNA_SoftBodyModifier,
97  /* icon */ ICON_MOD_SOFT,
98 
99  /* copyData */ NULL,
100 
101  /* deformVerts */ deformVerts,
102  /* deformMatrices */ NULL,
103  /* deformVertsEM */ NULL,
104  /* deformMatricesEM */ NULL,
105  /* modifyMesh */ NULL,
106  /* modifyGeometrySet */ NULL,
107 
108  /* initData */ NULL,
109  /* requiredDataMask */ NULL,
110  /* freeData */ NULL,
111  /* isDisabled */ NULL,
112  /* updateDepsgraph */ updateDepsgraph,
113  /* dependsOnTime */ dependsOnTime,
114  /* dependsOnNormals */ NULL,
115  /* foreachIDLink */ NULL,
116  /* foreachTexLink */ NULL,
117  /* freeRuntimeData */ NULL,
118  /* panelRegister */ panelRegister,
119  /* blendWrite */ NULL,
120  /* blendRead */ NULL,
121 };
@ eModifierTypeFlag_Single
Definition: BKE_modifier.h:93
@ eModifierTypeFlag_UsesPointCache
Definition: BKE_modifier.h:90
@ eModifierTypeFlag_AcceptsCVs
Definition: BKE_modifier.h:67
@ eModifierTypeFlag_AcceptsVertexCosOnly
Definition: BKE_modifier.h:100
@ eModifierTypeFlag_RequiresOriginalData
Definition: BKE_modifier.h:84
@ eModifierTypeType_OnlyDeform
Definition: BKE_modifier.h:44
void sbObjectStep(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, float cfra, float(*vertexCos)[3], int numVerts)
Definition: softbody.c:3492
#define UNUSED(x)
#define TIP_(msgid)
void DEG_add_modifier_to_transform_relation(struct DepsNodeHandle *node_handle, const char *description)
void DEG_add_collision_relations(struct DepsNodeHandle *handle, struct Object *object, struct Collection *collection, unsigned int modifier_type, DEG_CollobjFilterFunction filter_function, const char *name)
void DEG_add_forcefield_relations(struct DepsNodeHandle *handle, struct Object *object, struct EffectorWeights *eff, bool add_absorption, int skip_forcefield, const char *name)
float DEG_get_ctime(const Depsgraph *graph)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
struct SoftbodyModifierData SoftbodyModifierData
@ eModifierType_Collision
@ eModifierType_Softbody
static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *UNUSED(md))
Definition: MOD_softbody.c:50
static void updateDepsgraph(ModifierData *UNUSED(md), const ModifierUpdateDepsgraphContext *ctx)
Definition: MOD_softbody.c:55
static void deformVerts(ModifierData *UNUSED(md), const ModifierEvalContext *ctx, Mesh *UNUSED(derivedData), float(*vertexCos)[3], int verts_num)
Definition: MOD_softbody.c:39
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
Definition: MOD_softbody.c:72
static void panelRegister(ARegionType *region_type)
Definition: MOD_softbody.c:83
ModifierTypeInfo modifierType_Softbody
Definition: MOD_softbody.c:88
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
Definition: MOD_ui_common.c:91
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
#define C
Definition: RandGen.cpp:25
void uiItemL(uiLayout *layout, const char *name, int icon)
Scene scene
struct Depsgraph * depsgraph
Definition: BKE_modifier.h:140
struct Object * object
Definition: BKE_modifier.h:141
struct DepsNodeHandle * node
Definition: BKE_modifier.h:134
struct SoftBody * soft
struct uiLayout * layout
struct Collection * collision_group
struct EffectorWeights * effector_weights
#define N_(msgid)
PointerRNA * ptr
Definition: wm_files.c:3480