Blender  V3.3
simulation.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <iostream>
8 
9 #include "MEM_guardedalloc.h"
10 
11 #include "DNA_ID.h"
12 #include "DNA_defaults.h"
13 #include "DNA_scene_types.h"
14 #include "DNA_simulation_types.h"
15 
16 #include "BLI_compiler_compat.h"
17 #include "BLI_listbase.h"
18 #include "BLI_math.h"
19 #include "BLI_math_vec_types.hh"
20 #include "BLI_rand.h"
21 #include "BLI_span.hh"
22 #include "BLI_string.h"
23 #include "BLI_utildefines.h"
24 
25 #include "BKE_anim_data.h"
26 #include "BKE_animsys.h"
27 #include "BKE_customdata.h"
28 #include "BKE_idtype.h"
29 #include "BKE_lib_id.h"
30 #include "BKE_lib_query.h"
31 #include "BKE_lib_remap.h"
32 #include "BKE_main.h"
33 #include "BKE_node.h"
34 #include "BKE_pointcache.h"
35 #include "BKE_simulation.h"
36 
37 #include "NOD_geometry.h"
38 
39 #include "BLI_map.hh"
40 #include "BLT_translation.h"
41 
42 #include "DEG_depsgraph.h"
43 #include "DEG_depsgraph_query.h"
44 
45 #include "BLO_read_write.h"
46 
47 static void simulation_init_data(ID *id)
48 {
51 
53 
54  bNodeTree *ntree = ntreeAddTree(nullptr, "Geometry Nodetree", ntreeType_Geometry->idname);
56 }
57 
58 static void simulation_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
59 {
60  Simulation *simulation_dst = (Simulation *)id_dst;
61  const Simulation *simulation_src = (const Simulation *)id_src;
62 
63  /* We always need allocation of our private ID data. */
64  const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE;
65 
66  if (simulation_src->nodetree) {
67  BKE_id_copy_ex(bmain,
68  (ID *)simulation_src->nodetree,
69  (ID **)&simulation_dst->nodetree,
70  flag_private_id_data);
71  }
72 }
73 
74 static void simulation_free_data(ID *id)
75 {
77 
79 
80  if (simulation->nodetree) {
83  simulation->nodetree = nullptr;
84  }
85 }
86 
88 {
90  if (simulation->nodetree) {
91  /* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
94  }
95 }
96 
97 static void simulation_blend_write(BlendWriter *writer, ID *id, const void *id_address)
98 {
100 
101  BLO_write_id_struct(writer, Simulation, id_address, &simulation->id);
102  BKE_id_blend_write(writer, &simulation->id);
103 
104  if (simulation->adt) {
106  }
107 
108  /* nodetree is integral part of simulation, no libdata */
109  if (simulation->nodetree) {
112  }
113 }
114 
116 {
120 }
121 
122 static void simulation_blend_read_lib(BlendLibReader *reader, ID *id)
123 {
125  UNUSED_VARS(simulation, reader);
126 }
127 
128 static void simulation_blend_read_expand(BlendExpander *expander, ID *id)
129 {
131  UNUSED_VARS(simulation, expander);
132 }
133 
135  /* id_code */ ID_SIM,
136  /* id_filter */ FILTER_ID_SIM,
137  /* main_listbase_index */ INDEX_ID_SIM,
138  /* struct_size */ sizeof(Simulation),
139  /* name */ "Simulation",
140  /* name_plural */ "simulations",
141  /* translation_context */ BLT_I18NCONTEXT_ID_SIMULATION,
143  /* asset_type_info */ nullptr,
144 
145  /* init_data */ simulation_init_data,
146  /* copy_data */ simulation_copy_data,
147  /* free_data */ simulation_free_data,
148  /* make_local */ nullptr,
149  /* foreach_id */ simulation_foreach_id,
150  /* foreach_cache */ nullptr,
151  /* foreach_path */ nullptr,
152  /* owner_get */ nullptr,
153 
154  /* blend_write */ simulation_blend_write,
155  /* blend_read_data */ simulation_blend_read_data,
156  /* blend_read_lib */ simulation_blend_read_lib,
157  /* blend_read_expand */ simulation_blend_read_expand,
158 
159  /* blend_read_undo_preserve */ nullptr,
160 
161  /* lib_override_apply_post */ nullptr,
162 };
163 
164 void *BKE_simulation_add(Main *bmain, const char *name)
165 {
166  Simulation *simulation = (Simulation *)BKE_id_new(bmain, ID_SIM, name);
167  return simulation;
168 }
169 
171  Scene *UNUSED(scene),
173 {
174 }
void BKE_animdata_free(struct ID *id, bool do_id_user)
Definition: anim_data.c:197
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
Definition: anim_data.c:1443
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
Definition: anim_data.c:1421
CustomData interface, see also DNA_customdata_types.h.
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition: BKE_idtype.h:39
@ LIB_ID_CREATE_NO_ALLOCATE
Definition: BKE_lib_id.h:130
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
Definition: lib_id.c:2008
void * BKE_id_new(struct Main *bmain, short type, const char *name)
Definition: lib_id.c:1159
#define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(_data, _func_call)
void BKE_library_foreach_ID_embedded(struct LibraryForeachIDData *data, struct ID **id_pp)
Definition: lib_query.c:147
void ntreeBlendWrite(struct BlendWriter *writer, struct bNodeTree *ntree)
Definition: node.cc:519
void ntreeFreeEmbeddedTree(struct bNodeTree *ntree)
Definition: node.cc:3112
struct bNodeTree * ntreeAddTree(struct Main *bmain, const char *name, const char *idname)
Definition: node.cc:2674
#define BLI_assert(a)
Definition: BLI_assert.h:46
Random number functions.
#define UNUSED_VARS(...)
#define UNUSED(x)
#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)
#define BLT_I18NCONTEXT_ID_SIMULATION
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:35
ID and Library types, which are fundamental for sdna.
@ INDEX_ID_SIM
Definition: DNA_ID.h:1018
#define FILTER_ID_SIM
Definition: DNA_ID.h:933
@ ID_SIM
Definition: DNA_ID_enums.h:84
#define DNA_struct_default_get(struct_name)
Definition: DNA_defaults.h:29
struct Simulation Simulation
Read Guarded memory(de)allocation.
Scene scene
Simulation simulation
const Depsgraph * depsgraph
bNodeTree * ntree
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
bNodeTreeType * ntreeType_Geometry
static void simulation_free_data(ID *id)
Definition: simulation.cc:74
IDTypeInfo IDType_ID_SIM
Definition: simulation.cc:134
static void simulation_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: simulation.cc:122
void * BKE_simulation_add(Main *bmain, const char *name)
Definition: simulation.cc:164
static void simulation_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
Definition: simulation.cc:58
static void simulation_blend_read_expand(BlendExpander *expander, ID *id)
Definition: simulation.cc:128
static void simulation_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: simulation.cc:97
static void simulation_init_data(ID *id)
Definition: simulation.cc:47
static void simulation_blend_read_data(BlendDataReader *reader, ID *id)
Definition: simulation.cc:115
static void simulation_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: simulation.cc:87
void BKE_simulation_data_update(Depsgraph *UNUSED(depsgraph), Scene *UNUSED(scene), Simulation *UNUSED(simulation))
Definition: simulation.cc:170
Definition: DNA_ID.h:368
Definition: BKE_main.h:121
struct AnimData * adt
struct bNodeTree * nodetree
char idname[64]
Definition: BKE_node.h:375