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

Method copyColors

source/MRMesh/MRObjectMeshHolder.cpp:459–510  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

457}
458
459void ObjectMeshHolder::copyColors( const ObjectMeshHolder& src, const VertMap& thisToSrc, const FaceMap& thisToSrcFaces )
460{
461 MR_TIMER;
462
463 setColoringType( src.getColoringType() );
464
465 const auto& srcColorMap = src.getVertsColorMap();
466 if ( !srcColorMap.empty() )
467 {
468 VertColors colorMap;
469 colorMap.resizeNoInit( thisToSrc.size() );
470 ParallelFor( colorMap, [&] ( VertId id )
471 {
472 auto curId = thisToSrc[id];
473 if( curId.valid() )
474 colorMap[id] = srcColorMap[curId];
475 } );
476 setVertsColorMap( std::move( colorMap ) );
477 }
478
479 const auto& srcFaceColorMap = src.getFacesColorMap();
480 if ( !srcFaceColorMap.empty() && data_.mesh )
481 {
482 const auto& validFaces = data_.mesh->topology.getValidFaces();
483 FaceColors faceColors;
484 faceColors.resizeNoInit( validFaces.size() );
485
486 std::optional<Color> commonColor;
487 bool differentColors = false;
488
489 for ( const auto& faceId : validFaces )
490 {
491 if ( !thisToSrcFaces[faceId].valid() )
492 continue;
493
494 auto& newColor = srcFaceColorMap[thisToSrcFaces[faceId]];
495 faceColors[faceId] = newColor;
496 if ( !commonColor )
497 commonColor = newColor;
498 else if ( *commonColor != newColor )
499 differentColors = true;
500 }
501
502 if ( differentColors )
503 setFacesColorMap( std::move( faceColors ) );
504 else if ( commonColor && src.getColoringType() == ColoringType::FacesColorMap )
505 {
506 setFrontColor( *commonColor, true );
507 setColoringType( ColoringType::SolidColor );
508 }
509 }
510}
511
512void ObjectMeshHolder::clearAncillaryTexture()
513{

Callers 3

cloneRegionFunction · 0.45
cloneRegionFunction · 0.45
cloneRegionFunction · 0.45

Calls 6

ParallelForFunction · 0.85
setFacesColorMapFunction · 0.85
setVertsColorMapFunction · 0.70
emptyMethod · 0.45
sizeMethod · 0.45
validMethod · 0.45

Tested by

no test coverage detected