MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ write()

bool MayaFlux::IO::VDBWriter::write ( const std::string &  filepath,
const Kakshya::VolumeData data,
const VolumeWriteOptions options = {} 
)
overridevirtual

Write volume data to disk.

Parameters
filepathDestination path.
dataVolume data. Must satisfy VolumeData::is_consistent().
optionsFormat-specific options.
Returns
true on success. On failure call get_last_error().

Implements MayaFlux::IO::VolumeWriter.

Definition at line 206 of file VDBWriter.cpp.

210{
211 m_last_error.clear();
212
213 if (!data.is_consistent()) {
214 m_last_error = "VolumeData failed is_consistent()";
216 return false;
217 }
218
219 const float scalar_bg = options.background;
220 const glm::vec3 vector_bg { options.background };
221
222 Detail::VDBArchive archive;
223
224 for (const auto& field : data.fields) {
225 const ActiveSet active = extract_active(
226 field, data.lattice, threshold_for(field.name, options));
227
228 const auto meta = semantics_metadata(field);
229
230 const auto background = active.is_vector
231 ? std::as_bytes(std::span(&vector_bg, 1))
232 : std::as_bytes(std::span(&scalar_bg, 1));
233
234 const Detail::VDBGridSpec spec {
235 .name = field.name,
236 .coords = active.coords,
237 .values = active.values,
238 .background = background,
239 .is_vector = active.is_vector,
240 .metadata = meta,
241 };
242
243 if (!archive.add_grid(data.lattice, spec)) {
244 m_last_error = std::string(archive.last_error());
246 return false;
247 }
248
250 "VDBWriter: '{}' {} of {} cells active",
251 field.name, active.coords.size(), data.cell_count());
252 }
253
254 const auto resolved = resolve_write_path(filepath);
255
256 if (!archive.save(resolved, compression_flags(options), k_deflate_level)) {
257 m_last_error = std::string(archive.last_error());
259 return false;
260 }
261
263 "VDBWriter: wrote '{}', {} grids", resolved, archive.grid_count());
264 return true;
265}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
std::string resolve_write_path(const std::string &filepath)
Anchor a relative output path to Config::SOURCE_DIR.
@ FileIO
Filesystem I/O operations.
@ IO
Networking, file handling, streaming.
GeometryFn< float > background(Kinesis::AABB2D bounds, glm::vec3 color, const std::shared_ptr< Core::VKImage > &texture)
TRIANGLE_STRIP background quad for a plot area.
Definition PlotSpec.cpp:88

References MayaFlux::IO::Detail::VDBArchive::add_grid(), MayaFlux::IO::VolumeWriteOptions::background, MayaFlux::Kakshya::VolumeData::cell_count(), MayaFlux::Kakshya::VolumeData::fields, MayaFlux::Journal::FileIO, MayaFlux::IO::Detail::VDBArchive::grid_count(), MayaFlux::Journal::IO, MayaFlux::Kakshya::VolumeData::is_consistent(), MayaFlux::IO::Detail::VDBArchive::last_error(), MayaFlux::Kakshya::VolumeData::lattice, m_last_error, MF_DEBUG, MF_ERROR, MF_INFO, MayaFlux::IO::Detail::VDBGridSpec::name, MayaFlux::IO::resolve_write_path(), and MayaFlux::IO::Detail::VDBArchive::save().

+ Here is the call graph for this function: