Skip to content

Commit 4b97bba

Browse files
IECoreScene CurvesPrimitiveEvaluator Result : Api additions
IECoreScene.CurvesPrimitiveEvaluator.Result now provides accessors for interpolation coefficients and indices.
1 parent d445260 commit 4b97bba

File tree

3 files changed

+74
-14
lines changed

3 files changed

+74
-14
lines changed

include/IECoreScene/CurvesPrimitiveEvaluator.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
#include "IECore/BoundedKDTree.h"
4242

43+
#include <array>
4344
#include <mutex>
4445

4546
namespace IECoreScene
@@ -74,6 +75,11 @@ class IECORESCENE_API CurvesPrimitiveEvaluator : public PrimitiveEvaluator
7475
Imath::V3f uTangent() const override;
7576
Imath::V3f vTangent() const override;
7677
unsigned curveIndex() const;
78+
const std::array<float, 4> &coefficients() const;
79+
const std::array<float, 4> &derivativeCoefficients() const;
80+
const std::array<unsigned, 4> &vertexDataIndices() const;
81+
const std::array<unsigned, 2> &varyingDataIndices() const;
82+
bool linear() const;
7783

7884
Imath::V3f vectorPrimVar( const PrimitiveVariable &pv ) const override;
7985
Imath::V2f vec2PrimVar( const PrimitiveVariable &pv ) const override;
@@ -100,10 +106,10 @@ class IECORESCENE_API CurvesPrimitiveEvaluator : public PrimitiveEvaluator
100106
unsigned m_curveIndex;
101107
float m_v;
102108
float m_segmentV;
103-
float m_coefficients[4];
104-
float m_derivativeCoefficients[4];
105-
unsigned m_vertexDataIndices[4];
106-
unsigned m_varyingDataIndices[2];
109+
std::array<float, 4> m_coefficients;
110+
std::array<float, 4> m_derivativeCoefficients;
111+
std::array<unsigned, 4> m_vertexDataIndices;
112+
std::array<unsigned, 2> m_varyingDataIndices;
107113
PrimitiveVariable m_p;
108114
bool m_linear;
109115
InitFunction m_init;

