MCPcopy Create free account
hub / github.com/ImageEngine/cortex / barycentricPosition

Method barycentricPosition

src/IECoreScene/MeshPrimitiveEvaluator.cpp:842–871  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

840}
841
842bool MeshPrimitiveEvaluator::barycentricPosition( unsigned int triangleIndex, const Imath::V3f &barycentricCoordinates, PrimitiveEvaluator::Result *result ) const
843{
844 if( triangleIndex >= m_triangles.size() )
845 {
846 return false;
847 }
848
849 Result *r = static_cast<Result *>( result );
850
851 r->m_triangleIdx = triangleIndex;
852 r->m_bary = barycentricCoordinates;
853
854 size_t vertIdOffset = triangleIndex * 3;
855 r->m_vertexIds = Imath::V3i( (*m_meshVertexIds)[vertIdOffset], (*m_meshVertexIds)[vertIdOffset+1], (*m_meshVertexIds)[vertIdOffset+2] );
856
857 const Imath::V3f &p0 = m_verts->readable()[ r->m_vertexIds[0] ];
858 const Imath::V3f &p1 = m_verts->readable()[ r->m_vertexIds[1] ];
859 const Imath::V3f &p2 = m_verts->readable()[ r->m_vertexIds[2] ];
860
861 r->m_p = trianglePoint( p0, p1, p2, r->m_bary );
862
863 r->m_n = triangleNormal( p0, p1, p2 );
864
865 if( m_uv.interpolation != PrimitiveVariable::Invalid )
866 {
867 r->m_uv = r->vec2PrimVar( m_uv );
868 }
869
870 return true;
871}
872
873void MeshPrimitiveEvaluator::closestPointWalk( TriangleBoundTree::NodeIndex nodeIndex, const V3f &p, float &closestDistanceSqrd, Result *result ) const
874{

Callers 3

testRandomTrianglesMethod · 0.80
barycentricPositionFunction · 0.80

Calls 3

readableMethod · 0.80
sizeMethod · 0.45
vec2PrimVarMethod · 0.45

Tested by

no test coverage detected