35 #ifndef IECORE_POINTSPRIMITIVEEVALUATOR_H
36 #define IECORE_POINTSPRIMITIVEEVALUATOR_H
38 #include "tbb/mutex.h"
40 #include "IECore/Export.h"
41 #include "IECore/PrimitiveEvaluator.h"
42 #include "IECore/KDTree.h"
47 IE_CORE_FORWARDDECLARE( PointsPrimitive )
49 class IECORE_API PointsPrimitiveEvaluator : public PrimitiveEvaluator
57 typedef PointsPrimitive PrimitiveType;
59 IE_CORE_DECLARERUNTIMETYPED( PointsPrimitiveEvaluator, 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;
75 Imath::V3f vTangent()
const override;
76 size_t pointIndex()
const ;
78 Imath::V3f vectorPrimVar(
const PrimitiveVariable &pv )
const override;
79 Imath::V2f vec2PrimVar(
const PrimitiveVariable &pv )
const override;
80 float floatPrimVar(
const PrimitiveVariable &pv )
const override;
81 int intPrimVar(
const PrimitiveVariable &pv )
const override;
82 const std::string &stringPrimVar(
const PrimitiveVariable &pv )
const override;
83 Imath::Color3f colorPrimVar(
const PrimitiveVariable &pv )
const override;
84 half halfPrimVar(
const PrimitiveVariable &pv )
const override;
88 friend class PointsPrimitiveEvaluator;
90 Result( PointsPrimitiveEvaluator::ConstPtr evaluator );
93 const T &primVar(
const PrimitiveVariable &pv )
const;
96 PointsPrimitiveEvaluator::ConstPtr m_evaluator;
99 IE_CORE_DECLAREPTR( Result );
101 PointsPrimitiveEvaluator( ConstPointsPrimitivePtr points );
102 ~PointsPrimitiveEvaluator()
override;
104 ConstPrimitivePtr primitive()
const override;
106 PrimitiveEvaluator::ResultPtr createResult()
const override;
107 void validateResult( PrimitiveEvaluator::Result *result )
const override;
112 float surfaceArea()
const override;
115 float volume()
const override;
117 Imath::V3f centerOfGravity()
const override;
119 bool closestPoint(
const Imath::V3f &p, PrimitiveEvaluator::Result *result )
const override;
121 bool pointAtUV(
const Imath::V2f &uv, PrimitiveEvaluator::Result *result )
const override;
123 bool intersectionPoint(
const Imath::V3f &origin,
const Imath::V3f &direction,
124 PrimitiveEvaluator::Result *result,
float maxDistance = Imath::limits<float>::max() )
const override;
126 int intersectionPoints(
const Imath::V3f &origin,
const Imath::V3f &direction,
127 std::vector<PrimitiveEvaluator::ResultPtr> &results,
float maxDistance = Imath::limits<float>::max() )
const override;
134 static PrimitiveEvaluatorPtr create( ConstPrimitivePtr primitive );
135 friend struct PrimitiveEvaluator::Description<PointsPrimitiveEvaluator>;
136 static PrimitiveEvaluator::Description<PointsPrimitiveEvaluator> g_evaluatorDescription;
143 PointsPrimitivePtr m_pointsPrimitive;
144 PrimitiveVariable m_p;
145 const std::vector<Imath::V3f> *m_pVector;
149 typedef tbb::mutex TreeMutex;
150 TreeMutex m_treeMutex;
155 IE_CORE_DECLAREPTR( PointsPrimitiveEvaluator );
159 #endif // IECORE_POINTSPRIMITIVEEVALUATOR_H
This namespace contains all components of the core library.
Definition: AddSmoothSkinningInfluencesOp.h:43