[Bf-blender-cvs] [deee74279c2] sybren-usd: USD: Pass 'selected/visible only' flags to the exporter
Sybren A. Stüvel
noreply at git.blender.org
Fri Jun 21 16:40:18 CEST 2019
Commit: deee74279c29918fab1a2cc234979b2598db7139
Author: Sybren A. Stüvel
Date: Fri Jun 21 14:18:54 2019 +0200
Branches: sybren-usd
https://developer.blender.org/rBdeee74279c29918fab1a2cc234979b2598db7139
USD: Pass 'selected/visible only' flags to the exporter
This isn't handled properly by the exporter yet.
===================================================================
M source/blender/editors/io/io_usd.c
M source/blender/usd/intern/usd_capi.cc
M source/blender/usd/intern/usd_hierarchy_iterator.cc
M source/blender/usd/intern/usd_hierarchy_iterator.h
M source/blender/usd/usd.h
===================================================================
diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c
index 21055ef0309..8764e8fef1e 100644
--- a/source/blender/editors/io/io_usd.c
+++ b/source/blender/editors/io/io_usd.c
@@ -42,8 +42,8 @@
static int wm_usd_export_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
- if (!RNA_struct_property_is_set(op->ptr, "_as_background_job")) {
- RNA_boolean_set(op->ptr, "_as_background_job", true);
+ if (!RNA_struct_property_is_set(op->ptr, "as_background_job")) {
+ RNA_boolean_set(op->ptr, "as_background_job", true);
}
if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
@@ -78,12 +78,18 @@ static int wm_usd_export_exec(bContext *C, wmOperator *op)
char filename[FILE_MAX];
RNA_string_get(op->ptr, "filepath", filename);
- struct USDExportParams params = {};
-
/* Take some defaults from the scene, if not specified explicitly. */
Scene *scene = CTX_data_scene(C);
- const bool as_background_job = RNA_boolean_get(op->ptr, "_as_background_job");
+ const bool as_background_job = RNA_boolean_get(op->ptr, "as_background_job");
+ const bool selected_objects_only = RNA_boolean_get(op->ptr, "selected_objects_only");
+ const bool visible_objects_only = RNA_boolean_get(op->ptr, "visible_objects_only");
+
+ struct USDExportParams params = {
+ .selected_objects_only = selected_objects_only,
+ .visible_objects_only = visible_objects_only,
+ };
+
bool ok = USD_export(scene, C, filename, ¶ms, as_background_job);
return as_background_job || ok ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
@@ -102,9 +108,23 @@ void WM_OT_usd_export(struct wmOperatorType *ot)
WM_operator_properties_filesel(
ot, 0, FILE_BLENDER, FILE_SAVE, WM_FILESEL_FILEPATH, FILE_DEFAULTDISPLAY, FILE_SORT_ALPHA);
+ RNA_def_boolean(ot->srna,
+ "selected_objects_only",
+ false,
+ "Only export selected objects",
+ "Only selected objects are exported. Unselected parents of selected objects are "
+ "exported as empty transform.");
+
+ RNA_def_boolean(ot->srna,
+ "visible_objects_only",
+ false,
+ "Only export visible objects",
+ "Only visible objects are exported. Invisible parents of visible objects are "
+ "exported as empty transform.");
+
RNA_def_boolean(
ot->srna,
- "_as_background_job",
+ "as_background_job",
false,
"Run as Background Job",
"Enable this to run the import in the background, disable to block Blender while importing. "
diff --git a/source/blender/usd/intern/usd_capi.cc b/source/blender/usd/intern/usd_capi.cc
index 5249248557f..906b0de8523 100644
--- a/source/blender/usd/intern/usd_capi.cc
+++ b/source/blender/usd/intern/usd_capi.cc
@@ -102,7 +102,7 @@ static void export_startjob(void *customdata, short *stop, short *do_update, flo
pxr::UsdStageRefPtr usd_stage = pxr::UsdStage::CreateNew(data->filename);
usd_stage->SetMetadata(pxr::UsdGeomTokens->upAxis, pxr::VtValue(pxr::UsdGeomTokens->z));
- USDHierarchyIterator iter(data->depsgraph, usd_stage);
+ USDHierarchyIterator iter(data->depsgraph, usd_stage, data->params);
// This should be done for every frame, when exporting animation:
iter.iterate();
diff --git a/source/blender/usd/intern/usd_hierarchy_iterator.cc b/source/blender/usd/intern/usd_hierarchy_iterator.cc
index 4d720db9f29..805265bb269 100644
--- a/source/blender/usd/intern/usd_hierarchy_iterator.cc
+++ b/source/blender/usd/intern/usd_hierarchy_iterator.cc
@@ -1,3 +1,4 @@
+#include "../usd.h"
#include "usd_hierarchy_iterator.h"
#include "usd_writer_abstract.h"
#include "usd_writer_mesh.h"
@@ -19,11 +20,25 @@ extern "C" {
#include "DNA_object_types.h"
}
-USDHierarchyIterator::USDHierarchyIterator(Depsgraph *depsgraph, pxr::UsdStageRefPtr stage)
- : AbstractHierarchyIterator(depsgraph), stage(stage)
+USDHierarchyIterator::USDHierarchyIterator(Depsgraph *depsgraph,
+ pxr::UsdStageRefPtr stage,
+ const USDExportParams ¶ms)
+ : AbstractHierarchyIterator(depsgraph), stage(stage), params(params)
{
}
+bool USDHierarchyIterator::should_visit_object(const Object *object) const
+{
+ if (params.selected_objects_only && (object->base_flag & BASE_SELECTED) == 0) {
+ return false;
+ }
+ if (params.visible_objects_only && (object->base_flag & BASE_VISIBLE) == 0) {
+ return false;
+ }
+
+ return AbstractHierarchyIterator::should_visit_object(object);
+}
+
void USDHierarchyIterator::delete_object_writer(AbstractHierarchyWriter *writer)
{
delete static_cast<USDAbstractWriter *>(writer);
diff --git a/source/blender/usd/intern/usd_hierarchy_iterator.h b/source/blender/usd/intern/usd_hierarchy_iterator.h
index d81ec6d08e6..7be659c6081 100644
--- a/source/blender/usd/intern/usd_hierarchy_iterator.h
+++ b/source/blender/usd/intern/usd_hierarchy_iterator.h
@@ -16,11 +16,16 @@ struct USDAbstractWriter;
class USDHierarchyIterator : public AbstractHierarchyIterator {
private:
pxr::UsdStageRefPtr stage;
+ const USDExportParams ¶ms;
public:
- USDHierarchyIterator(Depsgraph *depsgraph, pxr::UsdStageRefPtr stage);
+ USDHierarchyIterator(Depsgraph *depsgraph,
+ pxr::UsdStageRefPtr stage,
+ const USDExportParams ¶ms);
protected:
+ virtual bool should_visit_object(const Object *object) const override;
+
virtual AbstractHierarchyWriter *create_xform_writer(const HierarchyContext &context) override;
virtual AbstractHierarchyWriter *create_data_writer(const HierarchyContext &context) override;
diff --git a/source/blender/usd/usd.h b/source/blender/usd/usd.h
index 46703703940..d5490695b70 100644
--- a/source/blender/usd/usd.h
+++ b/source/blender/usd/usd.h
@@ -29,8 +29,8 @@ struct Scene;
struct bContext;
struct USDExportParams {
- bool selected_only;
- bool visible_layers_only;
+ bool selected_objects_only;
+ bool visible_objects_only;
};
/* The USD_export takes a as_background_job parameter, and returns a boolean.
More information about the Bf-blender-cvs
mailing list