[vtkusers] how to convert vtk polydata to dif file format

Cory Quammen cory.quammen at kitware.com
Thu Oct 8 09:32:20 EDT 2015


Sebastian,

I have found that STL files do not have normal information, though I
haven't bothered to look up whether the format prevents the inclusion of
normals.

You can use vtkPolyDataNormals to generate normals [1].

normalsGenerator = vtk.vtkPolyDataNormals()
normalsGenerator .SetInputConnection(reader.GetOutputPort())
normalsGenerator .Update()

pd = normalsGenerator.GetOutput()
...

HTH,
Cory

[1] http://www.vtk.org/doc/nightly/html/classvtkPolyDataNormals.html

On Wed, Oct 7, 2015 at 5:16 PM, Sebastian Hilbert <sebastian.hilbert at gmx.net
> wrote:

> Hi Cory,
>
> Thanks for your help. I tried your code and found that my vtk file does not
> seem to contain nomal information. I guess I need to find a way to compile
> them.
>
> Does that make sense ?
>
> Regards,
> Sebastian
>
> Am Mittwoch, 7. Oktober 2015, 10:14:44 schrieben Sie:
> > Hi Sebastian,
> >
> > Probably the easiest way to do this is to use VTK readers to read in the
> > VTK and STL files to load the surface data, then write out the DIF file
> > with standard Python ASCII file writing.
> >
> > Here's a sketch you can use to get started:
> >
> > import vtk
> >
> > reader = vtk.vtkPolyDataReader()
> > reader.SetFileName('/path/to/file.vtk')
> > reader.Update()
> >
> > pd = reader.GetOutput()
> >
> > print 'Vertices'
> > for i in xrange(pd.GetNumberOfPoints()):
> >     print pd.GetPoint(i)
> >
> > print 'Normals'
> > normals = pd.GetPointData().GetArray("Normals")
> >
> > print '---', pd.GetNumberOfPoints(), normals.GetNumberOfTuples()
> >
> > for i in xrange(normals.GetNumberOfTuples()):
> >     print normals.GetValue(3*i), normals.GetValue(3*i + 1),
> > normals.GetValue(3*i + 2)
> >
> > print 'Polygons'
> > for i in xrange(pd.GetNumberOfPolys()):
> >     cell = pd.GetCell(i)
> >     pointIds = cell.GetPointIds()
> >
> >     for j in xrange(pointIds.GetNumberOfIds()):
> >         print pointIds.GetId(j)
> >
> > HTH,
> > Cory
> >
> >
> > On Sun, Oct 4, 2015 at 8:13 PM, Sebastian Hilbert <
> sebastian.hilbert at gmx.net
> > > wrote:
> > >
> > > Hi,
> > >
> > > I am trying to convert a model of the heart which is available as
> either
> > > stl
> > > or vtk polydata to a new file format called diffusion image format
> (dif)
> > >
> > > All files are provided below. The main question is. How do I construct
> the
> > > dif
> > > file when I have only vtk and stl file available ?
> > >
> > > dif is a format used by the medical software Ensite from St. Jude and
> > > looking
> > > at the spec for the dif format it seems related to what vtk can
> provide.
> > >
> > > It seems to work with vertices , normals and polygons.
> > >
> > > I wonder if anyone has some advice on how to map data obtained from an
> stl
> > > file or vtk polydata file to data used in the dif format. How do I
> extract
> > > vertices, normals and polygons from either stl and/or vtk ?
> > >
> > > The target format is like this:
> > >  <DIFBody>
> > >
> > >     <Volumes number="1">
> > >
> > >       <Volume name="Left Atrium" color="eae0b2">
> > >
> > >         <Vertices number="3984">
> > >
> > >            32.4603  6.0825  -40.3249
> > >            13.9858  7.9016  -41.0501
> > >            16.6287  7.6514  -40.4356
> > >            30.7806  7.9503  -41.1414
> > >
> > >         </Vertices>
> > >         <Normals number="3984">
> > >
> > >            0.220882  -0.586701  -0.779098
> > >            -0.082953  -0.169572  -0.982021
> > >            0.393210  -0.647443  -0.652842
> > >            -0.106461  -0.248735  -0.962703
> > >
> > >         </Normals>
> > >         <Polygons number="7968">
> > >
> > >           3 40 8
> > >           17 10 13
> > >           41 13 42
> > >           4 36 43
> > >           </Polygons>
> > >
> > >       </Volume>
> > >
> > >     </Volumes>
> > >     <Labels number="0">
> > >     </Labels>
> > >
> > >    </DIFBody>
> > >
> > > </DIF>
> > >
> > > Looking at the vtk file the polygons are different from the ones in the
> > > xml
> > > (dif) file. Looking at the stl file (ascii) I can see some vertex lines
> > > that
> > > match a line in the vertices section of the xml (dif) file but there
> are a
> > > lot
> > > more vertex lines in the stl file then there are in the xml (dif file).
> > >
> > > I would prefer to use python if that is an option.
> > >
> > > If anyone wants to have a look here are the correspondig files
> > >
> > > vtk: https://146.0.105.21/owncloud/index.php/s/NZqGwdQQSramk1w
> > > stl: https://146.0.105.21/owncloud/index.php/s/tWv7yKttA15hdoL
> > > dif: https://146.0.105.21/owncloud/index.php/s/3R8oKRxXK2oR5DD
> > >
> > > Any help is appreciated.
> > >
> > > Sebastian
> > > _______________________________________________
> > > 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
> > >
> > > Search the list archives at: http://markmail.org/search/?q=vtkusers
> > >
> > > Follow this link to subscribe/unsubscribe:
> > > http://public.kitware.com/mailman/listinfo/vtkusers
>



-- 
Cory Quammen
R&D Engineer
Kitware, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20151008/5a68f20d/attachment.html>


More information about the vtkusers mailing list