Blender  V2.93
simulation.cc
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
21 #include <iostream>
22 
23 #include "MEM_guardedalloc.h"
24 
25 #include "DNA_ID.h"
26 #include "DNA_defaults.h"
27 #include "DNA_scene_types.h"
28 #include "DNA_simulation_types.h"
29 
30 #include "BLI_compiler_compat.h"
31 #include "BLI_float3.hh"
32 #include "BLI_listbase.h"
33 #include "BLI_math.h"
34 #include "BLI_rand.h"
35 #include "BLI_span.hh"
36 #include "BLI_string.h"
37 #include "BLI_utildefines.h"
38 
39 #include "BKE_anim_data.h"
40 #include "BKE_animsys.h"
41 #include "BKE_customdata.h"
42 #include "BKE_idtype.h"
43 #include "BKE_lib_id.h"
44 #include "BKE_lib_query.h"
45 #include "BKE_lib_remap.h"
46 #include "BKE_main.h"
47 #include "BKE_node.h"
48 #include "BKE_pointcache.h"
49 #include "BKE_simulation.h"
50 
51 #include "NOD_geometry.h"
53 
54 #include "BLI_map.hh"
55 #include "BLT_translation.h"
56 
59 
60 #include "DEG_depsgraph.h"
61 #include "DEG_depsgraph_query.h"
62 
63 #include "BLO_read_write.h"
64 
65 static void simulation_init_data(ID *id)
66 {
69 
71 
72  bNodeTree *ntree = ntreeAddTree(nullptr, "Geometry Nodetree", ntreeType_Geometry->idname);
74 }
75 
76 static void simulation_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
77 {
78  Simulation *simulation_dst = (Simulation *)id_dst;
79  const Simulation *simulation_src = (const Simulation *)id_src;
80 
81  /* We always need allocation of our private ID data. */
82  const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE;
83 
84  if (simulation_src->nodetree) {
85  BKE_id_copy_ex(bmain,
86  (ID *)simulation_src->nodetree,
87  (ID **)&simulation_dst->nodetree,
88  flag_private_id_data);
89  }
90 }
91 
92 static void simulation_free_data(ID *id)
93 {
95 
97 
98  if (simulation->nodetree) {
101  simulation->nodetree = nullptr;
102  }
103 }
104 
106 {
108  if (simulation->nodetree) {
109  /* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
111  }
112 }
113 
114 static void simulation_blend_write(BlendWriter *writer, ID *id, const void *id_address)
115 {
117  if (simulation->id.us > 0 || BLO_write_is_undo(writer)) {
118  BLO_write_id_struct(writer, Simulation, id_address, &simulation->id);
119  BKE_id_blend_write(writer, &simulation->id);
120 
121  if (simulation->adt) {
123  }
124 
125  /* nodetree is integral part of simulation, no libdata */
126  if (simulation->nodetree) {
129  }
130  }
131 }
132 
134 {
138 }
139 
140 static void simulation_blend_read_lib(BlendLibReader *reader, ID *id)
141 {
143  UNUSED_VARS(simulation, reader);
144 }
145 
146 static void simulation_blend_read_expand(BlendExpander *expander, ID *id)
147 {
149  UNUSED_VARS(simulation, expander);
150 }
151 
153  /* id_code */ ID_SIM,
154  /* id_filter */ FILTER_ID_SIM,
155  /* main_listbase_index */ INDEX_ID_SIM,
156  /* struct_size */ sizeof(Simulation),
157  /* name */ "Simulation",
158  /* name_plural */ "simulations",
159  /* translation_context */ BLT_I18NCONTEXT_ID_SIMULATION,
160  /* flags */ 0,
161 
162  /* init_data */ simulation_init_data,
163  /* copy_data */ simulation_copy_data,
164  /* free_data */ simulation_free_data,
165  /* make_local */ nullptr,
166  /* foreach_id */ simulation_foreach_id,
167  /* foreach_cache */ nullptr,
168  /* owner_get */ nullptr,
169 
170  /* blend_write */ simulation_blend_write,
171  /* blend_read_data */ simulation_blend_read_data,
172  /* blend_read_lib */ simulation_blend_read_lib,
173  /* blend_read_expand */ simulation_blend_read_expand,
174 
175  /* blend_read_undo_preserve */ nullptr,
176 
177  /* lib_override_apply_post */ nullptr,
178 };
179 
180 void *BKE_simulation_add(Main *bmain, const char *name)
181 {
182  Simulation *simulation = (Simulation *)BKE_id_new(bmain, ID_SIM, name);
183  return simulation;
184 }
185 
187  Scene *UNUSED(scene),
189 {
190 }
void BKE_animdata_free(struct ID *id, const bool do_id_user)
Definition: anim_data.c:230
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
Definition: anim_data.c:1574
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
Definition: anim_data.c:1552
CustomData interface, see also DNA_customdata_types.h.
@ LIB_ID_CREATE_NO_ALLOCATE
Definition: BKE_lib_id.h:96
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
Definition: lib_id.c:2395
void * BKE_id_new(struct Main *bmain, const short type, const char *name)
Definition: lib_id.c:1177
bool BKE_library_foreach_ID_embedded(struct LibraryForeachIDData *data, struct ID **id_pp)
Definition: lib_query.c:161
void ntreeBlendWrite(struct BlendWriter *writer, struct bNodeTree *ntree)
Definition: node.cc:472
void ntreeFreeEmbeddedTree(struct bNodeTree *ntree)
Definition: node.cc:3021
struct bNodeTree * ntreeAddTree(struct Main *bmain, const char *name, const char *idname)
Definition: node.cc:2529
#define BLI_assert(a)
Definition: BLI_assert.h:58
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)
bool BLO_write_is_undo(BlendWriter *writer)
Definition: writefile.c:1412
#define BLT_I18NCONTEXT_ID_SIMULATION
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:51
ID and Library types, which are fundamental for sdna.
#define FILTER_ID_SIM
Definition: DNA_ID.h:739
@ INDEX_ID_SIM
Definition: DNA_ID.h:819
@ ID_SIM
Definition: DNA_ID_enums.h:96
#define DNA_struct_default_get(struct_name)
Definition: DNA_defaults.h:44
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:41
bNodeTreeType * ntreeType_Geometry
static void simulation_free_data(ID *id)
Definition: simulation.cc:92
IDTypeInfo IDType_ID_SIM
Definition: simulation.cc:152
static void simulation_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: simulation.cc:140
void * BKE_simulation_add(Main *bmain, const char *name)
Definition: simulation.cc:180
static void simulation_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
Definition: simulation.cc:76
static void simulation_blend_read_expand(BlendExpander *expander, ID *id)
Definition: simulation.cc:146
static void simulation_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: simulation.cc:114
static void simulation_init_data(ID *id)
Definition: simulation.cc:65
static void simulation_blend_read_data(BlendDataReader *reader, ID *id)
Definition: simulation.cc:133
static void simulation_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: simulation.cc:105
void BKE_simulation_data_update(Depsgraph *UNUSED(depsgraph), Scene *UNUSED(scene), Simulation *UNUSED(simulation))
Definition: simulation.cc:186
Definition: DNA_ID.h:273
int us
Definition: DNA_ID.h:293
Definition: BKE_main.h:116
struct AnimData * adt
struct bNodeTree * nodetree
char idname[64]
Definition: BKE_node.h:381