[Paraview] Naming an existing data array.

Burlen Loring bloring at lbl.gov
Sat May 31 20:18:23 EDT 2014


Great! I just experimented with your plugin, I have to say that's pretty 
cool!

On 05/31/2014 04:47 PM, Andrew Maclean wrote:
> Burlen,
>    Thankyou so much for your quick response. The script works fine. I 
> am a bit of a ParaView novice when it comes to scripting so thanks for 
> the help!
>
> This problem arose because I was looking at the VTK Parametric 
> Functions and wondering why they looked so terrible in ParaView and 
> yet there were no issues displaying them in VTK.
> So I wrote an XML plugin and discovered that I couldn't access the 
> scalars or normals. In the case of normals, for non-orientable 
> surfaces the normals become really important and they are generated 
> with the surface, so you need access the data. Paraview can do this if 
> it knows the name of the dataset.
>
> It turns out that when I wrote vtkParametricFunctionSource (way back 
> in 2003 I think!) I never named the normal or scalar arrays. So I will 
> fix this, modernise the code and update the documentation in this 
> coming week.
>
> If you are interested, here is a first attempt at the xml plugin. With 
> your script we get some beautiful results in Paraview. Of course I 
> need to add in the parameters for all the other surfaces. I have only 
> done ParametricConicSpiral and ParametricMobius.
>
> First: Use Manage Plugins to import the xml script.
> Then:
> 1) Find ParametricSource in Sources and select a function e.g Mobius, 
> (Minimum V = -0.2, Maximum V = 0.2) specify a scalar mode and you will 
> get a very ordinary mobius strip.
> 2) Apply your script as a programmable filter and select the coloring 
> to be scalars and you get a beautifully shaded surface.
> 3) Then apply the Glyph filter using the Normals as vectors and you 
> get a nice display of the vectors on the surface. Use a scale of 
> (-1,-1,-1) if you want to invert the normals.
>
> You get some beautiful images.
>
> Regards
>    Andrew
>
>
>
> On Sun, Jun 1, 2014 at 3:03 AM, Burlen Loring <bloring at lbl.gov 
> <mailto:bloring at lbl.gov>> wrote:
>
>     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 bywww.kitware.com  <http://www.kitware.com>
>>
>>     Visit other Kitware open-source projects athttp://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
>
>
>
>
> -- 
> ___________________________________________
> Andrew J. P. Maclean
>
> ___________________________________________

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20140531/d78ee244/attachment.html>


More information about the ParaView mailing list