| 40 | // #define TESTING_LOOP |
| 41 | |
| 42 | int TestBSPTree(int argc, char* argv[]) |
| 43 | { |
| 44 | // Standard rendering classes |
| 45 | vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); |
| 46 | vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New(); |
| 47 | vtkSmartPointer<vtkRenderWindowInteractor> iren = |
| 48 | vtkSmartPointer<vtkRenderWindowInteractor>::New(); |
| 49 | renWin->AddRenderer(renderer); |
| 50 | iren->SetRenderWindow(renWin); |
| 51 | |
| 52 | vtkIdType maxI = 0; |
| 53 | int bestSeed = 0; |
| 54 | for (int s = 931; s <= 931; s++) |
| 55 | { |
| 56 | renderer->RemoveAllViewProps(); |
| 57 | |
| 58 | // |
| 59 | // Create random point cloud |
| 60 | // |
| 61 | vtkMath::RandomSeed(s); |
| 62 | vtkSmartPointer<vtkPointSource> points = vtkSmartPointer<vtkPointSource>::New(); |
| 63 | points->SetRadius(0.05); |
| 64 | points->SetNumberOfPoints(30); |
| 65 | |
| 66 | // |
| 67 | // Create small sphere |
| 68 | // |
| 69 | vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New(); |
| 70 | sphere->SetRadius(0.0125); |
| 71 | sphere->SetCenter(0.0, 0.0, 0.0); |
| 72 | sphere->SetThetaResolution(16); |
| 73 | sphere->SetPhiResolution(16); |
| 74 | |
| 75 | // |
| 76 | // Glyph many small spheres over point cloud |
| 77 | // |
| 78 | vtkSmartPointer<vtkGlyph3D> glyph = vtkSmartPointer<vtkGlyph3D>::New(); |
| 79 | glyph->SetInputConnection(0, points->GetOutputPort(0)); |
| 80 | glyph->SetSourceConnection(sphere->GetOutputPort(0)); |
| 81 | glyph->SetScaling(0); |
| 82 | glyph->Update(); |
| 83 | |
| 84 | double bounds[6]; |
| 85 | glyph->GetOutput()->GetBounds(bounds); |
| 86 | vtkBoundingBox box(bounds); |
| 87 | double tol = box.GetDiagonalLength() / 1E6; |
| 88 | |
| 89 | // |
| 90 | // Intersect Ray with BSP tree full of spheres |
| 91 | // |
| 92 | vtkSmartPointer<vtkModifiedBSPTree> bspTree = vtkSmartPointer<vtkModifiedBSPTree>::New(); |
| 93 | bspTree->SetDataSet(glyph->GetOutput(0)); |
| 94 | bspTree->SetMaxLevel(12); |
| 95 | bspTree->SetNumberOfCellsPerNode(16); |
| 96 | bspTree->BuildLocator(); |
| 97 | |
| 98 | vtkSmartPointer<vtkPoints> verts = vtkSmartPointer<vtkPoints>::New(); |
| 99 | vtkSmartPointer<vtkIdList> cellIds = vtkSmartPointer<vtkIdList>::New(); |
nothing calls this directly
no test coverage detected