Skip to content

Commit 5d59dc1

Browse files
committed
CubicBasis : Add constant basis
1 parent c226396 commit 5d59dc1

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

include/IECore/CubicBasis.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ enum class StandardCubicBasis
5050
Linear,
5151
Bezier,
5252
BSpline,
53-
CatmullRom
53+
CatmullRom,
54+
Constant
5455
};
5556

5657
/// Provides a basis matrix class for use in constructing cubic curves.
@@ -142,6 +143,7 @@ class IECORE_EXPORT CubicBasis
142143
static const CubicBasis &bezier();
143144
static const CubicBasis &bSpline();
144145
static const CubicBasis &catmullRom();
146+
static const CubicBasis &constant();
145147

146148
StandardCubicBasis standardBasis() const;
147149
};

include/IECore/CubicBasis.inl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ CubicBasis<T>::CubicBasis( StandardCubicBasis standardBasis )
6464
case StandardCubicBasis::CatmullRom:
6565
*this = CubicBasis<T>::catmullRom();
6666
break;
67+
case StandardCubicBasis::Constant:
68+
*this = CubicBasis<T>::constant();
69+
break;
6770
case StandardCubicBasis::Unknown:
6871
throw IECore::Exception( "CubicBasis::CubicBasis - Invalid basis");
6972
}
@@ -352,6 +355,21 @@ const CubicBasis<T> &CubicBasis<T>::catmullRom()
352355
return m;
353356
}
354357

358+
template<typename T>
359+
const CubicBasis<T> &CubicBasis<T>::constant()
360+
{
361+
static CubicBasis<T> m(
362+
MatrixType(
363+
0, 0, 0, 0,
364+
0, 0, 0, 0,
365+
0, 0, 0, 0,
366+
1, 0, 0, 0
367+
),
368+
1
369+
);
370+
return m;
371+
}
372+
355373
template<typename T>
356374
StandardCubicBasis CubicBasis<T>::standardBasis() const
357375
{
@@ -371,6 +389,10 @@ StandardCubicBasis CubicBasis<T>::standardBasis() const
371389
{
372390
return StandardCubicBasis::CatmullRom;
373391
}
392+
else if( *this == CubicBasis<T>::constant() )
393+
{
394+
return StandardCubicBasis::Constant;
395+
}
374396

375397
return StandardCubicBasis::Unknown;
376398
}

src/IECorePython/CubicBasisBinding.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ void bindCubicBasis( const char *name )
121121
.def( "bezier", &T::bezier, return_value_policy<copy_const_reference>() ).staticmethod( "bezier" )
122122
.def( "bSpline", &T::bSpline, return_value_policy<copy_const_reference>() ).staticmethod( "bSpline" )
123123
.def( "catmullRom", &T::catmullRom, return_value_policy<copy_const_reference>() ).staticmethod( "catmullRom" )
124+
.def( "constant", &T::constant, return_value_policy<copy_const_reference>() ).staticmethod( "constant" )
124125
.def( "standardBasis", &T::standardBasis )
125126
.def( "__repr__", &repr<T> )
126127
;
@@ -135,6 +136,7 @@ void bindCubicBasis()
135136
.value("Bezier", IECore::StandardCubicBasis::Bezier )
136137
.value("BSpline", IECore::StandardCubicBasis::BSpline )
137138
.value("CatmullRom", IECore::StandardCubicBasis::CatmullRom )
139+
.value("Constant", IECore::StandardCubicBasis::Constant )
138140
.export_values()
139141
;
140142

src/IECoreScene/CurvesAlgoUpdateEndpointMultiplicity.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ int requiredMultiplicity( const IECore::CubicBasisf &cubicBasis )
107107
{
108108
return 1;
109109
}
110+
else if( cubicBasis == IECore::CubicBasisf::constant() )
111+
{
112+
return 1;
113+
}
110114
else
111115
{
112116
throw IECore::Exception( "updateEndPointMultiplicity : Unsupported curve basis" );

0 commit comments

Comments
 (0)