[Paraview] Python + ParaView

Nico Schlömer nico.schloemer at gmail.com
Thu Jun 16 17:40:35 EDT 2011


A small correction to the previous script: Two pi2's should be
replaced by just pi. The correct Function is

================== *snip* ==================
    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) ),' % ( pi, pi ) + \
                     'if ( psi__Y>0, %s, if( psi__Y<0, -%s, 0.0 ) )' %
( pi2, pi2 ) + \
                     '))'
================== *snap* ==================

Sorry for all the spam! :)

--Nico


On Thu, Jun 16, 2011 at 7:00 PM, Nico Schlömer <nico.schloemer at gmail.com> wrote:
> 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