[vtkusers] Fwd: Volume Rendering with multiple-array data

Mathieu Malaterre mathieu.malaterre at kitware.com
Wed Feb 23 13:51:16 EST 2005


Randall,

	I tried reproducing your bug with blow.vtk (part of VTKData) with no 
luck. If you were able to reproduce the bug with blow.vtk I could look 
into it, or just send my your dataset.

	BTW you script redeclare twice:

 >     vtkGaussianSplatter *filter = vtkGaussianSplatter::New();
 >     filter->SetNullValue(0.0);
 >     filter->SetInput(mask->GetOutput());
 >     filter->Update();
 >     printf("Filter ran\n");
 >
 >     vtkImageShiftScale *scaled = vtkImageShiftScale::New();
 >     scaled->SetInput(filter->GetOutput());
 >     scaled->SetScale(255.0);
 >     scaled->SetOutputScalarTypeToUnsignedChar();
 >     scaled->Update();
 >     printf("Data Scaled ran\n");
 >     printf("* Scaled data arrays:\n");
 >     vtkPointData *dataptr = scaled->GetOutput()->GetPointData();
 >     for(n=0; n< dataptr->GetNumberOfArrays(); n++) {
 >         printf("*   [%i] \"%s\"\n", n, dataptr->GetArrayName(n));
 >     }
 >     scaled->GetOutput()->GetPointData()->GetArray(0)->GetRange(range,0);
 >     printf("* Range: %f - %f\n", range[0], range[1]);

	Is this a copy/paste mistake ?

Thanks,
Mathieu



