35 #ifndef IECORE_CURVESPRIMITIVEEVALUATOR_H
36 #define IECORE_CURVESPRIMITIVEEVALUATOR_H
38 #include "tbb/mutex.h"
40 #include "IECore/Export.h"
41 #include "IECore/PrimitiveEvaluator.h"
42 #include "IECore/BoundedKDTree.h"
47 IE_CORE_FORWARDDECLARE( CurvesPrimitive )
49 class IECORE_API CurvesPrimitiveEvaluator : public PrimitiveEvaluator
57 typedef CurvesPrimitive PrimitiveType;
59 IE_CORE_DECLARERUNTIMETYPED( CurvesPrimitiveEvaluator, PrimitiveEvaluator );
61 class IECORE_API Result :
public PrimitiveEvaluator::Result
65 IE_CORE_DECLAREMEMBERPTR( Result );
67 Imath::V3f point()
const override;
69 Imath::V3f normal()
const override;
71 Imath::V2f uv()
const override;
73 Imath::V3f uTangent()
const override;
74 Imath::V3f vTangent()
const override;
75 unsigned curveIndex()
const;
77 Imath::V3f vectorPrimVar(
const PrimitiveVariable &pv )
const override;
78 Imath::V2f vec2PrimVar(
const PrimitiveVariable &pv )
const override;
79 float floatPrimVar(
const PrimitiveVariable &pv )
const override;
80 int intPrimVar(
const PrimitiveVariable &pv )
const override;
81 const std::string &stringPrimVar(
const PrimitiveVariable &pv )
const override;
82 Imath::Color3f colorPrimVar(
const PrimitiveVariable &pv )
const override;
83 half halfPrimVar(
const PrimitiveVariable &pv )
const override;
87 friend class CurvesPrimitiveEvaluator;
89 Result( PrimitiveVariable p,
bool linear,
bool periodic );
91 typedef void (Result::*InitFunction)(
unsigned curveIndex,
float v,
const CurvesPrimitiveEvaluator *evaluator );
93 template<
bool linear,
bool periodic>
94 void init(
unsigned curveIndex,
float v,
const CurvesPrimitiveEvaluator *evaluator );
97 T primVar(
const PrimitiveVariable &pv,
const float *coefficients )
const;
99 unsigned m_curveIndex;
102 float m_coefficients[4];
103 float m_derivativeCoefficients[4];
104 unsigned m_vertexDataIndices[4];
105 unsigned m_varyingDataIndices[2];
106 PrimitiveVariable m_p;
112 IE_CORE_DECLAREPTR( Result );
114 CurvesPrimitiveEvaluator( ConstCurvesPrimitivePtr curves );
115 ~CurvesPrimitiveEvaluator()
override;
117 ConstPrimitivePtr primitive()
const override;
119 PrimitiveEvaluator::ResultPtr createResult()
const override;
120 void validateResult( PrimitiveEvaluator::Result *result )
const override;
125 float surfaceArea()
const override;
128 float volume()
const override;
130 Imath::V3f centerOfGravity()
const override;
131 bool closestPoint(
const Imath::V3f &p, PrimitiveEvaluator::Result *result )
const override;
133 bool pointAtUV(
const Imath::V2f &uv, PrimitiveEvaluator::Result *result )
const override;
135 bool intersectionPoint(
const Imath::V3f &origin,
const Imath::V3f &direction,
136 PrimitiveEvaluator::Result *result,
float maxDistance = Imath::limits<float>::max() )
const override;
138 int intersectionPoints(
const Imath::V3f &origin,
const Imath::V3f &direction,
139 std::vector<PrimitiveEvaluator::ResultPtr> &results,
float maxDistance = Imath::limits<float>::max() )
const override;
145 bool pointAtV(
unsigned curveIndex,
float v, PrimitiveEvaluator::Result *result )
const;
148 float curveLength(
unsigned curveIndex,
float vStart=0.0f,
float vEnd=1.0f )
const;
156 const std::vector<int> &verticesPerCurve()
const;
161 const std::vector<int> &vertexDataOffsets()
const;
163 const std::vector<int> &varyingDataOffsets()
const;
170 static PrimitiveEvaluatorPtr create( ConstPrimitivePtr primitive );
171 friend struct PrimitiveEvaluator::Description<CurvesPrimitiveEvaluator>;
172 static PrimitiveEvaluator::Description<CurvesPrimitiveEvaluator> g_evaluatorDescription;
178 float integrateCurve(
unsigned curveIndex,
float vStart,
float vEnd,
int samples, Result& typedResult )
const;
180 CurvesPrimitivePtr m_curvesPrimitive;
181 const std::vector<int> &m_verticesPerCurve;
182 std::vector<int> m_vertexDataOffsets;
183 std::vector<int> m_varyingDataOffsets;
184 PrimitiveVariable m_p;
188 typedef tbb::mutex TreeMutex;
189 TreeMutex m_treeMutex;
191 std::vector<Imath::Box3f> m_treeBounds;
193 std::vector<Line> m_treeLines;
195 void closestPointWalk( Box3fTree::NodeIndex nodeIndex,
const Imath::V3f &p,
unsigned &curveIndex,
float &v,
float &closestDistSquared )
const;
199 IE_CORE_DECLAREPTR( CurvesPrimitiveEvaluator );
203 #endif // IECORE_CURVESPRIMITIVEEVALUATOR_H
IECOREGL_API void init(bool glAlreadyInitialised=false)
This namespace contains all components of the core library.
Definition: AddSmoothSkinningInfluencesOp.h:43