------------------------------------------------------------------------------
| 60 | |
| 61 | //------------------------------------------------------------------------------ |
| 62 | int vtkExtractSelectedTree::BuildTree( |
| 63 | vtkTree* inputTree, vtkIdTypeArray* selectedVerticesList, vtkMutableDirectedGraph* builder) |
| 64 | { |
| 65 | // Get the input and builder vertex and edge data. |
| 66 | vtkDataSetAttributes* inputVertexData = inputTree->GetVertexData(); |
| 67 | vtkDataSetAttributes* inputEdgeData = inputTree->GetEdgeData(); |
| 68 | |
| 69 | vtkDataSetAttributes* builderVertexData = builder->GetVertexData(); |
| 70 | vtkDataSetAttributes* builderEdgeData = builder->GetEdgeData(); |
| 71 | builderVertexData->CopyAllocate(inputVertexData); |
| 72 | builderEdgeData->CopyAllocate(inputEdgeData); |
| 73 | |
| 74 | // Add selected vertices and set up a map between the input tree vertex id |
| 75 | // and the output tree vertex id |
| 76 | std::map<vtkIdType, vtkIdType> vertexMap; |
| 77 | for (vtkIdType j = 0; j < selectedVerticesList->GetNumberOfTuples(); j++) |
| 78 | { |
| 79 | vtkIdType inVert = selectedVerticesList->GetValue(j); |
| 80 | vtkIdType outVert = builder->AddVertex(); |
| 81 | |
| 82 | builderVertexData->CopyData(inputVertexData, inVert, outVert); |
| 83 | vertexMap[inVert] = outVert; |
| 84 | } |
| 85 | |
| 86 | // Add edges connecting selected vertices |
| 87 | vtkSmartPointer<vtkEdgeListIterator> edges = vtkSmartPointer<vtkEdgeListIterator>::New(); |
| 88 | inputTree->GetEdges(edges); |
| 89 | while (edges->HasNext()) |
| 90 | { |
| 91 | vtkEdgeType e = edges->Next(); |
| 92 | if (vertexMap.find(e.Source) != vertexMap.end() && vertexMap.find(e.Target) != vertexMap.end()) |
| 93 | { |
| 94 | vtkIdType source = vertexMap[e.Source]; |
| 95 | vtkIdType target = vertexMap[e.Target]; |
| 96 | vtkEdgeType f = builder->AddEdge(source, target); |
| 97 | builderEdgeData->CopyData(inputEdgeData, e.Id, f.Id); |
| 98 | |
| 99 | vtkIdType npts; |
| 100 | double* pts; |
| 101 | inputTree->GetEdgePoints(e.Id, npts, pts); |
| 102 | builder->SetEdgePoints(f.Id, npts, pts); |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | return 1; |
| 107 | } |
| 108 | |
| 109 | int vtkExtractSelectedTree::RequestData(vtkInformation* vtkNotUsed(request), |
| 110 | vtkInformationVector** inputVector, vtkInformationVector* outputVector) |
no test coverage detected