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

Method ExtractElements

Filters/Extraction/vtkExtractSelection.cxx:734–893  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

732
733//------------------------------------------------------------------------------
734vtkSmartPointer<vtkDataObject> vtkExtractSelection::ExtractElements(vtkDataObject* inputBlock,
735 vtkDataObject::AttributeTypes type, EvaluationResult evaluationResult, vtkDataObject* outputBlock)
736{
737 bool extractAll = evaluationResult == EvaluationResult::ALL;
738 bool extractNone = evaluationResult == EvaluationResult::NONE;
739 if (extractNone)
740 {
741 // Assume nothing was selected and return.
742 return nullptr;
743 }
744 auto fd = outputBlock->GetAttributes(type);
745 vtkSmartPointer<vtkSignedCharArray> insidednessArray =
746 fd ? vtkSignedCharArray::SafeDownCast(fd->GetArray("__vtkInsidedness__")) : nullptr;
747 if (!insidednessArray || insidednessArray->GetNumberOfTuples() <= 0)
748 {
749 // No insidedness array
750 return nullptr;
751 }
752 vtkSmartPointer<vtkDataObject> result;
753
754 if (vtkHyperTreeGrid* htg = vtkHyperTreeGrid::SafeDownCast(inputBlock))
755 {
756 vtkNew<vtkBitArray> mask;
757 mask->SetNumberOfComponents(1);
758 mask->SetNumberOfTuples(insidednessArray->GetNumberOfTuples());
759 auto masking = [&mask, &insidednessArray](vtkIdType begin, vtkIdType end)
760 {
761 for (vtkIdType iMask = begin; iMask < end; ++iMask)
762 {
763 mask->SetValue(iMask, static_cast<int>(insidednessArray->GetValue(iMask) == 0));
764 }
765 };
766 // lambda method is not thread safe due to vtkBitArray (see issue #18837)
767 //---------------------------------------------------------------------
768 masking(0, mask->GetNumberOfTuples());
769 // vtkSMPTools::For(0, mask->GetNumberOfTuples(), masking);
770 //---------------------------------------------------------------------
771 if (htg->HasMask())
772 {
773 auto originalMask = htg->GetMask();
774 auto maskOring = [&mask, &originalMask](vtkIdType begin, vtkIdType end)
775 {
776 for (vtkIdType iMask = begin; iMask < end; ++iMask)
777 {
778 if (originalMask->GetValue(iMask))
779 {
780 mask->SetValue(iMask, 1);
781 }
782 }
783 };
784 maskOring(0, mask->GetNumberOfTuples());
785 }
786 result.TakeReference(htg->NewInstance());
787 vtkHyperTreeGrid* outHTG = vtkHyperTreeGrid::SafeDownCast(result);
788 outHTG->ShallowCopy(htg);
789 outHTG->SetMask(mask);
790 // sanitize the mask
791 {

Callers 1

RequestDataMethod · 0.95

Calls 15

ExtractSelectedPointsMethod · 0.95
ExtractSelectedCellsMethod · 0.95
ExtractSelectedRowsMethod · 0.95
SanitizeHTGMaskFunction · 0.85
HasMaskMethod · 0.80
GetNextTreeMethod · 0.80
CheckAbortMethod · 0.80
GetDataObjectTypeMethod · 0.80
NewFunction · 0.50
GetAttributesMethod · 0.45
GetArrayMethod · 0.45

Tested by

no test coverage detected