[vtkusers] probe of multiblock PLOT3D data
Hamilton Woods
ghw at accutrol.com
Fri Oct 14 16:18:55 EDT 2011
I'm not sure how this mailing list works. There were several
"responses" to my earlier post of this message, none related
to my question.
I basically want to know how to probe points for data at locations
that are in other than block 1 of a PLOT3D file.
I have a pair of PLOT3D files (.xyz and .q) that has more than
one block of data. Paraview displays the data nicely. I can
even do a PlotOverLine through block 1 and block 2.
When I try to probe data using VTK in C++ the data in block
2 are missing. If I delete the block 1 coordinates and data
and re-fire, I am able to probe data.
Is there a trick to probing data in multiblock PLOT3D data
that is necessary in VTK that is not necessary in Paraview?
Here is a code snippet:
vtkPLOT3DReader* reader = vtkPLOT3DReader::New();
reader->SetBinaryFile(0);
reader->SetMultiGrid(1);
reader->SetXYZFileName(geometryFile.c_str());
reader->SetQFileName(qFile.c_str());
reader->SetScalarFunctionNumber(100);
reader->Update();
vtkSmartPointer<vtkPolyData> probePolyData =
vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkProbeFilter> probe =
vtkSmartPointer<vtkProbeFilter>::New();
//probe->SetSource(image);
probe->SetSourceConnection(reader->GetOutputPort());
probePoints = vtkSmartPointer<vtkPoints>::New();
for (iLine=0; iLine<nLines; ++iLine)
{
probePoints->Initialize();
// Add some points to interpolate
fracx = (StopPoints[iLine].x-StartPoints[iLine].x)/double(NPoints-1);
fracy = (StopPoints[iLine].y-StartPoints[iLine].y)/double(NPoints-1);
fracz = (StopPoints[iLine].z-StartPoints[iLine].z)/double(NPoints-1);
for (iPoint=0; iPoint<NPoints; ++iPoint)
{
di = double(iPoint);
x = StartPoints[iLine].x + di*fracx;
y = StartPoints[iLine].y + di*fracy;
z = StartPoints[iLine].z + di*fracz;
probePoints->InsertNextPoint(x, y, z);
}
probePolyData->Initialize();
probePolyData->SetPoints(probePoints);
probe->SetInput(probePolyData);
probe->Update();
vtkDataArray* data = probe->GetOutput()->GetPointData()->GetScalars();
vtkDoubleArray* doubleData = vtkDoubleArray::SafeDownCast (data);
NumDataPoints = data->GetDataSize();
integratedDensity = 0.0;
//outData << iLine << endl;
ds = sqrt(pow(fracx,2)+pow(fracy,2)+pow(fracz,2));
s = sqrt(pow(StartPoints[iLine].x-StopPoints[iLine].x,2)
+pow(StartPoints[iLine].y-StopPoints[iLine].y,2)
+pow(StartPoints[iLine].z-StopPoints[iLine].z,2));
data->GetTuple(0, val);
rhom1 = val[0];
for(int i = 1; i < NumDataPoints; ++i)
{
data->GetTuple(i, val);
// cout << "Interpolation using ProbeFilter ";
// cout << "doubleData->GetValue(" << i << "): " << val[0] << endl;
//outData << i << "\t" << val[0] << endl;
rho = val[0];
integratedDensity += (rho+rhom1)*ds/2.0;
rhom1 = rho;
}
}
Thanks for your help,
Hamilton Woods
More information about the vtkusers
mailing list