[vtkusers] Voxelization
KS Jothybasu
jothybasu at gmail.com
Thu Mar 11 05:04:06 EST 2010
SphereSource--GetPolydata--CreateMesh--Subdivide should work I think. Let me
know, if you find any solution as I too need to do this at some point of
time.
Thanks
Jothy
On Thu, Mar 11, 2010 at 1:16 AM, Daniel Soares <adaptchart.info at gmail.com>wrote:
> Here's the code of my experiment. You can easily change it to switch
> between vtkContourFilter and vtkMarchingCubes. As I said, vtkContourFilter
> displays holes on the voxelized sphere and vtkMarchingCubes doesn't display
> anything.
>
> #include "vtkActor.h"
> #include "vtkPolyDataMapper.h"
> #include "vtkPolyData.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderer.h"
>
> #include "vtkImageData.h"
> #include "vtkVoxelModeller.h"
> #include "vtkMarchingCubes.h"
> #include "vtkContourFilter.h"
> #include "vtkSphereSource.h"
>
> int main(int argc, char *argv[]) {
>
> vtkRenderer* ren1 = vtkRenderer::New();
> ren1->SetBackground(1, 1, 1); // Background color white
>
> vtkRenderWindow* renWin = vtkRenderWindow::New();
> renWin->AddRenderer(ren1);
> vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
> iren->SetRenderWindow(renWin);
>
> vtkSphereSource* sphereModel = vtkSphereSource::New();
> sphereModel->SetThetaResolution(10);
> sphereModel->SetPhiResolution(10);
>
> vtkVoxelModeller* voxeller = vtkVoxelModeller::New();
> voxeller->SetSampleDimensions(17, 17, 17);
> voxeller->SetModelBounds(-0.5, 0.5, -0.5, 0.5, -0.5, 0.5);
> voxeller->SetInputConnection(sphereModel->GetOutputPort());
>
> vtkContourFilter* surface = vtkContourFilter::New();
> //vtkMarchingCubes* surface = vtkMarchingCubes::New();
>
> surface->SetInputConnection(voxeller->GetOutputPort());
> surface->SetNumberOfContours(1);
> surface->ComputeScalarsOn();
> surface->ComputeGradientsOn();
> surface->ComputeNormalsOn();
> surface->SetValue(0, 0.5);
>
> vtkPolyDataMapper* voxelMapper = vtkPolyDataMapper::New();
> voxelMapper->SetInputConnection(surface->GetOutputPort());
>
> vtkActor* voxelActor = vtkActor::New();
> voxelActor->SetMapper(voxelMapper);
>
> vtkPolyDataMapper* sphereMapper = vtkPolyDataMapper::New();
> sphereMapper->SetInputConnection(sphereModel->GetOutputPort());
>
> vtkActor* sphereActor = vtkActor::New();
> sphereActor->SetMapper(sphereMapper);
>
> //ren1->AddActor(sphereActor);
> ren1->AddActor(voxelActor);
>
> renWin->Render();
> iren->Start();
> }
>
>
> 2010/3/10 David Doria <daviddoria+vtk at gmail.com<daviddoria%2Bvtk at gmail.com>
> >
>
> On Wed, Mar 10, 2010 at 6:12 PM, Daniel Soares <adaptchart.info at gmail.com>wrote:
>>
>>> I suppose you are saying that I use the following pipeline:
>>>
>>> vtkSphereSource -> vtkVoxelModeller -> vtkDelaunay3D
>>>
>>> The problem is that the input of vtkDelaunay3D is a vtkPointSet and the
>>> output of vtkVoxelModeller is a vtkImageData. How could I convert a
>>> vtkImageData to a vtkPointSet?
>>>
>>> Anyway, it looks like the solution involves vtkMarchingCubes, as it's
>>> input is a vtkImageData. The problem is that vtkMarchingCubes is not
>>> displaying any result when used in my source code.
>>>
>>> Any ideas?
>>>
>>> Daniel Soares
>>>
>>>
>> To convert an ImageData to a PointSet, I don't think there is a better way
>> than to do:
>>
>> vtkPolyData* pd = vtkPolyData::New();
>> for(unsigned int i = 0; i < image->GetNumberOfPoints(); i++
>> {
>> double p[3];
>> image->GetPoint(i, p);
>> pd->InsertNextPoint(p);
>> }
>>
>> As for why marching cubes doesn't display anything - maybe you can make
>> the simplest example that will compile - make a sphere source, convert it to
>> an ImageData, then run MarchingCubes. Post this compilable code to the list
>> and we'll check it out.
>>
>> Thanks,
>>
>> David
>>
>
>
> _______________________________________________
> 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 VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100311/8ed84a50/attachment.htm>
More information about the vtkusers
mailing list