[Paraview] Python + ParaView

Nico Schlömer nico.schloemer at gmail.com
Thu Jun 16 13:00:42 EDT 2011


Okay, for everyone interested: I think I got it to work, somehow, with
the help of <http://www.itk.org/Wiki/ParaView/Users_Guide/Calculator>.

The atan2() function can be imitated in ParaView's calculator filter by

================== *snip* ==================
calc2 = pv.Calculator( ResultArrayName = 'arg(psi)' )
calc2.AttributeMode = 'point_data'
from math import pi
pi2 = str( pi/2 )
calc2.Function = 'if( psi__X>0, atan(psi__Y/psi__X),' + \
                        'if( psi__X<0,' + \
                            'if ( psi__Y<0, -%s + atan(psi__Y/psi__X),
%s + atan(psi__Y/psi__X) ),' % ( pi2, pi2 ) + \
                            'if ( psi__Y>0, %s, if( psi__Y<0, -%s, 0.0
) )' % ( pi2, pi2 ) + \
                        '))'
================== *snap* ==================

Here, psi is an array with two components which are addressed by
psi__X, psi__Y, respectively (double underscore!). The logic is taken
from <http://en.wikipedia.org/wiki/Atan2#Definition>.

Cheers,
Nico





On Thu, Jun 16, 2011 at 4:19 PM, Nico Schlömer <nico.schloemer at gmail.com> wrote:
> Progress!
> Thanks to the incredibly helpful Trance functionality, I understand
> now that something like
>
> =================== *snip* ===================
>    calc1 = pv.Calculator( ResultArrayName = '|psi|^2' )
>    calc1.AttributeMode = 'point_data'
>    calc1.Function = 'psi__X^2 + psi__Y^2'
>
>    [...]
>    psi_lookup_table = pv.GetLookupTableForArray( '|psi|^2', 1 )
>                                         )
>    data_representation.ColorArrayName = '|psi|^2'
> =================== *snap* ===================
>
> will get me pretty close to where I want to be; except that Function()
> is limited to whatever help( calc1 ) just told me. -- Conditionals /
> atan2()?
>
> --Nico
>
>
>
>
> On Thu, Jun 16, 2011 at 3:45 PM, Nico Schlömer <nico.schloemer at gmail.com> wrote:
>> Also, when
>>
>> ======================== *snip* ========================
>>>>>
>>>>> import paraview.simple
>> paraview version 3.10.1, Date: 2011-01-28
>>>>> calc1 = paraview.simple.servermanager.filters.Calculator()
>>>>> help( calc1 )
>>>>>
>> ======================== *snip* ========================
>>
>> I don't see how to apply math.atan2() to two components of an input
>> vector: Exactly those functions appear to be documented which are
>> available in the GUI. Hmm...
>>
>> --Nico
>>
>>
>>
>> On Thu, Jun 16, 2011 at 3:24 PM, Nico Schlömer <nico.schloemer at gmail.com> wrote:
>>>> See the manual for the syntax.
>>>
>>> Where can I find that? The ParaView User's Guide
>>> <www.paraview.org/files/v1.6/ParaViewUsersGuide.PDF> isn't too verbose
>>> on any of that.
>>> The Wiki, on the other hand, seems to contain a fair amount of
>>> examples. Specifically, I've looked at
>>> <http://www.paraview.org/Wiki/Python_Programmable_Filter> to see about
>>> programmable filters.
>>>
>>> Unfortunately, this hasn't gotten me very far, as I'm lacking
>>> understanding of the entities used in the examples.
>>> Questions I asked myself were:
>>>  * What do I need to do to fetch my point data:
>>> self.GetPolyDataInput()? self.GetInputDataObject(0, 0)? Or simply
>>> self.GetInput()?
>>>  * How do I access point data then?
>>>  * Do I have to create a new vector and feed this into some sort of
>>> output thing?
>>>
>>> Is there a documentation as to what methods are available for those types?
>>>
>>> The input file is Exodus, if that makes any difference.
>>>
>>> If there's a tutorial for this kind of stuff, I'll be happy to go
>>> through it; otherwise I'd appreciate your help here.
>>>
>>> Cheers,
>>> Nico
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Jun 8, 2011 at 6:17 PM, David E DeMarle
>>> <dave.demarle at kitware.com> wrote:
>>>> Also the standard calculator does have conditionals, there just isn't a
>>>> button corresponding to them on the UI. See the manual for the syntax.
>>>> David E DeMarle
>>>> Kitware, Inc.
>>>> R&D Engineer
>>>> 28 Corporate Drive
>>>> Clifton Park, NY 12065-8662
>>>> Phone: 518-371-3971 x109
>>>>
>>>>
>>>> On Wed, Jun 8, 2011 at 12:16 PM, David E DeMarle <dave.demarle at kitware.com>
>>>> wrote:
>>>>>
>>>>> The python programmable filter (and the easier to use python programmable
>>>>> calculator variant of that) will get you beyond all of those limitations.
>>>>> David E DeMarle
>>>>> Kitware, Inc.
>>>>> R&D Engineer
>>>>> 28 Corporate Drive
>>>>> Clifton Park, NY 12065-8662
>>>>> Phone: 518-371-3971 x109
>>>>>
>>>>>
>>>>> On Wed, Jun 8, 2011 at 12:11 PM, Nico Schlömer <nico.schloemer at gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> > If you want to do arbitrary arithmetic, you will have to first
>>>>>> > generate the array using something like a "Calculator" filter and then
>>>>>> > color using the generated array.
>>>>>>
>>>>>> Oh, if I remember correctly I did look into this before, and found the
>>>>>> calculator filter too limited on the arithmetics that you could
>>>>>> perform. Is it still the case that you have a set of like ten
>>>>>> functions (add, multiply, sine, cosine,...) to mix and match? I need
>>>>>> to to something like
>>>>>>
>>>>>> for x in data_values:
>>>>>>    if x[0] > 0 and x[1] > 0
>>>>>>        return bla
>>>>>>    elseif ...
>>>>>>
>>>>>> -- atan2() that is.
>>>>>>
>>>>>>
>>>>>> > Yes, RGBPoints defines the mapping between scalar and color. It's a
>>>>>> > list of 4 tuples (scalar, r, g, b), repeated sequentially.
>>>>>>
>>>>>> Hm, I'll look into it. Where's the proper spot for documentation of this?
>>>>>>
>>>>>> Cheers,
>>>>>> Nico
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Jun 8, 2011 at 5:25 PM, Utkarsh Ayachit
>>>>>> <utkarsh.ayachit at kitware.com> wrote:
>>>>>> > Magnitude corresponds to the magnitude of a vector, so yes, it takes
>>>>>> > the square root.
>>>>>> >
>>>>>> > If you want to do arbitrary arithmetic, you will have to first
>>>>>> > generate the array using something like a "Calculator" filter and then
>>>>>> > color using the generated array.
>>>>>> >
>>>>>> > Yes, RGBPoints defines the mapping between scalar and color. It's a
>>>>>> > list of 4 tuples (scalar, r, g, b), repeated sequentially.
>>>>>> >
>>>>>> > Utkarsh
>>>>>> >
>>>>>> > On Wed, Jun 8, 2011 at 11:19 AM, Nico Schlömer
>>>>>> > <nico.schloemer at gmail.com> wrote:
>>>>>> >> Thanks for the hints.
>>>>>> >>
>>>>>> >> The Trace function in indeed quite useful in that it get you where you
>>>>>> >> want to be. When looking at the code there's still a lot of me to
>>>>>> >> understand though, the GetLookupTableForArray() call seems to be
>>>>>> >> crucial for example.
>>>>>> >>
>>>>>> >>  * The VectorMode='Magnitude' parameter seems to be responsible for
>>>>>> >> merging the two components into one scalar, but I'm not quite sure how
>>>>>> >> this is done: with a sqrt() or without? Is is possible to customize
>>>>>> >> this? I'd like to have something like ATAN2 there as well.
>>>>>> >>
>>>>>> >>  * Is the RGBPoints=[0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0],
>>>>>> >> parameter responsible for the colormap?
>>>>>> >>
>>>>>> >> Cheers,
>>>>>> >> Nico
>>>>>> >>
>>>>>> >>
>>>>>> >>
>>>>>> >>
>>>>>> >>
>>>>>> >> On Wed, Jun 8, 2011 at 3:13 PM, Utkarsh Ayachit
>>>>>> >> <utkarsh.ayachit at kitware.com> wrote:
>>>>>> >>> The following wiki page talks about how to color using arrays:
>>>>>> >>>
>>>>>> >>> http://www.paraview.org/Wiki/ParaView/Python_Scripting#Representations_and_Views
>>>>>> >>>
>>>>>> >>> The easiest way to figure out Python code equivalents is to use the
>>>>>> >>> Trace functionality to generate python trace files for actions
>>>>>> >>> performed in the GUI (accessible from Tools menu). You "Start Trace",
>>>>>> >>> do a set of actions and then "Stop Trace" and you should be able to
>>>>>> >>> view the resulting Python code.
>>>>>> >>>
>>>>>> >>> Utkarsh
>>>>>> >>>
>>>>>> >>>
>>>>>> >>>
>>>>>> >>> On Wed, Jun 8, 2011 at 9:05 AM, Nico Schlömer
>>>>>> >>> <nico.schloemer at gmail.com> wrote:
>>>>>> >>>> Hi,
>>>>>> >>>>
>>>>>> >>>> I'm just taking first steps with ParaView's Python interface and
>>>>>> >>>> figured out so far that
>>>>>> >>>>
>>>>>> >>>> ================ *snip* ================
>>>>>> >>>> exodusReader = ExodusIIReader( FileName="solution.e" )
>>>>>> >>>> Show( exodusReader )
>>>>>> >>>> Render()
>>>>>> >>>> ================ *snap* ================
>>>>>> >>>>
>>>>>> >>>> would plot the mesh that is stored in the ExodusII file solution.e,
>>>>>> >>>> and that can play around with GetActiveView() to adjust camera
>>>>>> >>>> angles
>>>>>> >>>> and such.
>>>>>> >>>>
>>>>>> >>>> What I haven't found out though is how to plot actual point data. I
>>>>>> >>>> get
>>>>>> >>>>
>>>>>> >>>>
>>>>>> >>>>>>> exodusReader.PointData[:]
>>>>>> >>>> [Array: GlobalNodeId, Array: PedigreeNodeId, Array: A, Array: psi,
>>>>>> >>>> Array: thickness]
>>>>>> >>>>
>>>>>> >>>> and l'm looking at the 2-component array "psi". For example, I'd
>>>>>> >>>> like
>>>>>> >>>> to do something like
>>>>>> >>>>
>>>>>> >>>>    res =  sqrt( component1**2 + component2**2 )
>>>>>> >>>>
>>>>>> >>>> and have res[:] rendered on the mesh with a certain color map.
>>>>>> >>>>
>>>>>> >>>> Any hints?
>>>>>> >>>>
>>>>>> >>>> Cheers,
>>>>>> >>>> Nico
>>>>>> >>>> _______________________________________________
>>>>>> >>>> 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
>>>>>
>>>>
>>>>
>>>
>>
>


More information about the ParaView mailing list