1 // -*- c++ -*-
2 /*=========================================================================
3
4 Program: Visualization Toolkit
5 Module: PSLACReaderLinear.cxx
6
7 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
8 All rights reserved.
9 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
10
11 This software is distributed WITHOUT ANY WARRANTY; without even
12 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13 PURPOSE. See the above copyright notice for more information.
14
15 =========================================================================*/
16 /*-------------------------------------------------------------------------
17 Copyright 2009 Sandia Corporation.
18 Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
19 the U.S. Government retains certain rights in this software.
20 -------------------------------------------------------------------------*/
21
22 #include "vtkActor.h"
23 #include "vtkCamera.h"
24 #include "vtkCompositeDataGeometryFilter.h"
25 #include "vtkCompositeRenderManager.h"
26 #include "vtkLookupTable.h"
27 #include "vtkMPIController.h"
28 #include "vtkPLSDynaReader.h"
29 #include "vtkPolyDataMapper.h"
30 #include "vtkRegressionTestImage.h"
31 #include "vtkRenderWindow.h"
32 #include "vtkRenderWindowInteractor.h"
33 #include "vtkRenderer.h"
34 #include "vtkTestUtilities.h"
35
36 #include "vtkNew.h"
37 #include "vtkSmartPointer.h"
38
39 struct TestArgs
40 {
41 int* retval;
42 int argc;
43 char** argv;
44 };
45
46 //=============================================================================
PLSDynaReader(vtkMultiProcessController * controller,void * _args)47 void PLSDynaReader(vtkMultiProcessController* controller, void* _args)
48 {
49 TestArgs* args = reinterpret_cast<TestArgs*>(_args);
50 int argc = args->argc;
51 char** argv = args->argv;
52 *(args->retval) = 1;
53
54 // Set up reader.
55 vtkNew<vtkPLSDynaReader> reader;
56
57 char* meshFileName =
58 vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/LSDyna/hemi.draw/hemi_draw.d3plot");
59 reader->SetFileName(meshFileName);
60
61 // Extract geometry that we can render.
62 vtkNew<vtkCompositeDataGeometryFilter> geometry;
63 geometry->SetInputConnection(reader->GetOutputPort());
64
65 // Set up rendering stuff.
66 vtkNew<vtkPolyDataMapper> mapper;
67 mapper->SetInputConnection(geometry->GetOutputPort());
68 mapper->SetScalarModeToUsePointFieldData();
69
70 vtkNew<vtkActor> actor;
71 actor->SetMapper(mapper);
72
73 vtkNew<vtkCompositeRenderManager> prm;
74
75 vtkSmartPointer<vtkRenderer> renderer;
76 renderer.TakeReference(prm->MakeRenderer());
77 renderer->AddActor(actor);
78
79 vtkSmartPointer<vtkRenderWindow> renwin;
80 renwin.TakeReference(prm->MakeRenderWindow());
81 renwin->SetSize(300, 300);
82 renwin->SetPosition(0, 200 * controller->GetLocalProcessId());
83 renwin->AddRenderer(renderer);
84
85 prm->SetRenderWindow(renwin);
86 prm->SetController(controller);
87 prm->InitializePieces();
88 prm->InitializeOffScreen(); // Mesa GL only
89
90 if (controller->GetLocalProcessId() == 0)
91 {
92 renwin->Render();
93
94 // Do the test comparison.
95 int retval = vtkRegressionTestImage(renwin);
96 if (retval == vtkRegressionTester::DO_INTERACTOR)
97 {
98 vtkNew<vtkRenderWindowInteractor> iren;
99 iren->SetRenderWindow(renwin);
100 iren->Initialize();
101 iren->Start();
102 retval = vtkRegressionTester::PASSED;
103 }
104
105 *(args->retval) = (retval == vtkRegressionTester::PASSED) ? 0 : 1;
106
107 prm->StopServices();
108 }
109 else // not root node
110 {
111 prm->StartServices();
112 }
113
114 controller->Broadcast(args->retval, 1, 0);
115 }
116
117 //=============================================================================
PLSDynaReader(int argc,char * argv[])118 int PLSDynaReader(int argc, char* argv[])
119 {
120 int retval = 1;
121
122 vtkNew<vtkMPIController> controller;
123 controller->Initialize(&argc, &argv);
124
125 vtkMultiProcessController::SetGlobalController(controller);
126
127 TestArgs args;
128 args.retval = &retval;
129 args.argc = argc;
130 args.argv = argv;
131
132 controller->SetSingleMethod(PLSDynaReader, &args);
133 controller->SingleMethodExecute();
134
135 controller->Finalize();
136
137 return retval;
138 }
139