src/IECoreScene/CurvesPrimitiveEvaluator.cpp

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ T CurvesPrimitiveEvaluator::Result::primVar( const PrimitiveVariable &primVar, c
136136

137137
Imath::V3f CurvesPrimitiveEvaluator::Result::point() const
138138
{
139-
return primVar<V3f>( m_p, m_coefficients );
139+
return primVar<V3f>( m_p, m_coefficients.data() );
140140
}
141141

142142
Imath::V3f CurvesPrimitiveEvaluator::Result::normal() const
@@ -156,32 +156,57 @@ Imath::V3f CurvesPrimitiveEvaluator::Result::uTangent() const
156156

157157
Imath::V3f CurvesPrimitiveEvaluator::Result::vTangent() const
158158
{
159-
return primVar<V3f>( m_p, m_derivativeCoefficients );
159+
return primVar<V3f>( m_p, m_derivativeCoefficients.data() );
160160
}
161161

162162
unsigned CurvesPrimitiveEvaluator::Result::curveIndex() const
163163
{
164164
return m_curveIndex;
165165
}
166166

167+
const std::array<float, 4> &CurvesPrimitiveEvaluator::Result::coefficients() const
168+
{
169+
return m_coefficients;
170+
}
171+
172+
const std::array<float, 4> &CurvesPrimitiveEvaluator::Result::derivativeCoefficients() const
173+
{
174+
return m_derivativeCoefficients;
175+
}
176+
177+
const std::array<unsigned, 4> &CurvesPrimitiveEvaluator::Result::vertexDataIndices() const
178+
{
179+
return m_vertexDataIndices;
180+
}
181+
182+
const std::array<unsigned, 2> &CurvesPrimitiveEvaluator::Result::varyingDataIndices() const
183+
{
184+
return m_varyingDataIndices;
185+
}
186+
187+
bool CurvesPrimitiveEvaluator::Result::linear() const
188+
{
189+
return m_linear;
190+
}
191+
167192
Imath::V3f CurvesPrimitiveEvaluator::Result::vectorPrimVar( const PrimitiveVariable &pv ) const
168193
{
169-
return primVar<V3f>( pv, m_coefficients );
194+
return primVar<V3f>( pv, m_coefficients.data() );
170195
}
171196

172197
V2f CurvesPrimitiveEvaluator::Result::vec2PrimVar( const PrimitiveVariable &pv ) const
173198
{
174-
return primVar<V2f>( pv, m_coefficients );
199+
return primVar<V2f>( pv, m_coefficients.data() );
175200
}
176201

177202
float CurvesPrimitiveEvaluator::Result::floatPrimVar( const PrimitiveVariable &pv ) const
178203
{
179-
return primVar<float>( pv, m_coefficients );
204+
return primVar<float>( pv, m_coefficients.data() );
180205
}
181206

182207
int CurvesPrimitiveEvaluator::Result::intPrimVar( const PrimitiveVariable &pv ) const
183208
{
184-
return primVar<int>( pv, m_coefficients );
209+
return primVar<int>( pv, m_coefficients.data() );
185210
}
186211

187212
const std::string &CurvesPrimitiveEvaluator::Result::stringPrimVar( const PrimitiveVariable &pv ) const
@@ -208,12 +233,12 @@ const std::string &CurvesPrimitiveEvaluator::Result::stringPrimVar( const Primit
208233

209234
Imath::Color3f CurvesPrimitiveEvaluator::Result::colorPrimVar( const PrimitiveVariable &pv ) const
210235
{
211-
return primVar<Color3f>( pv, m_coefficients );
236+
return primVar<Color3f>( pv, m_coefficients.data() );
212237
}
213238

214239
half CurvesPrimitiveEvaluator::Result::halfPrimVar( const PrimitiveVariable &pv ) const
215240
{
216-
return primVar<half>( pv, m_coefficients );
241+
return primVar<half>( pv, m_coefficients.data() );
217242
}
218243

219244
template<bool linear, bool periodic>
@@ -274,8 +299,8 @@ void CurvesPrimitiveEvaluator::Result::init( unsigned curveIndex, float v, const
274299
}
275300
else
276301
{
277-
basis.coefficients( m_segmentV, m_coefficients );
278-
basis.derivativeCoefficients( m_segmentV, m_derivativeCoefficients );
302+
basis.coefficients( m_segmentV, m_coefficients.data() );
303+
basis.derivativeCoefficients( m_segmentV, m_derivativeCoefficients.data() );
279304

280305
if( periodic )
281306
{

src/IECoreScene/bindings/CurvesPrimitiveEvaluatorBinding.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,30 @@ IntVectorDataPtr varyingDataOffsets( const CurvesPrimitiveEvaluator &e )
8383
return new IntVectorData( e.varyingDataOffsets() );
8484
}
8585

86+
tuple coefficients( const CurvesPrimitiveEvaluator::Result &r )
87+
{
88+
const std::array<float, 4> &c = r.coefficients();
89+
return make_tuple( c[0], c[1], c[2], c[3] );
90+
}
91+
92+
tuple derivativeCoefficients( const CurvesPrimitiveEvaluator::Result &r )
93+
{
94+
const std::array<float, 4> &c = r.derivativeCoefficients();
95+
return make_tuple( c[0], c[1], c[2], c[3] );
96+
}
97+
98+
tuple vertexDataIndices( const CurvesPrimitiveEvaluator::Result &r )
99+
{
100+
const std::array<unsigned, 4> &o = r.vertexDataIndices();
101+
return make_tuple( o[0], o[1], o[2], o[3] );
102+
}
103+
104+
tuple varyingDataIndices( const CurvesPrimitiveEvaluator::Result &r )
105+
{
106+
const std::array<unsigned, 2> &o = r.varyingDataIndices();
107+
return make_tuple( o[0], o[1] );
108+
}
109+
86110
} // namespace
87111

88112
//////////////////////////////////////////////////////////////////////////
@@ -233,6 +257,11 @@ void bindCurvesPrimitiveEvaluator()
233257

234258
RefCountedClass<CurvesPrimitiveEvaluator::Result, PrimitiveEvaluator::Result>( "Result" )
235259
.def( "curveIndex", &CurvesPrimitiveEvaluator::Result::curveIndex )
260+
.def( "coefficients", &coefficients )
261+
.def( "derivativeCoefficients", &derivativeCoefficients )
262+
.def( "vertexDataIndices", &vertexDataIndices )
263+
.def( "varyingDataIndices", &varyingDataIndices )
264+
.def( "linear", &CurvesPrimitiveEvaluator::Result::linear )
236265
;
237266

238267
}

0 commit comments

Comments
 (0)