9#include <cgv/data/object_registry.h>
10#include <cgv/math/interpolate.h>
23static std::vector<cgv::rgb> to_colors(
const char* data) {
24 std::vector<cgv::rgb> colors;
26 size_t count = std::strlen(data) / 6;
27 for(
size_t i = 0; i < count; ++i) {
28 std::string hex(data + 6 * i, 6);
31 colors.push_back(color);
44static std::vector<std::vector<cgv::rgb>> to_colors(
const std::array<const char*, N>& data) {
45 std::vector<std::vector<cgv::rgb>> colors;
47 for(
const char* entry : data)
48 colors.push_back(to_colors(entry));
53enum class ColorSchemeType {
64 ColorSchemeType
type = ColorSchemeType::kUndefined;
82 interpolator_ = interpolator.clone();
124 return interpolator_;
132 return interpolator_->at(t);
140 return interpolator_->quantize(n);
145 std::shared_ptr<const interpolator_type> interpolator_;
168 for(
const auto& variant : variants)
169 variants_.insert({ variant.size(), variant });
181 if(variants_.empty())
185 auto it = variants_.find(n);
186 if(it != variants_.end())
190 it = variants_.upper_bound(n);
192 if(type == ColorSchemeType::kCategorical) {
194 if(it == variants_.end())
199 if(it != variants_.begin())
202 if(!it->second.empty())
212 std::map<size_t, std::vector<cgv::rgb>> variants_;
221extern CGV_API continuous_color_scheme_registry& get_global_continuous_color_scheme_registry();
223extern CGV_API discrete_color_scheme_registry& get_global_discrete_color_scheme_registry();
230template<
typename RegistryT,
typename ColorSchemeT>
243 void load(
const std::string& name,
const ColorSchemeT& scheme) {
244 loaded_count_ += registry_.add(name, scheme) ? 1 : 0;
252 return supported_types_.empty() || supported_types_.find(type) != supported_types_.end();
257 return loaded_count_;
262 size_t loaded_count_ = 0;
264 RegistryT& registry_;
266 std::set<ColorSchemeType> supported_types_;
270using continuous_color_scheme_registry_helper = color_scheme_registry_helper<continuous_color_scheme_registry, continuous_color_scheme>;
272using discrete_color_scheme_registry_helper = color_scheme_registry_helper<discrete_color_scheme_registry, discrete_color_scheme>;
277#include <cgv/config/lib_end.h>
An object registry allows registering and querying objects identified by a unique name.
virtual std::vector< ValueT > quantize(size_t n) const
Return a sequence of n uniformly-spaced samples from the interpolator within the parameter range [0,...
uint8_t from_hex(char c)
convert from hex character
this header is dependency free