Skip to content

Commit e8a61c2

Browse files
authored
Merge pull request #8 from demarle/add-multiblock-example
Add an example of making and using multiblock.
2 parents d2a0e12 + fddc1b7 commit e8a61c2

3 files changed

Lines changed: 98 additions & 1 deletion

File tree

Cxx/CompositeData/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ ADD_TEST(${KIT}-OverlappingAMR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${KIT}CxxTests
3434
TestOverlappingAMR -E 35)
3535
ADD_TEST(${KIT}-CompositePolyDataMapper ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${KIT}CxxTests
3636
TestCompositePolyDataMapper)
37+
ADD_TEST(${KIT}-MultiBlockDataSet ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${KIT}CxxTests
38+
TestMultiBlockDataSet)
3739

3840
INCLUDE(${WikiExamples_SOURCE_DIR}/CMake/ExamplesTesting.cmake)
3941

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// Demonstrates how to make and use VTK's MultiBlock type data
2+
3+
#include <vtkActor.h>
4+
#include <vtkCompositeDataGeometryFilter.h>
5+
#include <vtkExtractEdges.h>
6+
#include <vtkMultiBlockDataSet.h>
7+
#include <vtkPolyDataMapper.h>
8+
#include <vtkRenderer.h>
9+
#include <vtkRenderWindow.h>
10+
#include <vtkRenderWindowInteractor.h>
11+
#include <vtkSmartPointer.h>
12+
#include <vtkSphereSource.h>
13+
14+
int main (int, char *[])
15+
{
16+
// PART 1 Make some Data
17+
// make a tree
18+
vtkSmartPointer<vtkMultiBlockDataSet> root =
19+
vtkSmartPointer<vtkMultiBlockDataSet>::New();
20+
21+
vtkSmartPointer<vtkMultiBlockDataSet> branch =
22+
vtkSmartPointer<vtkMultiBlockDataSet>::New();
23+
root->SetBlock(0, branch);
24+
25+
// make some leaves
26+
vtkSmartPointer<vtkSphereSource> leaf1 =
27+
vtkSmartPointer<vtkSphereSource>::New();
28+
leaf1->SetCenter(0,0,0);
29+
leaf1->Update();
30+
branch->SetBlock(0, leaf1->GetOutput());
31+
32+
vtkSmartPointer<vtkSphereSource> leaf2 =
33+
vtkSmartPointer<vtkSphereSource>::New();
34+
leaf2->SetCenter(1.75,2.5,0);
35+
leaf2->SetRadius(1.5);
36+
leaf2->Update();
37+
branch->SetBlock(1, leaf2->GetOutput());
38+
39+
vtkSmartPointer<vtkSphereSource> leaf3 =
40+
vtkSmartPointer<vtkSphereSource>::New();
41+
leaf3->SetCenter(4,0,0);
42+
leaf3->SetRadius(2);
43+
leaf3->Update();
44+
root->SetBlock(1, leaf3->GetOutput());
45+
46+
// uncomment to inspect
47+
//std::cerr << root->GetClassName() << std::endl;
48+
//root->PrintSelf(std::cerr, vtkIndent(0));
49+
50+
// PART 2 Do something with the data
51+
// a non composite aware filter, the pipeline will iterate
52+
vtkSmartPointer<vtkExtractEdges> edges =
53+
vtkSmartPointer<vtkExtractEdges>::New();
54+
edges->SetInputData(root);
55+
56+
// uncomment to inspect
57+
//edges->Update();
58+
//cerr << edges->GetOutputDataObject(0)->GetClassName() << endl;
59+
//edges->GetOutputDataObject(0)->PrintSelf(std::cerr, vtkIndent(0));
60+
61+
// PART 3 Show the data
62+
// also demonstrate a composite aware filter
63+
// this filter aggregates all blocks into one polydata
64+
// this is handy for display, although fairly limited
65+
// see vtkCompositePolyDataMapper2 for something better
66+
vtkSmartPointer<vtkCompositeDataGeometryFilter> polydata =
67+
vtkSmartPointer<vtkCompositeDataGeometryFilter>::New();
68+
polydata->SetInputConnection(edges->GetOutputPort());
69+
70+
// uncomment to inspect
71+
//polydata->Update();
72+
//std::cerr << polydata->GetOutput()->GetClassName() << std::endl;
73+
//polydata->GetOutput()->PrintSelf(std::cerr, vtkIndent(0));
74+
75+
// display the data
76+
vtkSmartPointer<vtkRenderer> aren = vtkSmartPointer<vtkRenderer>::New();
77+
vtkSmartPointer<vtkRenderWindow> renWin =
78+
vtkSmartPointer<vtkRenderWindow>::New();
79+
renWin->AddRenderer(aren);
80+
vtkSmartPointer<vtkRenderWindowInteractor> iren =
81+
vtkSmartPointer<vtkRenderWindowInteractor>::New();
82+
iren->SetRenderWindow(renWin);
83+
84+
vtkSmartPointer<vtkPolyDataMapper> mapper =
85+
vtkSmartPointer<vtkPolyDataMapper>::New();
86+
mapper->SetInputConnection(0, polydata->GetOutputPort(0));
87+
88+
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
89+
actor->SetMapper(mapper);
90+
aren->AddActor(actor);
91+
92+
iren->Start();
93+
94+
return EXIT_SUCCESS;
95+
}

Cxx/CompositeData/OverlappingAMR.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//Demonstrates how to create and populate a VTK's Overlapping AMR Grid type Data
1+
//Demonstrates how to make VTK's Overlapping AMR Grid type Data
22

33
#include <vtkAMRBox.h>
44
#include <vtkAMRUtilities.h>

0 commit comments

Comments
 (0)