blob: 0f46452895e319574ee298754f79fcf9cdb456df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
/*
* 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) 2020 Blender Foundation.
* All rights reserved.
*/
#pragma once
#include "usd.h"
#include "usd_importer_context.h"
#include <pxr/usd/usd/prim.h>
namespace blender::io::usd {
/* Abstract base class of all USD readers. It wraps a single UsdPrim. */
class USDPrimReader {
protected:
pxr::UsdPrim prim_;
/* The USD prim path, cached to help debug if
* prim becomes invalid. */
std::string prim_path_;
USDImporterContext context_;
/* Not setting min/max time yet. */
double min_time_;
double max_time_;
public:
explicit USDPrimReader(const pxr::UsdPrim &prim, const USDImporterContext &context);
virtual ~USDPrimReader();
// Disallow assignment and copying.
USDPrimReader(const USDPrimReader &) = delete;
USDPrimReader &operator=(const USDPrimReader &) = delete;
const pxr::UsdPrim &prim() const;
const std::string &prim_path() const
{
return prim_path_;
}
std::string prim_name() const
{
return prim_ ? prim_.GetName().GetString() : std::string();
}
std::string parent_prim_name() const
{
if (!prim_) {
return std::string();
}
pxr::UsdPrim parent = prim_.GetParent();
return parent ? parent.GetName().GetString() : std::string();
}
virtual bool valid() const = 0;
double min_time() const;
double max_time() const;
};
} /* namespace blender::io::usd */
|