[Paraview] Using vtkIceTRenderManager
Mario
mario.orefice at gmail.com
Tue Dec 5 05:52:35 EST 2006
Hi Kenneth,
thank you for your answering,
I tried vtkIceTRenderManager with the vtk DistributedData test...
It gives me a run time error and when I debug it crashes at the
cam->Register(this); instruction in vtkRenderer.cxx, SetActiveCamera method...
what's wrong?!?
Here's the code:
struct DDArgs_tmp
{
int* retVal;
int argc;
char** argv;
};
static void Run(vtkMultiProcessController *contr, void *arg)
{
int i, go;
DDArgs_tmp *args = reinterpret_cast<DDArgs_tmp *>(arg);
vtkIceTRenderManager *prm = vtkIceTRenderManager::New();
// READER
vtkDataSetReader *dsr = vtkDataSetReader::New();
vtkUnstructuredGrid *ug = vtkUnstructuredGrid::New();
vtkDataSet *ds = NULL;
if (Me == 0)
{
char* fname = "c:/vtk/vtkdata/Data/tetraMesh.vtk";
dsr->SetFileName(fname);
ds = dsr->GetOutput();
dsr->Update();
go = 1;
if ((ds == NULL) || (ds->GetNumberOfCells() == 0))
{
if (ds) cout << "Failure: input file has no cells" << endl;
go = 0;
}
}
else
{
ds = (vtkDataSet *)ug;
}
vtkMPICommunicator *comm =
vtkMPICommunicator::SafeDownCast(contr->GetCommunicator());
comm->Broadcast(&go, 1, 0);
if (!go){
dsr->Delete();
ug->Delete();
prm->Delete();
return;
}
// DATA DISTRIBUTION FILTER
vtkDistributedDataFilter *dd = vtkDistributedDataFilter::New();
dd->SetInput(ds);
dd->SetController(contr);
dd->SetBoundaryModeToSplitBoundaryCells(); // clipping
dd->UseMinimalMemoryOff();
// COLOR BY PROCESS NUMBER
vtkPieceScalars *ps = vtkPieceScalars::New();
ps->SetInputConnection(dd->GetOutputPort());
ps->SetScalarModeToCellData();
// MORE FILTERING - this will request ghost cells
vtkDataSetSurfaceFilter *dss = vtkDataSetSurfaceFilter::New();
dss->SetInputConnection(ps->GetOutputPort());
// COMPOSITE RENDER
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
mapper->SetInputConnection(dss->GetOutputPort());
mapper->SetColorModeToMapScalars();
mapper->SetScalarModeToUseCellFieldData();
mapper->SelectColorArray("Piece");
mapper->SetScalarRange(0, NumProcs-1);
vtkActor *actor = vtkActor::New();
actor->SetMapper(mapper);
//vtkRenderer *renderer = prm->MakeRenderer();
vtkIceTRenderer *renderer = vtkIceTRenderer::New();
renderer->AddActor(actor);
vtkRenderWindow *renWin = prm->MakeRenderWindow();
renWin->AddRenderer(renderer);
renderer->SetBackground(0,0,0);
renWin->SetSize(300,300);
renWin->SetPosition(0, 360*Me);
prm->SetRenderWindow(renWin);
prm->SetController(contr);
prm->InitializeOffScreen(); // Mesa GL only
// We must update the whole pipeline here, otherwise node 0
// goes into GetActiveCamera which updates the pipeline, putting
// it into vtkDistributedDataFilter::Execute() which then hangs.
// If it executes here, dd will be up-to-date won't have to
// execute in GetActiveCamera.
mapper->SetPiece(Me);
mapper->SetNumberOfPieces(NumProcs);
mapper->Update();
if (Me == 0)
{
renderer->ResetCamera();
vtkCamera *camera = renderer->GetActiveCamera();
camera->UpdateViewport(renderer);
camera->ParallelProjectionOn();
camera->SetParallelScale(16);
renWin->Render();
renWin->Render();
*(args->retVal) = vtkRegressionTester::Test(args->argc,
args->argv, renWin, 10);
for (i=1; i < NumProcs; i++)
{
contr->Send(args->retVal, 1, i, 0x11);
}
prm->StopServices();
}
else
{
prm->StartServices();
contr->Receive(args->retVal, 1, 0, 0x11);
}
if (*(args->retVal) == vtkTesting::PASSED)
{
// Now try using the memory conserving *Lean methods. The
// image produced should be identical
dd->UseMinimalMemoryOn();
mapper->SetPiece(Me);
mapper->SetNumberOfPieces(NumProcs);
mapper->Update();
if (Me == 0)
{
renderer->ResetCamera();
vtkCamera *camera = renderer->GetActiveCamera();
camera->UpdateViewport(renderer);
camera->ParallelProjectionOn();
camera->SetParallelScale(16);
renWin->Render();
renWin->Render();
*(args->retVal) = vtkRegressionTester::Test(args->argc,
args->argv, renWin, 10);
for (i=1; i < NumProcs; i++)
{
contr->Send(args->retVal, 1, i, 0x11);
}
prm->StopServices();
}
else
{
prm->StartServices();
contr->Receive(args->retVal, 1, 0, 0x11);
}
}
// CLEAN UP
mapper->Delete();
actor->Delete();
renderer->Delete();
renWin->Delete();
dd->Delete();
dsr->Delete();
ug->Delete();
ps->Delete();
dss->Delete();
prm->Delete();
}
int main(int argc, char **argv)
{
int retVal = 1;
vtkMPIController *contr = vtkMPIController::New();
contr->Initialize(&argc, &argv);
vtkMultiProcessController::SetGlobalController(contr);
NumProcs = contr->GetNumberOfProcesses();
Me = contr->GetLocalProcessId();
if (NumProcs != 2)
{
if (Me == 0)
{
cout << "DistributedData test requires 2 processes" << endl;
}
contr->Delete();
return retVal;
}
if (!contr->IsA("vtkMPIController"))
{
if (Me == 0)
{
cout << "DistributedData test requires MPI" << endl;
}
contr->Delete();
return retVal; // is this the right error val? TODO
}
// ----------------------------------------------
DDArgs_tmp args;
args.retVal = &retVal;
args.argc = argc;
args.argv = argv;
// ---------------------------------------------
contr->SetSingleMethod(Run, &args);
contr->SingleMethodExecute();
contr->Finalize();
contr->Delete();
int inputval;
std::cin>> inputval;
return !retVal;
}
I'm sorry about my bad english...
Thank you
Mario
2006/11/29, Moreland, Kenneth <kmorel at sandia.gov>:
>
>
>
> Mario,
>
> vtkIceTRenderModule was originally designed to be a drop in replacement for
> any vtkParallelRenderManager (vtkCompositeRenderManager included) assuming
> you correctly use vtkIceTRenderer in place vtkRenderer. That said, there
> have been many ParaView-specific changes made to these classes.
>
> So my advice: try it. It should work if you are not doing anything to
> fancy. If not, you'll have to inquire about our money back guarantee.
>
> If it doesn't work, give us a holler. There may be an easy fix you can
> perform. If it does work, let the future users know.
>
> -Ken
>
>
> -----Original Message-----
> From: paraview-bounces+kmorel=sandia.gov at paraview.org on behalf of Mario
> Sent: Wed 11/29/2006 8:37 AM
> To: paraview at paraview.org
> Subject: Re: [Paraview] Using vtkIceTRenderManager
>
> 2006/11/29, Mario <mario.orefice at gmail.com>:
> > Hi,
> > I want to use vtkIceTRenderManager and vtkIceTRenderer from Paraview
> > in my vtk application, but I have a link problem:
> >
> > unresolved external symbol"public: static class vtkIceTRenderManager *
> > __cdecl vtkIceTRenderManager::New(void)"
> > (?New at vtkIceTRenderManager@@SAPAV1 at XZ)
> >
> > I'm a newbie, how can I resolve that? It's a cmake configuration problem?
>
> Problem solved! I had to set advanced options in cmake and turn
> paraview_use_icet on...
> Now I'm waiting for your suggestions here:
>
> > I'm just modifying vtk's parallel processing examples, using
> > vtkIceTRenderManager instead of vtkCompositeRenderManager, will it
> > work?
> >
> > There are some other examples where i can understand using of
> > vtkIceTRenderManager?
> >
> > Thank you so much for helping
> >
> > Mario
> >
> _______________________________________________
> ParaView mailing list
> ParaView at paraview.org
> http://www.paraview.org/mailman/listinfo/paraview
>
>
More information about the ParaView
mailing list