[Bf-blender-cvs] [524fb9b7696] sybren-usd: USD: abstracted the `ensure_xxx_writer` functions
Sybren A. Stüvel
noreply at git.blender.org
Fri Jun 28 18:57:27 CEST 2019
Commit: 524fb9b76965457e166d099db5f4d884f3516ec1
Author: Sybren A. Stüvel
Date: Fri Jun 28 14:02:18 2019 +0200
Branches: sybren-usd
https://developer.blender.org/rB524fb9b76965457e166d099db5f4d884f3516ec1
USD: abstracted the `ensure_xxx_writer` functions
The `ensure_xform_writer` and `ensure_data_writer` were very similar, and
in preparation of also creating hair and particle system writers I turned
them into one higher-order function that can be used for all those
purposes.
No functional changes.
===================================================================
M source/blender/usd/intern/abstract_hierarchy_iterator.cc
M source/blender/usd/intern/abstract_hierarchy_iterator.h
===================================================================
diff --git a/source/blender/usd/intern/abstract_hierarchy_iterator.cc b/source/blender/usd/intern/abstract_hierarchy_iterator.cc
index 65647e93abe..0cbd3dfebcd 100644
--- a/source/blender/usd/intern/abstract_hierarchy_iterator.cc
+++ b/source/blender/usd/intern/abstract_hierarchy_iterator.cc
@@ -305,7 +305,7 @@ void AbstractHierarchyIterator::make_writers(const HierarchyContext &parent_cont
// context.duplicator ? context.duplicator->id.name + 2 : "");
// Get or create the transform writer.
- xform_writer = ensure_xform_writer(context);
+ xform_writer = ensure_writer(context, &AbstractHierarchyIterator::create_xform_writer);
if (xform_writer == nullptr) {
// Unable to export, so there is nothing to attach any children to; just abort this entire
// branch of the export hierarchy.
@@ -324,7 +324,7 @@ void AbstractHierarchyIterator::make_writers(const HierarchyContext &parent_cont
data_context.export_path = data_path;
data_context.parent_writer = xform_writer;
- data_writer = ensure_data_writer(data_context);
+ data_writer = ensure_writer(data_context, &AbstractHierarchyIterator::create_data_writer);
if (data_writer != nullptr) {
data_writer->write(data_context);
}
@@ -380,32 +380,17 @@ AbstractHierarchyWriter *AbstractHierarchyIterator::get_writer(const std::string
return it->second;
}
-AbstractHierarchyWriter *AbstractHierarchyIterator::ensure_xform_writer(
- const HierarchyContext &context)
+AbstractHierarchyWriter *AbstractHierarchyIterator::ensure_writer(
+ const HierarchyContext &context, AbstractHierarchyIterator::create_writer_func create_func)
{
- AbstractHierarchyWriter *xform_writer = get_writer(context.export_path);
- if (xform_writer != nullptr) {
- return xform_writer;
+ AbstractHierarchyWriter *writer = get_writer(context.export_path);
+ if (writer != nullptr) {
+ return writer;
}
- xform_writer = create_xform_writer(context);
- if (xform_writer != nullptr) {
- writers[context.export_path] = xform_writer;
+ writer = (this->*create_func)(context);
+ if (writer != nullptr) {
+ writers[context.export_path] = writer;
}
- return xform_writer;
-}
-
-AbstractHierarchyWriter *AbstractHierarchyIterator::ensure_data_writer(
- const HierarchyContext &context)
-{
- AbstractHierarchyWriter *data_writer = get_writer(context.export_path);
- if (data_writer != nullptr) {
- return data_writer;
- }
-
- data_writer = create_data_writer(context);
- if (data_writer != nullptr) {
- writers[context.export_path] = data_writer;
- }
- return data_writer;
+ return writer;
}
diff --git a/source/blender/usd/intern/abstract_hierarchy_iterator.h b/source/blender/usd/intern/abstract_hierarchy_iterator.h
index fa5661adb3d..bbbe9e01c7c 100644
--- a/source/blender/usd/intern/abstract_hierarchy_iterator.h
+++ b/source/blender/usd/intern/abstract_hierarchy_iterator.h
@@ -86,8 +86,11 @@ class AbstractHierarchyIterator {
std::string get_object_name(const Object *object) const;
AbstractHierarchyWriter *get_writer(const std::string &name);
- AbstractHierarchyWriter *ensure_xform_writer(const HierarchyContext &context);
- AbstractHierarchyWriter *ensure_data_writer(const HierarchyContext &context);
+
+ typedef AbstractHierarchyWriter *(AbstractHierarchyIterator::*create_writer_func)(
+ const HierarchyContext &);
+ AbstractHierarchyWriter *ensure_writer(const HierarchyContext &context,
+ create_writer_func create_func);
protected:
virtual bool should_visit_duplilink(const DupliObject *link) const;
More information about the Bf-blender-cvs
mailing list