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 "sequencetracksegmentduration.h"
9 
10 // External Includes
11 #include <color.h>
12 
13 namespace nap
14 {
16 
23  {
24  RTTI_ENABLE(SequenceTrackSegmentDuration)
25  public:
26  RGBAColorFloat mColor = { 0.0f, 0.0f, 0.0f, 0.0f };
27  bool mLocked = false;
28  };
29 
34  template<typename T>
36  {
38  public:
39  // properties
40  std::vector<ResourcePtr<math::FCurve<float, float>>> mCurves;
41  std::vector<math::ECurveInterp> mCurveTypes;
42 
43 
49  bool init(utility::ErrorState& errorState) override;
50 
54  T getStartValue() const;
55 
59  T getEndValue() const;
60 
65  T getValue(float pos) const;
66 
71  void setStartValue(T value);
72 
77  void setEndValue(T value);
78 
84  int getCurveCount();
85  };
86 
87 
89  // Sequence Track Segment Type Definitions
91 
96 
97 
99  // Template Definitions
101 
102  template<typename T>
104  {
105  if(!SequenceTrackSegment::init(errorState))
106  return false;
107 
108  if(!errorState.check(mCurves.size() == this->getCurveCount(), "size of curves must be %i", this->getCurveCount()))
109  return false;
110 
111  if(!errorState.check(mCurveTypes.size() == this->getCurveCount(), "size of curvetypes must be %i", this->getCurveCount()))
112  return false;
113 
114  for(int i = 0; i < mCurves.size(); i++)
115  {
116  if(!errorState.check(mCurves[i]->mPoints.size() >= 2, "curve %i has invalid amount of points", i))
117  {
118  return false;
119  }
120  }
121 
122  return true;
123  }
124 
125 
127  // Forward declarations
129 
130  template<>
132 
133  template<>
135 
136  template<>
137  NAPAPI float nap::SequenceTrackSegmentCurveFloat::getValue(float t) const;
138 
139  template<>
141 
142  template<>
144 
145  template<>
146  NAPAPI glm::vec2 nap::SequenceTrackSegmentCurveVec2::getStartValue() const;
147 
148  template<>
149  NAPAPI glm::vec2 nap::SequenceTrackSegmentCurveVec2::getEndValue() const;
150 
151  template<>
152  NAPAPI glm::vec2 nap::SequenceTrackSegmentCurveVec2::getValue(float t) const;
153 
154  template<>
155  NAPAPI void nap::SequenceTrackSegmentCurveVec2::setStartValue(glm::vec2 t);
156 
157  template<>
158  NAPAPI void nap::SequenceTrackSegmentCurveVec2::setEndValue(glm::vec2 t);
159 
160  template<>
161  NAPAPI glm::vec3 nap::SequenceTrackSegmentCurveVec3::getStartValue() const;
162 
163  template<>
164  NAPAPI glm::vec3 nap::SequenceTrackSegmentCurveVec3::getValue(float t) const;
165 
166  template<>
167  NAPAPI glm::vec3 nap::SequenceTrackSegmentCurveVec3::getEndValue() const;
168 
169  template<>
170  NAPAPI void nap::SequenceTrackSegmentCurveVec3::setStartValue(glm::vec3 t);
171 
172  template<>
173  NAPAPI void nap::SequenceTrackSegmentCurveVec3::setEndValue(glm::vec3 t);
174 
175  template<>
176  NAPAPI glm::vec4 nap::SequenceTrackSegmentCurveVec4::getStartValue() const;
177 
178  template<>
179  NAPAPI glm::vec4 nap::SequenceTrackSegmentCurveVec4::getEndValue() const;
180 
181  template<>
182  NAPAPI glm::vec4 nap::SequenceTrackSegmentCurveVec4::getValue(float t) const;
183 
184  template<>
185  NAPAPI void nap::SequenceTrackSegmentCurveVec4::setStartValue(glm::vec4 t);
186 
187  template<>
188  NAPAPI void nap::SequenceTrackSegmentCurveVec4::setEndValue(glm::vec4 t);
189 
190  template<>
192 
193  template<>
195 
196  template<>
198 
199  template<>
201 
202 
204  // Helper Macro
206 #define DEFINE_VECTOR_SEQUENCETRACKSEGMENTCURVE(Type) \
207  RTTI_BEGIN_CLASS(Type, "Bezier curve track segment") \
208  RTTI_PROPERTY("Curves", &Type::mCurves, nap::rtti::EPropertyMetaData::Default) \
209  RTTI_PROPERTY("Curve Types", &Type::mCurveTypes, nap::rtti::EPropertyMetaData::Default) \
210  RTTI_PROPERTY("Duration", &Type::mDuration, nap::rtti::EPropertyMetaData::Default) \
211  RTTI_END_CLASS
212 }
nap::utility::ErrorState::check
bool check(bool successCondition, T &&errorMessage)
Definition: errorstate.h:36
nap::SequenceTrackSegmentCurve
Definition: sequencetracksegmentcurve.h:35
nap::SequenceTrackSegmentCurveBase
Definition: sequencetracksegmentcurve.h:22
nap::RGBAColor< float >
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::SequenceTrackSegmentCurve::mCurves
std::vector< ResourcePtr< math::FCurve< float, float > > > mCurves
Property: 'Curves' vector holding curves.
Definition: sequencetracksegmentcurve.h:40
nap::SequenceTrackSegmentCurve::mCurveTypes
std::vector< math::ECurveInterp > mCurveTypes
Property: 'Curve Types' curve types of this segment ( linear, bezier )
Definition: sequencetracksegmentcurve.h:41
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:103
nap::SequenceTrackSegmentDuration
Definition: sequencetracksegmentduration.h:14
nap::SequenceTrackSegmentCurve::getCurveCount
int getCurveCount()