Hi Andrew,

I see a couple of things in your script. First is normals and scalars are data set attributes. so you need to access them through one of those classes, ex vtkPointData.

Correct me if I'm wrong but, although in VTK 6 you generally don't need to shallow copy the input to filters I think it's still probably a bad practice to modify the arrays in the input dataset.

I think what you want to do is copy the geometric structure of the input and then make a deep copy of normals and scalars arrays, and rename the copys. Copy structure rather than shallow copy since with a shallow copy you'd still end up modifying the arrays in the input dataset.

Finally scalars and normals may not be present. I know you'd probably handle that in your final script, ;-)

given all that, here's what I came up with:

   def copyAndNameArray(da, name):
      if da is not None:
        outda = da.NewInstance()
        outda.DeepCopy(da)
        outda.SetName(name)
        return outda
      else:
        return None

   pdi = self.GetPolyDataInput()
   pdo = self.GetPolyDataOutput()
   pdo.CopyStructure(pdi)

   pdo.GetPointData().SetNormals( \
      copyAndNameArray(pdi.GetPointData().GetNormals(), 'Normals'))

   pdo.GetPointData().SetScalars( \
      copyAndNameArray(pdi.GetPointData().GetScalars(), 'Scalars'))

   print 'Normals=%s'%(str(pdo.GetPointData().GetNormals()))
   print 'Scalars=%s'%(str(pdo.GetPointData().GetScalars()))

Curious to hear from other developers as to if I'm on target about not modifying arrays in the input or if this is overkill given the new VTK 6 pipeline.

Burlen

On 05/30/2014 07:29 PM, Andrew Maclean wrote:
I have a source object that produces a polydata object. Unfortunately the normals and scalars are unnamed. How do I access these and name them in ParaView.
I thought something like this may work in a Programmable Filter:

pdi = self.GetPolyDataInput()


pdo = self.GetPolyDataOutput()


pdi.GetNormals().SetName('Normals')


pdi.GetScalars().SetName('Scalars')


pdo = pdi


However, I can't see the array names.

This sort of thing works Ok in a Python Script:
    # Name the arrays
randomHillsSource.GetOutput().GetPointData().GetNormals().SetName('Normals')
randomHillsSource.GetOutput().GetPointData().GetScalars().SetName('Scalars')
#     pd = randomHillsSource.GetOutput().GetPointData()
#     print pd

Is it possible to do this on ParaView?

Thanks in advance for any help.

Andrew

--
___________________________________________
Andrew J. P. Maclean

___________________________________________


_______________________________________________
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

Reply via email to