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

Method ensureLinearAdjacencyVertIds

src/IECoreGL/CurvesPrimitive.cpp:486–530  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

484}
485
486void CurvesPrimitive::ensureLinearAdjacencyVertIds() const
487{
488 if( m_memberData->linearAdjacencyVertIdsBuffer )
489 {
490 return;
491 }
492
493 IECore::UIntVectorDataPtr vertIdsData = new IECore::UIntVectorData;
494 vector<unsigned int> &vertIds = vertIdsData->writable();
495
496 int baseIndex = 0;
497 const vector<int> &vertsPerCurve = m_memberData->vertsPerCurve->readable();
498 for( vector<int>::const_iterator it = vertsPerCurve.begin(), eIt = vertsPerCurve.end(); it != eIt; it++ )
499 {
500 unsigned int numPoints = *it;
501 int numSegments = IECoreScene::CurvesPrimitive::numSegments( m_memberData->basis, m_memberData->periodic, numPoints );
502 int pi = 0;
503 for( int i=0; i<numSegments; i++ )
504 {
505 if( m_memberData->periodic )
506 {
507 vertIds.push_back( baseIndex + ( (pi-1) % numPoints ) );
508 vertIds.push_back( baseIndex + ( (pi) % numPoints ) );
509 vertIds.push_back( baseIndex + ( (pi+1) % numPoints ) );
510 vertIds.push_back( baseIndex + ( (pi+2) % numPoints ) );
511 }
512 else
513 {
514 vertIds.push_back( baseIndex + max( pi-1, 0 ) );
515 vertIds.push_back( baseIndex + pi );
516 vertIds.push_back( baseIndex + pi + 1 );
517 vertIds.push_back( baseIndex + min( pi+2, (int)numPoints-1 ) );
518 }
519 pi += m_memberData->basis.step;
520 }
521
522 baseIndex += numPoints;
523
524 }
525
526 m_memberData->numLinearAdjacencyVertIds = vertIds.size();
527
528 CachedConverterPtr cachedConverter = CachedConverter::defaultCachedConverter();
529 m_memberData->linearAdjacencyVertIdsBuffer = IECore::runTimeCast<const Buffer>( cachedConverter->convert( vertIdsData.get() ) );
530}

Callers

nothing calls this directly

Calls 7

readableMethod · 0.80
writableMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
convertMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected