[vtkusers] interpolation
tony hakki
tony2007vtk at yahoo.com
Tue Mar 20 14:24:12 EDT 2007
hi all;
I have some specific coordinates(x,y,z). and 3D image which extension is raw. I would like to get these coordinates scalars (grey level value) by interpolating. I found out an example which seems what I would like to do. but in the following code I couldn't understand first part of it where I show with red. How ca i set the variable of output,input ? I could not understand the method of using this->........ Could someone help me on that confusing situation? I really need it much!
Thanks
here is example code:
void vtkCellDataToPointData::Execute()
{
vtkIdType cellId, ptId;
vtkIdType numCells, numPts;
vtkDataSet *input= this->GetInput();
vtkDataSet *output= this->GetOutput();
vtkCellData *inPD=input->GetCellData();
vtkPointData *outPD=output->GetPointData();
vtkIdList *cellIds;
float weight, *weights=new float[VTK_MAX_CELLS_PER_POINT];
vtkDebugMacro(<<"Mapping cell data to point data");
// First, copy the input to the output as a starting point
output->CopyStructure( input );
cellIds = vtkIdList::New();
cellIds->Allocate(VTK_MAX_CELLS_PER_POINT);
if ( (numPts=input->GetNumberOfPoints()) < 1 )
{
vtkErrorMacro(<<"No input point data!");
cellIds->Delete();
return;
}
// Pass the point data first. The fields and attributes
// which also exist in the cell data of the input will
// be over-written during CopyAllocate
output->GetPointData()->PassData(input->GetPointData());
// notice that inPD and outPD are vtkCellData and vtkPointData; respectively.
// It's weird, but it works.
outPD->CopyAllocate(inPD,numPts);
int abort=0;
vtkIdType progressInterval=numPts/20 + 1;
for (ptId=0; ptId < numPts && !abort; ptId++)
{
if ( !(ptId % progressInterval) )
{
this->UpdateProgress((float)ptId/numPts);
abort = GetAbortExecute();
}
input->GetPointCells(ptId, cellIds);
numCells = cellIds->GetNumberOfIds();
if ( numCells > 0 )
{
weight = 1.0 / numCells;
for (cellId=0; cellId < numCells; cellId++)
{
weights[cellId] = weight;
}
outPD->InterpolatePoint(inPD, ptId, cellIds, weights);
}
else
{
outPD->NullPoint(ptId);
}
}
if ( this->PassCellData )
{
output->GetCellData()->PassData(input->GetCellData());
}
cellIds->Delete();
delete [] weights;
}
____________________________________________________________________________________
Finding fabulous fares is fun.
Let Yahoo! FareChase search your favorite travel sites to find flight and hotel bargains.
http://farechase.yahoo.com/promo-generic-14795097
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070320/9e446b39/attachment.htm>
More information about the vtkusers
mailing list