| 208 | } |
| 209 | |
| 210 | IECore::CompoundObjectPtr VDBObject::metadata( const std::string &name ) |
| 211 | { |
| 212 | CompoundObjectPtr metadata = new CompoundObject(); |
| 213 | |
| 214 | openvdb::GridBase::ConstPtr grid; |
| 215 | |
| 216 | if ( unmodifiedFromFile() ) |
| 217 | { |
| 218 | |
| 219 | auto it = m_grids.find( name ); |
| 220 | if ( it != m_grids.end() ) |
| 221 | { |
| 222 | grid = it->second.metadata(); |
| 223 | } |
| 224 | } |
| 225 | else |
| 226 | { |
| 227 | openvdb::GridBase::Ptr tmpGrid = findGrid ( name ); |
| 228 | if ( tmpGrid ) |
| 229 | { |
| 230 | tmpGrid->addStatsMetadata(); |
| 231 | } |
| 232 | grid = tmpGrid; |
| 233 | } |
| 234 | |
| 235 | if( !grid ) |
| 236 | { |
| 237 | return metadata; |
| 238 | } |
| 239 | |
| 240 | for( auto metaIt = grid->beginMeta(); metaIt != grid->endMeta(); ++metaIt ) |
| 241 | { |
| 242 | if( metaIt->second->typeName() == openvdb::StringMetadata::staticTypeName() ) |
| 243 | { |
| 244 | metadata->members()[metaIt->first] = new StringData( |
| 245 | static_cast<openvdb::StringMetadata *>( metaIt->second.get() )->value() |
| 246 | ); |
| 247 | } |
| 248 | else if( metaIt->second->typeName() == openvdb::Int64Metadata::staticTypeName() ) |
| 249 | { |
| 250 | metadata->members()[metaIt->first] = new Int64Data( |
| 251 | static_cast<openvdb::Int64Metadata *>( metaIt->second.get() )->value() |
| 252 | ); |
| 253 | } |
| 254 | else if( metaIt->second->typeName() == openvdb::Int32Metadata::staticTypeName() ) |
| 255 | { |
| 256 | metadata->members()[metaIt->first] = new IntData( |
| 257 | static_cast<openvdb::Int32Metadata *>( metaIt->second.get() )->value() |
| 258 | ); |
| 259 | } |
| 260 | else if( metaIt->second->typeName() == openvdb::FloatMetadata::staticTypeName() ) |
| 261 | { |
| 262 | metadata->members()[metaIt->first] = new FloatData( |
| 263 | static_cast<openvdb::FloatMetadata *>( metaIt->second.get() )->value() |
| 264 | ); |
| 265 | } |
| 266 | else if( metaIt->second->typeName() == openvdb::DoubleMetadata::staticTypeName() ) |
| 267 | { |