Randall Hand wrote:
> Still looking for any help with this... I've gotten it to work witht
> he vtkVolumeTextureMapper2D just fine, but simply replacing that with
> the vtkVolumeRayCastMapper calls results in all kinds of weird
> behaviour.
> 
> Sometimes it exits with a segfault/core dump, but no error.  
> 
> Sometimes it runs to completion, but the volume rendering doesn't work
> (I get the text & outline, but no data).
> 
> Most commonly I get anywhere from 1 to 3 messages like this:
> ERROR: In /viz/home/rhand/src/ezViz/Utilities/VTK/Filtering/vtkExecutive.cxx,
> line 519
> vtkStreamingDemandDrivenPipeline (0x1d6038d0): Non-forwarded requests
> are not yet implemented.
> 
> And sometimes I get garbage like this: (looks like multiple errors interlaced)
> ERROR: In /viz/home/rhand/src/ezViz/Utilities/VTK/FiltEEeRRrRRiOOnRRg::/
>  vIItnnk  E//xvveiiczzu//thhioovmmeee.//crrxhhxaa,nn ddl//issnrrecc
> //5ee1zz9VV
> iivzzt//kUUStttiirlleiiattmiiieenssg//DVVeTTmKKa//nFFdiiDllrttieevrreiinnnPggi//pvvettlkkiEEnxxeee
> cc(uu0ttxii1vv0ee9..7cc1xxdxxb,,8  )ll:ii nnNeeo  n55-11f99o
> (truncated by me, you get the point)
> 
> The messages seem to occur after the ->Render() call, and during the
> part where I write it to disk.  (with a vtkTIFFWriter).  Sometimes it
> segfaults right after the error messages, and sometimes it just hangs
> indefinately.  Once or twice it's even run to completion after the
> error messages, but the Volume Rendering never appears.  I'm using
> OffScreen rendering with MangledMesa.
> 
> Please? Anyone?
> 
> ---------- Forwarded message ----------
> From: Randall Hand <randall.hand at gmail.com>
> Date: Wed, 16 Feb 2005 11:29:16 -0600
> Subject: Volume Rendering with multiple-array data
> To: vtkusers at vtk.org
> 
> 
> I have a VTK Dataset with with multiple data values per point.  Each
> data point in my rectilinear grid has both a scalar (fractional
> occupancy) and a vector (flow velocity).  I want to generate a volume
> rendering from this dataset of the scalar field, using the RayCast
> volume code.
> 
> How do I get from the vtkDataSet that vtkDataSetReader outputs, to the
> vtkImageData that the volume rendering routines want?  Currently I'm
> using a GaussianSPlatter to convert to an imageData, & a
> vtkImageShiftScale to convert from the 0-1float to a 0-255unsigned
> char.
> 
> Here's an exerpt from my code:
> 
> ***BEGIN***
> 
>     // Load model
>     vtkDataSetReader *model = vtkDataSetReader::New();
>     model->SetFileName(filename);
>     model->Update();
>     printf("File loaded\n");
>     model->GetOutput()->GetPointData()->GetArray("Fraction")->GetRange(range,0);
>     printf("* Range: %f - %f\n", range[0], range[1]);
> 
>     vtkMaskPoints *mask = vtkMaskPoints::New();
>     mask->SetInput(model->GetOutput());
>     mask->RandomModeOn();
>     mask->SetMaximumNumberOfPoints(10);
>     mask->Update();
>     printf("Data Masked\n");
>     mask->GetOutput()->GetPointData()->GetArray("Fraction")->GetRange(range,0);
>     printf("* Range: %f - %f\n", range[0], range[1]);
> 
>     vtkGaussianSplatter *filter = vtkGaussianSplatter::New();
>     filter->SetNullValue(0.0);
>     filter->SetInput(mask->GetOutput());
>     filter->Update();
>     printf("Filter ran\n");
> 
>     vtkImageShiftScale *scaled = vtkImageShiftScale::New();
>     scaled->SetInput(filter->GetOutput());
>     scaled->SetScale(255.0);
>     scaled->SetOutputScalarTypeToUnsignedChar();
>     scaled->Update();
>     printf("Data Scaled ran\n");
>     printf("* Scaled data arrays:\n");
>     vtkPointData *dataptr = scaled->GetOutput()->GetPointData();
>     for(n=0; n< dataptr->GetNumberOfArrays(); n++) {
>         printf("*   [%i] \"%s\"\n", n, dataptr->GetArrayName(n));
>     }
>     scaled->GetOutput()->GetPointData()->GetArray(0)->GetRange(range,0);
>     printf("* Range: %f - %f\n", range[0], range[1]);
>     vtkGaussianSplatter *filter = vtkGaussianSplatter::New();
>     filter->SetNullValue(0.0);
>     filter->SetInput(mask->GetOutput());
>     filter->Update();
>     printf("Filter ran\n");
> 
>     vtkImageShiftScale *scaled = vtkImageShiftScale::New();
>     scaled->SetInput(filter->GetOutput());
>     scaled->SetScale(255.0);
>     scaled->SetOutputScalarTypeToUnsignedChar();
>     scaled->Update();
>     printf("Data Scaled ran\n");
>     printf("* Scaled data arrays:\n");
>     vtkPointData *dataptr = scaled->GetOutput()->GetPointData();
>     for(n=0; n< dataptr->GetNumberOfArrays(); n++) {
>         printf("*   [%i] \"%s\"\n", n, dataptr->GetArrayName(n));
>     }
>     scaled->GetOutput()->GetPointData()->GetArray(0)->GetRange(range,0);
>     printf("* Range: %f - %f\n", range[0], range[1]);
> 
>     vtkVolumeRayCastCompositeFunction *compFunc =
>                 vtkVolumeRayCastCompositeFunction::New();
>     compFunc->SetCompositeMethodToInterpolateFirst();
> 
>     vtkPiecewiseFunction *xf_Opacity = vtkPiecewiseFunction::New();
>     xf_Opacity->AddPoint(0,0.0);
>     xf_Opacity->AddPoint(255,1.0);
> 
>     vtkColorTransferFunction *xf_Color = vtkColorTransferFunction::New();
>     xf_Color->AddRGBPoint(0, 0, 0, 1);
>     xf_Color->AddRGBPoint(255, 0, 0, 1);
> 
>     vtkVolumeProperty *volProp = vtkVolumeProperty::New();
>     volProp->SetColor(xf_Color);
>     volProp->SetScalarOpacity(xf_Opacity);
>     volProp->SetInterpolationTypeToLinear();
> 
>     modelMapper = vtkVolumeRayCastMapper::New();
>     modelMapper->SetInput(scaled->GetOutput());
>     modelMapper->SetVolumeRayCastFunction(compFunc);
> //  modelMapper->Update();
> 
>     printf("Mapper updated\n");
>     vtkVolume *volume = vtkVolume::New();
>     volume->SetMapper(modelMapper);
>     volume->SetProperty(volProp);
> ***END***
> 
> When I run this, tho, I get the following output:
> =============== BEGIN OUTPUT ==============
> Loading file test.vtk...
> File loaded
> * Range: 0.000000 - 1.000000
> Data Masked
> * Range: 0.000000 - 1.000000
> Filter ran
> Data Scaled ran
> * Scaled data arrays:
> *   [0] "(null)"
> * Range: 0.000000 - 253.000000
> Mapper updated
> ERROR: In /viz/home/rhand/src/ezViz/Utilities/VTK/Filtering/vtkExecutive.cxx,
> line 519
> vtkStreamingDemandDrivenPipeline (0x109843b8): Non-forwarded requests
> are not yet implemented.
> 
> Segmentation fault (core dumped)
> ================ END OUTPUT ============
> 
> Any ideas?
> --
> Randall Hand
> http://www.yeraze.com
> 
> 




More information about the vtkusers mailing list