39 using used_writers = std::map<std::string, std::set<std::string>>;
41 class TestHierarchyWriter :
public AbstractHierarchyWriter {
51 void write(HierarchyContext &
context)
override
56 if (writers.find(
context.export_path) != writers.end()) {
57 ADD_FAILURE() <<
"Unexpectedly found another " <<
writer_type <<
" writer for " <<
id_name
58 <<
" to export to " <<
context.export_path;
60 writers.insert(
context.export_path);
111 BlendfileLoadingBaseTest::SetUp();
140 if (!blendfile_load(
"usd/usd_hierarchy_export_test.blend")) {
146 iterator->iterate_and_write();
149 used_writers expected_transforms = {
150 {
"OBCamera", {
"/Camera"}},
151 {
"OBDupli1", {
"/Dupli1"}},
152 {
"OBDupli2", {
"/ParentOfDupli2/Dupli2"}},
154 {
"/Dupli1/GEO_Head-0/GEO_Ear_L-1",
155 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_L",
156 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_L-1"}},
158 {
"/Dupli1/GEO_Head-0/GEO_Ear_R-2",
159 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_R",
160 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_R-2"}},
162 {
"/Dupli1/GEO_Head-0",
163 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head",
164 "/ParentOfDupli2/Dupli2/GEO_Head-0"}},
166 {
"/Dupli1/GEO_Head-0/GEO_Nose-3",
167 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Nose",
168 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Nose-3"}},
169 {
"OBGround plane", {
"/Ground plane"}},
170 {
"OBOutsideDupliGrandParent", {
"/Ground plane/OutsideDupliGrandParent"}},
171 {
"OBOutsideDupliParent", {
"/Ground plane/OutsideDupliGrandParent/OutsideDupliParent"}},
172 {
"OBParentOfDupli2", {
"/ParentOfDupli2"}}};
173 EXPECT_EQ(expected_transforms, iterator->transform_writers);
175 used_writers expected_data = {
176 {
"OBCamera", {
"/Camera/Camera"}},
178 {
"/Dupli1/GEO_Head-0/GEO_Ear_L-1/Ear",
179 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_L/Ear",
180 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_L-1/Ear"}},
182 {
"/Dupli1/GEO_Head-0/GEO_Ear_R-2/Ear",
183 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_R/Ear",
184 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_R-2/Ear"}},
186 {
"/Dupli1/GEO_Head-0/Face",
187 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/Face",
188 "/ParentOfDupli2/Dupli2/GEO_Head-0/Face"}},
190 {
"/Dupli1/GEO_Head-0/GEO_Nose-3/Nose",
191 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Nose/Nose",
192 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Nose-3/Nose"}},
193 {
"OBGround plane", {
"/Ground plane/Plane"}},
194 {
"OBParentOfDupli2", {
"/ParentOfDupli2/Icosphere"}},
197 EXPECT_EQ(expected_data, iterator->data_writers);
200 EXPECT_EQ(0, iterator->hair_writers.size());
201 EXPECT_EQ(0, iterator->particle_writers.size());
205 iterator->transform_writers.clear();
206 iterator->data_writers.clear();
207 iterator->iterate_and_write();
208 EXPECT_EQ(expected_transforms, iterator->transform_writers);
209 EXPECT_EQ(expected_data, iterator->data_writers);
218 if (!blendfile_load(
"usd/usd_hierarchy_export_test.blend")) {
225 used_writers expected_transforms = {
226 {
"OBCamera", {
"/Camera"}},
227 {
"OBDupli1", {
"/Dupli1"}},
228 {
"OBDupli2", {
"/ParentOfDupli2/Dupli2"}},
230 {
"/Dupli1/GEO_Head-0/GEO_Ear_L-1",
231 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_L",
232 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_L-1"}},
234 {
"/Dupli1/GEO_Head-0/GEO_Ear_R-2",
235 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_R",
236 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_R-2"}},
238 {
"/Dupli1/GEO_Head-0",
239 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head",
240 "/ParentOfDupli2/Dupli2/GEO_Head-0"}},
242 {
"/Dupli1/GEO_Head-0/GEO_Nose-3",
243 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Nose",
244 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Nose-3"}},
245 {
"OBGround plane", {
"/Ground plane"}},
246 {
"OBOutsideDupliGrandParent", {
"/Ground plane/OutsideDupliGrandParent"}},
247 {
"OBOutsideDupliParent", {
"/Ground plane/OutsideDupliGrandParent/OutsideDupliParent"}},
248 {
"OBParentOfDupli2", {
"/ParentOfDupli2"}}};
250 used_writers expected_data = {
251 {
"OBCamera", {
"/Camera/Camera"}},
253 {
"/Dupli1/GEO_Head-0/GEO_Ear_L-1/Ear",
254 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_L/Ear",
255 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_L-1/Ear"}},
257 {
"/Dupli1/GEO_Head-0/GEO_Ear_R-2/Ear",
258 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Ear_R/Ear",
259 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Ear_R-2/Ear"}},
261 {
"/Dupli1/GEO_Head-0/Face",
262 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/Face",
263 "/ParentOfDupli2/Dupli2/GEO_Head-0/Face"}},
265 {
"/Dupli1/GEO_Head-0/GEO_Nose-3/Nose",
266 "/Ground plane/OutsideDupliGrandParent/OutsideDupliParent/GEO_Head/GEO_Nose/Nose",
267 "/ParentOfDupli2/Dupli2/GEO_Head-0/GEO_Nose-3/Nose"}},
268 {
"OBGround plane", {
"/Ground plane/Plane"}},
269 {
"OBParentOfDupli2", {
"/ParentOfDupli2/Icosphere"}},
277 export_subset.
shapes =
false;
278 iterator->set_export_subset(export_subset);
280 iterator->iterate_and_write();
281 EXPECT_EQ(expected_transforms, iterator->transform_writers);
282 EXPECT_EQ(expected_data, iterator->data_writers);
285 iterator->transform_writers.clear();
286 iterator->data_writers.clear();
289 iterator->iterate_and_write();
290 EXPECT_EQ(expected_transforms, iterator->transform_writers);
291 EXPECT_EQ(0, iterator->data_writers.size());
294 iterator->transform_writers.clear();
295 iterator->data_writers.clear();
301 export_subset.
shapes =
true;
302 iterator->set_export_subset(export_subset);
304 iterator->iterate_and_write();
305 EXPECT_EQ(0, iterator->transform_writers.size());
306 EXPECT_EQ(expected_data, iterator->data_writers);
309 iterator->transform_writers.clear();
310 iterator->data_writers.clear();
316 export_subset.
shapes =
true;
317 iterator->set_export_subset(export_subset);
319 iterator->iterate_and_write();
320 EXPECT_EQ(expected_transforms, iterator->transform_writers);
321 EXPECT_EQ(expected_data, iterator->data_writers);
338 if (!blendfile_load(
"alembic/visibility.blend")) {
344 iterator->iterate_and_write();
347 used_writers expected_transforms = {{
"OBInvisibleAnimatedCube", {
"/InvisibleAnimatedCube"}},
348 {
"OBInvisibleCube", {
"/InvisibleCube"}},
349 {
"OBVisibleCube", {
"/VisibleCube"}}};
350 EXPECT_EQ(expected_transforms, iterator->transform_writers);
352 used_writers expected_data = {{
"OBInvisibleAnimatedCube", {
"/InvisibleAnimatedCube/Cube"}},
353 {
"OBInvisibleCube", {
"/InvisibleCube/Cube"}},
354 {
"OBVisibleCube", {
"/VisibleCube/Cube"}}};
356 EXPECT_EQ(expected_data, iterator->data_writers);
359 EXPECT_EQ(0, iterator->hair_writers.size());
360 EXPECT_EQ(0, iterator->particle_writers.size());
void BKE_scene_graph_update_tagged(struct Depsgraph *depsgraph, struct Main *bmain)
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
external readfile function prototypes.
Depsgraph * DEG_graph_new(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, eEvaluationMode mode)
struct Depsgraph Depsgraph
void DEG_graph_build_for_all_objects(struct Depsgraph *graph)
Object is a sort of wrapper for general info.
used_writers & writers_map
struct Depsgraph * depsgraph
struct BlendFileData * bfile
void depsgraph_create(eEvaluationMode depsgraph_evaluation_mode) override
TestingHierarchyIterator * iterator
AbstractHierarchyWriter * create_hair_writer(const HierarchyContext *) override
void release_writer(AbstractHierarchyWriter *writer) override
AbstractHierarchyWriter * create_particle_writer(const HierarchyContext *) override
used_writers transform_writers
~TestingHierarchyIterator() override
AbstractHierarchyWriter * create_data_writer(const HierarchyContext *) override
AbstractHierarchyWriter * create_transform_writer(const HierarchyContext *) override
used_writers particle_writers
TestingHierarchyIterator(Depsgraph *depsgraph)
used_writers hair_writers
used_writers data_writers
std::string id_name(void *id)
const Depsgraph * depsgraph
TEST_F(AbstractHierarchyIteratorTest, ExportHierarchyTest)
struct SELECTID_Context context
struct ViewLayer * cur_view_layer