MCPcopy Create free account
hub / github.com/Kitware/VTK / ResolveLabels

Method ResolveLabels

Rendering/Context2D/vtkLabeledContourPolyDataItem.cxx:596–672  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

594
595//------------------------------------------------------------------------------
596bool vtkLabeledContourPolyDataItem::ResolveLabels()
597{
598 typedef std::vector<PDILabelInfo>::iterator InnerIterator;
599 typedef std::vector<std::vector<PDILabelInfo>>::iterator OuterIterator;
600
601 bool removedA = false;
602 bool removedB = false;
603
604 OuterIterator outerA = this->Internal->LabelInfos.begin();
605 OuterIterator outerEnd = this->Internal->LabelInfos.end();
606 while (outerA != outerEnd)
607 {
608 InnerIterator innerA = outerA->begin();
609 InnerIterator innerAEnd = outerA->end();
610 while (innerA != innerAEnd)
611 {
612 removedA = false;
613 OuterIterator outerB = outerA;
614 while (!removedA && outerB != outerEnd)
615 {
616 InnerIterator innerB = outerA == outerB ? innerA + 1 : outerB->begin();
617 InnerIterator innerBEnd = outerB->end();
618 while (!removedA && innerB != innerBEnd)
619 {
620 removedB = false;
621 // Does innerA overlap with innerB?
622 if (this->Internal->TestOverlap(*innerA, *innerB))
623 {
624 // Remove the label that has the most labels for its isoline:
625 if (outerA->size() > outerB->size())
626 {
627 // Remove innerA
628 innerA = outerA->erase(innerA);
629 innerAEnd = outerA->end();
630 removedA = true;
631 }
632 else
633 {
634 // Remove innerB
635 // Need to update A's iterators if outerA == outerB
636 if (outerA == outerB)
637 {
638 // We know that aIdx < bIdx, so removing B won't change
639 // the position of A:
640 size_t aIdx = innerA - outerA->begin();
641 innerB = outerB->erase(innerB);
642 innerBEnd = outerB->end();
643 innerA = outerA->begin() + aIdx;
644 innerAEnd = outerA->end();
645 }
646 else
647 {
648 innerB = outerB->erase(innerB);
649 innerBEnd = outerB->end();
650 }
651 removedB = true;
652 }
653 }

Callers 1

PaintMethod · 0.95

Calls 5

beginMethod · 0.45
endMethod · 0.45
TestOverlapMethod · 0.45
sizeMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected