[Bf-blender-cvs] [4d1d7af43cc] usd-importer-T81257-merge: USDVolumeReader improvements.
makowalski
noreply at git.blender.org
Tue Jun 22 04:13:36 CEST 2021
Commit: 4d1d7af43ccd44ce80380871d760ce9a4de11d65
Author: makowalski
Date: Mon Jun 21 22:01:29 2021 -0400
Branches: usd-importer-T81257-merge
https://developer.blender.org/rB4d1d7af43ccd44ce80380871d760ce9a4de11d65
USDVolumeReader improvements.
Fixed Volume reference counting error (incorrect
call to id_us_min()). Fixed error reading fieldName
attribute, which was incorrectly being read as a string
rather than a token. Avoiding use of auto and unneeded
declararions. Logically grouping related code. Now
invoking attribute Get() functions with the given time.
===================================================================
M source/blender/io/usd/intern/usd_reader_volume.cc
===================================================================
diff --git a/source/blender/io/usd/intern/usd_reader_volume.cc b/source/blender/io/usd/intern/usd_reader_volume.cc
index 175e541927d..b69a6fc751c 100644
--- a/source/blender/io/usd/intern/usd_reader_volume.cc
+++ b/source/blender/io/usd/intern/usd_reader_volume.cc
@@ -52,12 +52,17 @@
#include <iostream>
+namespace usdtokens {
+
+static const pxr::TfToken density("density", pxr::TfToken::Immortal);
+
+}
+
namespace blender::io::usd {
void USDVolumeReader::create_object(Main *bmain, const double /* motionSampleTime */)
{
Volume *volume = (Volume *)BKE_volume_add(bmain, name_.c_str());
- id_us_min(&volume->id);
object_ = BKE_object_add_only_object(bmain, OB_VOLUME, name_.c_str());
object_->data = volume;
@@ -69,54 +74,59 @@ void USDVolumeReader::read_object_data(Main *bmain, const double motionSampleTim
return;
}
- pxr::UsdVolVolume::FieldMap fields = volume_.GetFieldPaths();
+ Volume *volume = static_cast<Volume *>(object_->data);
- std::string filepath;
+ if (!volume) {
+ return;
+ }
- Volume *volume = static_cast<Volume *>(object_->data);
+ pxr::UsdVolVolume::FieldMap fields = volume_.GetFieldPaths();
- for (auto it = fields.begin(); it != fields.end(); ++it) {
+ for (pxr::UsdVolVolume::FieldMap::const_iterator it = fields.begin(); it != fields.end(); ++it) {
pxr::UsdPrim fieldPrim = prim_.GetStage()->GetPrimAtPath(it->second);
- if (fieldPrim.IsA<pxr::UsdVolOpenVDBAsset>()) {
- pxr::UsdVolOpenVDBAsset fieldBase(fieldPrim);
+ if (!fieldPrim.IsA<pxr::UsdVolOpenVDBAsset>()) {
+ continue;
+ }
- pxr::UsdAttribute filepathAttr = fieldBase.GetFilePathAttr();
- pxr::UsdAttribute fieldNameAttr = fieldBase.GetFieldNameAttr();
+ pxr::UsdVolOpenVDBAsset fieldBase(fieldPrim);
- std::string fieldName = "density";
+ pxr::UsdAttribute fieldNameAttr = fieldBase.GetFieldNameAttr();
- if (fieldNameAttr.IsAuthored()) {
- fieldNameAttr.Get(&fieldName, 0.0);
+ if (fieldNameAttr.IsAuthored()) {
+ pxr::TfToken fieldName;
+ fieldNameAttr.Get(&fieldName, motionSampleTime);
- // A Blender volume creates density by default
- if (fieldName != "density") {
- BKE_volume_grid_add(volume, fieldName.c_str(), VOLUME_GRID_FLOAT);
- }
+ /* A Blender volume creates density by default. */
+ if (fieldName != usdtokens::density) {
+ BKE_volume_grid_add(volume, fieldName.GetString().c_str(), VOLUME_GRID_FLOAT);
}
+ }
- if (filepathAttr.IsAuthored()) {
+ pxr::UsdAttribute filepathAttr = fieldBase.GetFilePathAttr();
- pxr::SdfAssetPath fp;
- filepathAttr.Get(&fp, 0.0);
+ if (filepathAttr.IsAuthored()) {
+ pxr::SdfAssetPath fp;
+ filepathAttr.Get(&fp, motionSampleTime);
- if (filepathAttr.ValueMightBeTimeVarying()) {
- std::vector<double> filePathTimes;
- filepathAttr.GetTimeSamples(&filePathTimes);
+ if (filepathAttr.ValueMightBeTimeVarying()) {
+ std::vector<double> filePathTimes;
+ filepathAttr.GetTimeSamples(&filePathTimes);
- int start = (int)filePathTimes.front();
- int end = (int)filePathTimes.back();
+ if (!filePathTimes.empty()) {
+ int start = static_cast<int>(filePathTimes.front());
+ int end = static_cast<int>(filePathTimes.back());
- volume->is_sequence = (char)true;
+ volume->is_sequence = static_cast<char>(true);
volume->frame_start = start;
volume->frame_duration = (end - start) + 1;
}
+ }
- filepath = fp.GetResolvedPath();
+ std::string filepath = fp.GetResolvedPath();
- strcpy(volume->filepath, filepath.c_str());
- }
+ strcpy(volume->filepath, filepath.c_str());
}
}
More information about the Bf-blender-cvs
mailing list