MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / getCurvePoint

Function getCurvePoint

source/MRMesh/MRAlignContoursToMesh.cpp:236–269  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

234}
235
236CurvePoint getCurvePoint( const CurvePoints& cp, const std::vector<float> & lens, float p )
237{
238 assert( cp.size() == lens.size() );
239 assert( cp.size() >= 2 );
240 CurvePoint res;
241 if ( p <= lens.front() )
242 {
243 // extrapolate
244 res = cp.front();
245 res.pos += ( p - lens.front() ) * res.dir;
246 return res;
247 }
248 if ( p >= lens.back() )
249 {
250 // extrapolate
251 res = cp.back();
252 res.pos += ( p - lens.back() ) * res.dir;
253 return res;
254 }
255 // interpolate
256 auto i = std::lower_bound( lens.begin(), lens.end(), p ) - lens.begin();
257 assert( lens[i] >= p );
258 if ( lens[i] == p )
259 return cp[i];
260 assert( lens[i-1] < p );
261 auto f = ( p - lens[i-1] ) / ( lens[i] - lens[i-1] );
262 res = CurvePoint
263 {
264 .pos = lerp( cp[i-1].pos, cp[i].pos, f ),
265 .dir = lerp( cp[i-1].dir, cp[i].dir, f ),
266 .snorm = lerp( cp[i-1].snorm, cp[i].snorm, f )
267 };
268 return res;
269}
270
271Expected<CurveFunc> curveFromPoints( const CurvePoints& cp, float* outCurveLen )
272{

Callers 1

curveFromPointsFunction · 0.85

Calls 4

lerpFunction · 0.85
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected