forked from blender/blender
Export volumes #58
@ -33,26 +33,35 @@ void VolumeData::init()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
filepath_ = BKE_volume_grids_frame_filepath(volume);
|
filepath_ = BKE_volume_grids_frame_filepath(volume);
|
||||||
if (BKE_volume_is_loaded(volume)) {
|
|
||||||
BKE_volume_unload(volume);
|
|
||||||
}
|
|
||||||
write_transform();
|
write_transform();
|
||||||
|
BKE_volume_unload(volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VolumeData::insert()
|
void VolumeData::insert()
|
||||||
{
|
{
|
||||||
ID_LOG(1, "");
|
|
||||||
scene_delegate_->GetRenderIndex().InsertRprim(
|
scene_delegate_->GetRenderIndex().InsertRprim(
|
||||||
pxr::HdPrimTypeTokens->volume, scene_delegate_, prim_id);
|
pxr::HdPrimTypeTokens->volume, scene_delegate_, prim_id);
|
||||||
|
|
||||||
|
ID_LOG(1, "");
|
||||||
|
|
||||||
for (auto &desc : volume_field_descriptors()) {
|
for (auto &desc : volume_field_descriptors()) {
|
||||||
scene_delegate_->GetRenderIndex().InsertBprim(
|
scene_delegate_->GetRenderIndex().InsertBprim(
|
||||||
desc.fieldPrimType, scene_delegate_, desc.fieldId);
|
desc.fieldPrimType, scene_delegate_, desc.fieldId);
|
||||||
|
ID_LOG(1, "Volume field %s", desc.fieldId.GetText());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VolumeData::remove()
|
void VolumeData::remove()
|
||||||
{
|
{
|
||||||
|
/* NOTE: Is it possible to manipulate a list of fields in Blender?
|
||||||
|
* Also something can happen to file.
|
||||||
|
* Probably we need to store a field list in class. */
|
||||||
|
for (auto &desc : volume_field_descriptors()) {
|
||||||
|
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 2, "%s", desc.fieldId.GetText());
|
||||||
|
|||||||
|
scene_delegate_->GetRenderIndex().RemoveBprim(desc.fieldPrimType, desc.fieldId);
|
||||||
|
}
|
||||||
|
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 2, "%s", prim_id.GetText());
|
||||||
|
scene_delegate_->GetRenderIndex().RemoveRprim(prim_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VolumeData::update()
|
void VolumeData::update()
|
||||||
@ -79,7 +88,13 @@ pxr::VtValue VolumeData::get_data(pxr::SdfPath const &id, pxr::TfToken const &ke
|
|||||||
|
|
||||||
bool VolumeData::update_visibility()
|
bool VolumeData::update_visibility()
|
||||||
{
|
{
|
||||||
return false;
|
bool ret = ObjectData::update_visibility();
|
||||||
|
if (ret) {
|
||||||
|
scene_delegate_->GetRenderIndex().GetChangeTracker().MarkRprimDirty(
|
||||||
|
prim_id, pxr::HdChangeTracker::DirtyVisibility);
|
||||||
|
ID_LOG(1, "");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
pxr::HdVolumeFieldDescriptorVector VolumeData::volume_field_descriptors() const
|
pxr::HdVolumeFieldDescriptorVector VolumeData::volume_field_descriptors() const
|
||||||
@ -87,6 +102,10 @@ pxr::HdVolumeFieldDescriptorVector VolumeData::volume_field_descriptors() const
|
|||||||
Volume *volume = (Volume *)((Object *)id)->data;
|
Volume *volume = (Volume *)((Object *)id)->data;
|
||||||
Main *main = CTX_data_main(scene_delegate_->context);
|
Main *main = CTX_data_main(scene_delegate_->context);
|
||||||
|
|
||||||
|
if (!volume->runtime.grids) {
|
||||||
|
return pxr::HdVolumeFieldDescriptorVector();
|
||||||
|
}
|
||||||
|
|
||||||
if (!BKE_volume_is_loaded(volume) && !BKE_volume_load(volume, main)) {
|
if (!BKE_volume_is_loaded(volume) && !BKE_volume_load(volume, main)) {
|
||||||
return pxr::HdVolumeFieldDescriptorVector();
|
return pxr::HdVolumeFieldDescriptorVector();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user
Yes, move volume_field_descriptors to private field
VolumeData::field_descriptors_