20OgIGroup::OgIGroup(Alembic::Ogawa::IArchive &archive)
21 : OgIBase(archive.getGroup())
31OgGroupType OgIGroup::type()
const
38std::vector<std::string> OgIGroup::groupNames()
const
40 return groupNames(F3DGroupType);
45std::vector<std::string> OgIGroup::attributeNames()
const
47 return groupNames(F3DAttributeType);
52std::vector<std::string> OgIGroup::datasetNames()
const
54 return groupNames(F3DDatasetType);
59std::vector<std::string> OgIGroup::compressedDatasetNames()
const
61 return groupNames(F3DCompressedDatasetType);
66OgIGroup OgIGroup::findGroup(
const std::string &name)
const
68 Alembic::Ogawa::IGroupPtr group = findGroup(name, F3DGroupType);
71 return OgIGroup(group);
79Alembic::Ogawa::IGroupPtr
80OgIGroup::findGroup(
const std::string &path,
81 const OgGroupType groupType)
const
85 return Alembic::Ogawa::IGroupPtr();
88 if (path.find(
"/") != std::string::npos) {
89 return recursiveFindGroup(path, groupType);
92 const std::string &name = path;
95 for (
size_t i = OGAWA_START_ID, end = m_group->getNumChildren();
98 if (!m_group->isChildGroup(i)) {
102 Alembic::Ogawa::IGroupPtr group =
103 m_group->getGroup(i,
false, OGAWA_THREAD);
105 std::string groupName;
108 std::cout <<
"OgIGroup::findGroup() couldn't read subgroup name for "
109 <<
"group name: " << name << std::endl;
110 return Alembic::Ogawa::IGroupPtr();
114 if (!readData(group, 1, type)) {
116 std::cout <<
"OgIGroup::findGroup() couldn't read subgroup type for "
117 <<
"group name: " << name << std::endl;
118 return Alembic::Ogawa::IGroupPtr();
121 if (type != groupType) {
126 if (groupName == name) {
131 return Alembic::Ogawa::IGroupPtr();
136Alembic::Ogawa::IGroupPtr
137OgIGroup::recursiveFindGroup(
const std::string &path,
138 const OgGroupType groupType)
const
142 return Alembic::Ogawa::IGroupPtr();
145 const size_t pos = path.find(
"/");
146 const std::string name = path.substr(0, pos);
147 const std::string restOfPath = path.substr(pos + 1);
150 for (
size_t i = OGAWA_START_ID, end = m_group->getNumChildren();
153 if (!m_group->isChildGroup(i)) {
157 Alembic::Ogawa::IGroupPtr group =
158 m_group->getGroup(i,
false, OGAWA_THREAD);
160 std::string groupName;
163 std::cout <<
"OgIGroup::recursiveFindGroup() couldn't read subgroup "
164 <<
"name for group name: " << name << std::endl;
165 return Alembic::Ogawa::IGroupPtr();
169 if (!readData(group, 1, type)) {
171 std::cout <<
"OgIGroup::recursiveFindGroup() couldn't read subgroup "
172 <<
"type for group name: " << name << std::endl;
173 return Alembic::Ogawa::IGroupPtr();
176 if (type != F3DGroupType) {
181 if (groupName == name) {
182 OgIGroup subGroup(group);
183 return subGroup.findGroup(restOfPath, groupType);
187 cout <<
"Couldn't find group: " << name << endl;
188 return Alembic::Ogawa::IGroupPtr();
193std::vector<std::string>
194OgIGroup::groupNames(
const OgGroupType groupType)
const
198 return std::vector<std::string>();
201 std::vector<std::string> groups;
202 for (
size_t i = OGAWA_START_ID, end = m_group->getNumChildren();
205 if (!m_group->isChildGroup(i)) {
209 Alembic::Ogawa::IGroupPtr group =
210 m_group->getGroup(i,
false, OGAWA_THREAD);
212 std::string groupName;
218 if (!readData(group, 1, type)) {
222 if (type != groupType) {
226 groups.push_back(groupName);
234OgDataType OgIGroup::attributeType(
const std::string &name)
const
236 Alembic::Ogawa::IGroupPtr group = findGroup(name, F3DAttributeType);
238 if (group && group->getNumChildren() > 2) {
247OgDataType OgIGroup::datasetType(
const std::string &name)
const
249 Alembic::Ogawa::IGroupPtr group = findGroup(name, F3DDatasetType);
251 if (group && group->getNumChildren() > 2) {
260OgDataType OgIGroup::compressedDatasetType(
const std::string &name)
const
262 Alembic::Ogawa::IGroupPtr group = findGroup(name, F3DCompressedDatasetType);
264 if (group && group->getNumChildren() > 2) {
280OgIGroup::OgIGroup(Alembic::Ogawa::IGroupPtr group)
289void OgIGroup::validate()
292 if (m_group && m_group->getNumChildren() < 2) {
297 if (m_group && (!m_group->isChildData(0) || !m_group->isChildData(1))) {
bool getGroupName(Alembic::Ogawa::IGroupPtr group, std::string &name)
OgDataType readDataType(Alembic::Ogawa::IGroupPtr group, const size_t idx)
bool readString(Alembic::Ogawa::IGroupPtr group, const size_t idx, std::string &s)
OgDataType
Enumerates the various uses for Ogawa-level groups.
#define FIELD3D_NAMESPACE_SOURCE_CLOSE