Burlen, I assume by dual grid you mean creating two vtkImageData objects, which both contain pointers (properly registered and reference counted) to the same vtkDataArray object, but in one case, as the Scalars for the CellData, and in the other case as the Scalars for the PointsData. This might work, although it does seem unnecessarily complicated for "storing voxels as volume elements" which would seem to be a common usage. And I'm not sure it answers all the questions such as, how would you write the data to a file? If you want it accurately rendered in ParaView, it needs to be stored with CellData Scalars, but that could be problematic if you (or someone else) wants to read it and process it with VTK again.
Also there seems to be no guarantee that vtkImageData won't clobber your CellData Scalars when you're not looking. Consider the following method copied from vtkImageData.cxx . I have no idea when this might be called, but notice that PointData Scalars will survive it, while CellData Scalars won't. //---------------------------------------------------------------------------- // Graphics filters reallocate every execute. Image filters try to reuse // the scalars. void vtkImageData::PrepareForNewData() { // free everything but the scalars vtkDataArray *scalars = this->GetPointData()->GetScalars(); if (scalars) { scalars->Register(this); } this->Initialize(); if (scalars) { this->GetPointData()->SetScalars(scalars); scalars->UnRegister(this); } } On 2010-06-01, at 2:04 PM, burlen wrote: > Hi Eric, >> Because now of course our scalar image data needs to be associated with >> cells, not to points. But vtkImageData in many cases only deals with the >> scalar data attached to the PointData. > Could you use the concept of a dual grid? In other words make your vis grid > node centered with the nodes located on the cell centers of your > computational grid? Your arrays end up in PointData that way with no > interpolations required. > > Burlen > > Eric Nodwell wrote: >> Francois, >> >> Thank you for the reply. >> >> Using 2x2x2 points for one voxel is fine in principle. The difficulty is, >> you can't really conveniently (as far as I can tell) use a vtkImageData >> object for this purpose. Because now of course our scalar image data needs >> to be associated with cells, not to points. But vtkImageData in many cases >> only deals with the scalar data attached to the PointData. For example, >> this is from vtkImageData.cxx : >> >> //---------------------------------------------------------------------------- >> // This method returns a pointer to the origin of the vtkImageData. >> void *vtkImageData::GetScalarPointer() >> { >> if (this->PointData->GetScalars() == NULL) >> { >> vtkDebugMacro("Allocating scalars in ImageData"); >> this->AllocateScalars(); >> } >> return this->PointData->GetScalars()->GetVoidPointer(0); >> } >> >> Notice that is method just grabs the Scalars from PointData, and other >> methods of vtkImageData are similar, so if you want to store the scalars in >> CellData, which is necessary represent voxels, it is quite difficult. >> >> Eric >> >> >> >>> Date: Tue, 1 Jun 2010 13:26:15 -0400 >>> From: Francois Bertel <francois.ber...@kitware.com> >>> Subject: Re: [Paraview] Finite-size voxels and Point vs. Cell Centered >>> Image Data >>> To: paraview@paraview.org >>> Message-ID: >>> <aanlktikz6uw4tofeudmdu0xocwc_1b4_0rs9n_z9s...@mail.gmail.com> >>> Content-Type: text/plain; charset=ISO-8859-1 >>> >>> Hello, >>> >>> in vtkImageData, "Dimension" is the number of points along each axis, >>> not the number of cells along each axis. If you want one voxel, then >>> you need 2x2x2 points. >>> Note that using GetDimension() is OK but SetDimension() is only here >>> for backward compatibility, use SetExtent() instead: >>> >>> image->SetExtent(0,1,0,1,0,1); >>> >> >> _______________________________________________ >> Powered by www.kitware.com >> >> Visit other Kitware open-source projects at >> http://www.kitware.com/opensource/opensource.html >> >> Please keep messages on-topic and check the ParaView Wiki at: >> http://paraview.org/Wiki/ParaView >> >> Follow this link to subscribe/unsubscribe: >> http://www.paraview.org/mailman/listinfo/paraview >> > > _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Follow this link to subscribe/unsubscribe: http://www.paraview.org/mailman/listinfo/paraview