NAP
sequencetracksegmentcurve.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "sequencetracksegment.h"
9 
10 namespace nap
11 {
13 
18  template<typename T>
20  {
21  RTTI_ENABLE(SequenceTrackSegment)
22  public:
23  // properties
24  std::vector<ResourcePtr<math::FCurve<float, float>>> mCurves;
25  std::vector<math::ECurveInterp> mCurveTypes;
26 
32  bool init(utility::ErrorState& errorState) override;
33 
37  T getStartValue() const;
38 
42  T getEndValue() const;
43 
48  T getValue(float pos) const;
49 
54  void setStartValue(T value);
55 
60  void setEndValue(T value);
61 
67  int getCurveCount();
68  };
69 
70 
72  // Sequence Track Segment Type Definitions
74 
79 
80 
82  // Template Definitions
84 
85  template<typename T>
87  {
88  if(!SequenceTrackSegment::init(errorState))
89  return false;
90 
91  if(!errorState.check(
92  mCurves.size() == this->getCurveCount(), "size of curves must be %i", this->getCurveCount()))
93  return false;
94 
95  if(!errorState.check(
96  mCurveTypes.size() == this->getCurveCount(), "size of curvetypes must be %i", this->getCurveCount()))
97  return false;
98 
99  for(int i = 0; i < mCurves.size(); i++)
100  {
101  if(!errorState.check(mCurves[i]->mPoints.size() >= 2, "curve %i has invalid amount of points", i))
102  {
103  return false;
104  }
105  }
106 
107  return true;
108  }
109 
110 
112  // Forward declarations
114 
115  template<>
117 
118  template<>
120 
121  template<>
122  NAPAPI float nap::SequenceTrackSegmentCurveFloat::getValue(float t) const;
123 
124  template<>
126 
127  template<>
129 
130  template<>
131  NAPAPI glm::vec2 nap::SequenceTrackSegmentCurveVec2::getStartValue() const;
132 
133  template<>
134  NAPAPI glm::vec2 nap::SequenceTrackSegmentCurveVec2::getEndValue() const;
135 
136  template<>
137  NAPAPI glm::vec2 nap::SequenceTrackSegmentCurveVec2::getValue(float t) const;
138 
139  template<>
140  NAPAPI void nap::SequenceTrackSegmentCurveVec2::setStartValue(glm::vec2 t);
141 
142  template<>
143  NAPAPI void nap::SequenceTrackSegmentCurveVec2::setEndValue(glm::vec2 t);
144 
145  template<>
146  NAPAPI glm::vec3 nap::SequenceTrackSegmentCurveVec3::getStartValue() const;
147 
148  template<>
149  NAPAPI glm::vec3 nap::SequenceTrackSegmentCurveVec3::getValue(float t) const;
150 
151  template<>
152  NAPAPI glm::vec3 nap::SequenceTrackSegmentCurveVec3::getEndValue() const;
153 
154  template<>
155  NAPAPI void nap::SequenceTrackSegmentCurveVec3::setStartValue(glm::vec3 t);
156 
157  template<>
158  NAPAPI void nap::SequenceTrackSegmentCurveVec3::setEndValue(glm::vec3 t);
159 
160  template<>
161  NAPAPI glm::vec4 nap::SequenceTrackSegmentCurveVec4::getStartValue() const;
162 
163  template<>
164  NAPAPI glm::vec4 nap::SequenceTrackSegmentCurveVec4::getEndValue() const;
165 
166  template<>
167  NAPAPI glm::vec4 nap::SequenceTrackSegmentCurveVec4::getValue(float t) const;
168 
169  template<>
170  NAPAPI void nap::SequenceTrackSegmentCurveVec4::setStartValue(glm::vec4 t);
171 
172  template<>
173  NAPAPI void nap::SequenceTrackSegmentCurveVec4::setEndValue(glm::vec4 t);
174 
175  template<>
177 
178  template<>
180 
181  template<>
183 
184  template<>
186 
187 
189  // Helper Macro
191 #define DEFINE_VECTOR_SEQUENCETRACKSEGMENTCURVE(Type) \
192  RTTI_BEGIN_CLASS(Type, "Bezier curve track segment") \
193  RTTI_PROPERTY("Curves", &Type::mCurves, nap::rtti::EPropertyMetaData::Default) \
194  RTTI_PROPERTY("Curve Types", &Type::mCurveTypes, nap::rtti::EPropertyMetaData::Default) \
195  RTTI_END_CLASS
196 }
nap::utility::ErrorState::check
bool check(bool successCondition, T &&errorMessage)
Definition: errorstate.h:36
nap::SequenceTrackSegmentCurve
Definition: sequencetracksegmentcurve.h:19
nap::SequenceTrackSegment::init
virtual bool init(utility::ErrorState &errorState) override
nap::SequenceTrackSegmentCurve::setStartValue
void setStartValue(T value)
nap::utility::ErrorState
Definition: errorstate.h:19
nap::SequenceTrackSegment
Definition: sequencetracksegment.h:19
nap::SequenceTrackSegmentCurve::mCurves
std::vector< ResourcePtr< math::FCurve< float, float > > > mCurves
Property: 'Curves' vector holding curves.
Definition: sequencetracksegmentcurve.h:24
nap::SequenceTrackSegmentCurve::mCurveTypes
std::vector< math::ECurveInterp > mCurveTypes
Property: 'Curve Types' curve types of this segment ( linear, bezier )
Definition: sequencetracksegmentcurve.h:25
nap::SequenceTrackSegmentCurve::getValue
T getValue(float pos) const
nap::SequenceTrackSegmentCurve::getEndValue
T getEndValue() const
nap::SequenceTrackSegmentCurve::getStartValue
T getStartValue() const
nap
Definition: templateapp.h:17
nap::SequenceTrackSegmentCurve::setEndValue
void setEndValue(T value)
nap::SequenceTrackSegmentCurve::init
bool init(utility::ErrorState &errorState) override
Definition: sequencetracksegmentcurve.h:86
nap::SequenceTrackSegmentCurve::getCurveCount
int getCurveCount()