[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