10 #ifndef hifi_Controllers_Filter_h
11 #define hifi_Controllers_Filter_h
18 #include <shared/Factory.h>
20 #include <GLMHelpers.h>
22 #include <QtCore/QEasingCurve>
24 #include "../AxisValue.h"
29 namespace controller {
34 using Pointer = std::shared_ptr<Filter>;
35 using List = std::list<Pointer>;
36 using Lambda = std::function<float(
float)>;
37 using Factory = hifi::SimpleFactory<Filter, QString>;
39 virtual ~Filter() =
default;
41 virtual AxisValue apply(AxisValue value)
const = 0;
42 virtual Pose apply(Pose value)
const = 0;
45 virtual bool parseParameters(
const QJsonValue& parameters) {
return true; }
47 static Pointer parse(
const QJsonValue& json);
48 static void registerBuilder(
const QString& name, Factory::Builder builder);
49 static Factory& getFactory() {
return _factory; }
51 static bool parseSingleFloatParameter(
const QJsonValue& parameters,
const QString& name,
float& output);
52 static bool parseVec3Parameter(
const QJsonValue& parameters, glm::vec3& output);
53 static bool parseQuatParameter(
const QJsonValue& parameters, glm::quat& output);
54 static bool parseMat4Parameter(
const QJsonValue& parameters, glm::mat4& output);
56 static Factory _factory;
60 #define REGISTER_FILTER_CLASS(classEntry) \
62 using Registrar = Filter::Factory::Registrar<classEntry>; \
63 static Registrar _registrar;
65 #define REGISTER_FILTER_CLASS_INSTANCE(classEntry, className) \
66 classEntry::Registrar classEntry::_registrar(className, Filter::getFactory());