Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

253 lines
7.6 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: TestPStream.cxx,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkCompositeRenderManager.h"
#include "vtkDebugLeaks.h"
#include "vtkDistributedStreamTracer.h"
#include "vtkLineSource.h"
#include "vtkLookupTable.h"
#include "vtkMPIController.h"
#include "vtkObjectFactory.h"
#include "vtkPLOT3DReader.h"
#include "vtkGeometryFilter.h"
#include "vtkParallelFactory.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkTestUtilities.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkStructuredGrid.h"
#include "vtkStructuredGridOutlineFilter.h"
struct PStreamArgs_tmp
{
int* retVal;
int argc;
char** argv;
};
// This will be called by all processes
void MyMain( vtkMultiProcessController *controller, void *arg )
{
PStreamArgs_tmp* args =
reinterpret_cast<PStreamArgs_tmp*>(arg);
int myId = controller->GetLocalProcessId();
int numProcs = controller->GetNumberOfProcesses();
vtkRenderer* ren = vtkRenderer::New();
ren->SetBackground(0.33, 0.35, 0.43);
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);
renWin->SetSize(400, 300);
renWin->SetPosition(0, 350 * myId);
//camera parameters
vtkCamera* camera = ren->GetActiveCamera();
camera->SetPosition(-5.86786, 49.2857, 51.597);
camera->SetFocalPoint(8.255, -3.17482e-16, 29.7631);
camera->SetViewUp(-0.112182, -0.42918, 0.896225);
camera->SetViewAngle(30);
camera->SetClippingRange(10.0, 80.6592);
camera->Dolly(1.5);
// Create the reader, the data file name might have
// to be changed depending on where the data files are.
char* fname1 = vtkTestUtilities::ExpandDataFileName(args->argc, args->argv,
"Data/combxyz.bin");
char* fname2 = vtkTestUtilities::ExpandDataFileName(args->argc, args->argv,
"Data/combq.bin");
vtkPLOT3DReader* Plot3D0 = vtkPLOT3DReader::New();
Plot3D0->SetFileName(fname1);
Plot3D0->SetQFileName (fname2);
Plot3D0->SetBinaryFile(1);
Plot3D0->SetMultiGrid(0);
Plot3D0->SetHasByteCount(0);
Plot3D0->SetIBlanking(0);
Plot3D0->SetTwoDimensionalGeometry(0);
Plot3D0->SetForceRead(0);
Plot3D0->SetByteOrder(0);
delete[] fname1;
delete[] fname2;
vtkStructuredGridOutlineFilter* Geometry5 =
vtkStructuredGridOutlineFilter::New();
Geometry5->SetInputConnection(Plot3D0->GetOutputPort());
vtkPolyDataMapper* Mapper5 = vtkPolyDataMapper::New();
Mapper5->SetInputConnection(Geometry5->GetOutputPort());
Mapper5->SetImmediateModeRendering(1);
Mapper5->UseLookupTableScalarRangeOn();
Mapper5->SetScalarVisibility(0);
Mapper5->SetScalarModeToDefault();
vtkActor* Actor5 = vtkActor::New();
Actor5->SetMapper(Mapper5);
vtkProperty* prop = Actor5->GetProperty();
prop->SetRepresentationToSurface();
prop->SetInterpolationToGouraud();
prop->SetAmbient(0.15);
prop->SetDiffuse(0.85);
prop->SetSpecular(0.1);
prop->SetSpecularPower(100);
prop->SetSpecularColor(1, 1, 1);
prop->SetColor(1, 1, 1);
ren->AddActor(Actor5);
vtkLineSource* LineSourceWidget0 = vtkLineSource::New();
LineSourceWidget0->SetPoint1(13.9548, -0.47371, 31.7642);
LineSourceWidget0->SetPoint2(6.3766, -0.5886, 26.6274);
LineSourceWidget0->SetResolution(20);
vtkDistributedStreamTracer* Stream0 = vtkDistributedStreamTracer::New();;
Stream0->SetInputConnection(Plot3D0->GetOutputPort());
Stream0->SetSource(LineSourceWidget0->GetOutput());
Stream0->SetMaximumPropagationUnit(0);
Stream0->SetMaximumPropagation(0.05);
Stream0->SetInitialIntegrationStepUnit(2);
Stream0->SetInitialIntegrationStep(0.5);
Stream0->SetIntegrationDirection(2);
Stream0->SetIntegratorType(0);
Stream0->SetMaximumNumberOfSteps(2000);
Stream0->SetTerminalSpeed(1e-12);
vtkGeometryFilter* Geometry6 = vtkGeometryFilter::New();;
Geometry6->SetInputConnection(Stream0->GetOutputPort());
vtkLookupTable* LookupTable1 = vtkLookupTable::New();
LookupTable1->SetNumberOfTableValues(256);
LookupTable1->SetHueRange(0, 0.66667);
LookupTable1->SetSaturationRange(1, 1);
LookupTable1->SetValueRange(1, 1);
LookupTable1->SetTableRange(0.197813, 0.710419);
LookupTable1->SetVectorComponent(0);
LookupTable1->Build();
vtkPolyDataMapper* Mapper6 = vtkPolyDataMapper::New();
Mapper6->SetInputConnection(Geometry6->GetOutputPort());
Mapper6->SetImmediateModeRendering(1);
Mapper6->UseLookupTableScalarRangeOn();
Mapper6->SetScalarVisibility(1);
Mapper6->SetScalarModeToUsePointFieldData();
Mapper6->SelectColorArray("Density");
Mapper6->SetLookupTable(LookupTable1);
vtkActor* Actor6 = vtkActor::New();
Actor6->SetMapper(Mapper6);
prop = Actor6->GetProperty();
prop->SetRepresentationToSurface();
prop->SetInterpolationToGouraud();
prop->SetAmbient(0.15);
prop->SetDiffuse(0.85);
prop->SetSpecular(0);
prop->SetSpecularPower(1);
prop->SetSpecularColor(1, 1, 1);
ren->AddActor(Actor6);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
vtkCompositeRenderManager* compManager = vtkCompositeRenderManager::New();
compManager->SetRenderWindow(renWin);
compManager->SetController(controller);
compManager->InitializePieces();
if (myId)
{
compManager->InitializeRMIs();
controller->ProcessRMIs();
controller->Receive(args->retVal, 1, 0, 33);
}
else
{
renWin->Render();
*(args->retVal) =
vtkRegressionTester::Test(args->argc, args->argv, renWin, 10);
for (int i = 1; i < numProcs; i++)
{
controller->TriggerRMI(i, vtkMultiProcessController::BREAK_RMI_TAG);
controller->Send(args->retVal, 1, i, 33);
}
}
if ( *(args->retVal) == vtkRegressionTester::DO_INTERACTOR)
{
compManager->StartInteractor();
}
renWin->Delete();
ren->Delete();
iren->Delete();
compManager->Delete();
Plot3D0->Delete();
Stream0->Delete();
LookupTable1->Delete();
LineSourceWidget0->Delete();
Geometry5->Delete();
Geometry6->Delete();
Actor5->Delete();
Actor6->Delete();
Mapper5->Delete();
Mapper6->Delete();
}
int main( int argc, char* argv[] )
{
vtkMPIController* contr = vtkMPIController::New();
contr->Initialize(&argc, &argv);
contr->CreateOutputWindow();
vtkParallelFactory* pf = vtkParallelFactory::New();
vtkObjectFactory::RegisterFactory(pf);
pf->Delete();
// When using MPI, the number of processes is determined
// by the external program which launches this application.
// However, when using threads, we need to set it ourselves.
if (contr->IsA("vtkThreadedController"))
{
// Set the number of processes to 2 for this example.
contr->SetNumberOfProcesses(2);
}
// Added for regression test.
// ----------------------------------------------
int retVal;
PStreamArgs_tmp args;
args.retVal = &retVal;
args.argc = argc;
args.argv = argv;
// ----------------------------------------------
contr->SetSingleMethod(MyMain, &args);
contr->SingleMethodExecute();
contr->Finalize();
contr->Delete();
return !retVal;
}