This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/io/usd/intern/usd_hierarchy_iterator.cc
Sybren A. Stüvel eb522af4fe Cleanup: move Alembic, AVI, Collada, and USD to source/blender/io
This moves the `alembic`, `avi`, `collada`, and `usd` modules into a common
`io` directory.

This also cleans up some `#include "../../{somedir}/{somefile}.h"` by
adding `../../io/{somedir}` to `CMakeLists.txt` and then just using
`#include "{somefile}.h"`.

No functional changes.
2020-03-06 16:19:45 +01:00

151 lines
4.1 KiB
C++

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2019 Blender Foundation.
* All rights reserved.
*/
#include "usd.h"
#include "usd_hierarchy_iterator.h"
#include "usd_writer_abstract.h"
#include "usd_writer_camera.h"
#include "usd_writer_hair.h"
#include "usd_writer_light.h"
#include "usd_writer_mesh.h"
#include "usd_writer_metaball.h"
#include "usd_writer_transform.h"
#include <string>
#include <pxr/base/tf/stringUtils.h>
extern "C" {
#include "BKE_anim.h"
#include "BLI_assert.h"
#include "DEG_depsgraph_query.h"
#include "DNA_ID.h"
#include "DNA_layer_types.h"
#include "DNA_object_types.h"
}
namespace USD {
USDHierarchyIterator::USDHierarchyIterator(Depsgraph *depsgraph,
pxr::UsdStageRefPtr stage,
const USDExportParams &params)
: AbstractHierarchyIterator(depsgraph), stage_(stage), params_(params)
{
}
bool USDHierarchyIterator::mark_as_weak_export(const Object *object) const
{
if (params_.selected_objects_only && (object->base_flag & BASE_SELECTED) == 0) {
return true;
}
return false;
}
void USDHierarchyIterator::delete_object_writer(AbstractHierarchyWriter *writer)
{
delete static_cast<USDAbstractWriter *>(writer);
}
std::string USDHierarchyIterator::make_valid_name(const std::string &name) const
{
return pxr::TfMakeValidIdentifier(name);
}
void USDHierarchyIterator::set_export_frame(float frame_nr)
{
// The USD stage is already set up to have FPS timecodes per frame.
export_time_ = pxr::UsdTimeCode(frame_nr);
}
const pxr::UsdTimeCode &USDHierarchyIterator::get_export_time_code() const
{
return export_time_;
}
USDExporterContext USDHierarchyIterator::create_usd_export_context(const HierarchyContext *context)
{
return USDExporterContext{depsgraph_, stage_, pxr::SdfPath(context->export_path), this, params_};
}
AbstractHierarchyWriter *USDHierarchyIterator::create_transform_writer(
const HierarchyContext *context)
{
return new USDTransformWriter(create_usd_export_context(context));
}
AbstractHierarchyWriter *USDHierarchyIterator::create_data_writer(const HierarchyContext *context)
{
USDExporterContext usd_export_context = create_usd_export_context(context);
USDAbstractWriter *data_writer = nullptr;
switch (context->object->type) {
case OB_MESH:
data_writer = new USDMeshWriter(usd_export_context);
break;
case OB_CAMERA:
data_writer = new USDCameraWriter(usd_export_context);
break;
case OB_LAMP:
data_writer = new USDLightWriter(usd_export_context);
break;
case OB_MBALL:
data_writer = new USDMetaballWriter(usd_export_context);
break;
case OB_EMPTY:
case OB_CURVE:
case OB_SURF:
case OB_FONT:
case OB_SPEAKER:
case OB_LIGHTPROBE:
case OB_LATTICE:
case OB_ARMATURE:
case OB_GPENCIL:
return nullptr;
case OB_TYPE_MAX:
BLI_assert(!"OB_TYPE_MAX should not be used");
return nullptr;
}
if (!data_writer->is_supported(context)) {
delete data_writer;
return nullptr;
}
return data_writer;
}
AbstractHierarchyWriter *USDHierarchyIterator::create_hair_writer(const HierarchyContext *context)
{
if (!params_.export_hair) {
return nullptr;
}
return new USDHairWriter(create_usd_export_context(context));
}
AbstractHierarchyWriter *USDHierarchyIterator::create_particle_writer(const HierarchyContext *)
{
return nullptr;
}
} // namespace USD