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

◆ set_region_data()

void MayaFlux::Kakshya::PlotContainer::set_region_data ( const Region region,
const std::vector< DataVariant > &  data 
)
overridevirtual

Write a sample range back into a series.

Same coordinate convention as get_region_data(). The first DataVariant in data must hold vector<double>. Used by Context drag handlers for wavetable editing and interactive signal manipulation.

Implements MayaFlux::Kakshya::NDDataContainer.

Definition at line 245 of file PlotContainer.cpp.

246{
247 if (data.empty() || region.start_coordinates.empty())
248 return;
249
250 const uint64_t series_idx = region.start_coordinates[0];
251 if (series_idx >= m_data.size())
252 return;
253
254 auto* dst = std::get_if<std::vector<double>>(&m_data[series_idx]);
255 if (!dst)
256 return;
257
258 const auto* src = std::get_if<std::vector<double>>(&data[0]);
259 if (!src || src->empty())
260 return;
261
262 const uint64_t s = (region.start_coordinates.size() > 1) ? region.start_coordinates[1] : 0;
263 const uint64_t e = (region.end_coordinates.size() > 1)
264 ? std::min(region.end_coordinates[1], static_cast<uint64_t>(dst->size() - 1))
265 : static_cast<uint64_t>(dst->size() - 1);
266
267 if (s > e)
268 return;
269
270 const uint64_t n = std::min<uint64_t>(src->size(), e - s + 1);
271 std::copy_n(src->begin(), n, dst->begin() + static_cast<ptrdiff_t>(s));
272}
std::vector< DataVariant > m_data

References MayaFlux::Kakshya::Region::end_coordinates, m_data, and MayaFlux::Kakshya::Region::start_coordinates.