[Paraview] Use case Paraview-Selection

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Thu Apr 22 09:22:27 EDT 2010


The problem with implementing such a component in ParaView is the fact
that there's no universal notion of "RegionID". However  it's may not
be difficult to add a tool button plugin that uses the some code
similar to FindData to create RegionID based selections for your
application.

Utkarsh

On Thu, Apr 22, 2010 at 3:19 AM, Christian Werner
<christian.werner at rwth-aachen.de> wrote:
> Yep, I know the Find Data and it's quite nice to have. I mean something
> still more simple. In my use case i wrote:
>
> "...The object will highlight so the user can always see which objects
> have already been selected..."
>
>
> which could be realized with some kind of "RegionID" selector. So one click
> and -BAM- all points with same ID selected.
>
> Best regards,
> Christian
>
>
> Utkarsh Ayachit wrote:
>>
>> Glad it works.
>>
>> What do you mean by "a pick selects all cells with same ID" ? Is ID a
>> cell array? If so, you can already do so using the  Edit | "Find Data"
>> dialog
>>  [ http://www.paraview.org/Wiki/Find_Data_using_Queries ]
>>
>> Utkarsh
>>
>>
>> On Wed, Apr 21, 2010 at 5:10 PM, Christian Werner
>> <christian.werner at rwth-aachen.de> wrote:
>>
>>>
>>> This works perfectly, thank you very much! The processing is getting
>>> really
>>> professional now.
>>>
>>> As for the selection tools, should I just go ahead and write a feature
>>> request? (a pick selects all cells with same ID / enable multiselect so
>>> you
>>> do not have to use the Ctrl-Key anymore)
>>>
>>> Best regards,
>>> Christian
>>>
>>>
>>>
>>> Utkarsh Ayachit wrote:
>>>
>>>>
>>>> Christian,
>>>>
>>>> Attached is simple python script (that you can encapsulate as a macro)
>>>> to which you can add code to processes the extract points however you
>>>> like. I am simply writing them out to a file.
>>>>
>>>> To use this script, do the following (to keep it simple I am using the
>>>> Sphere source as an example, no reason why it won't work with your
>>>> data).
>>>> 1> Create Sphere source
>>>> 2> Create a selection of points or cells
>>>> 3> Open Python Shell and run the attached script.
>>>>
>>>> As as result, you'll have a mygrid.vtu file written out with the
>>>> extracted points(or cells). No 3 seconds waits, no errors writing
>>>> files, no need for the user to create extract selection filter.
>>>>
>>>> Using the python macros capability, you can make this script a
>>>> trigger-able from a toolbutton.
>>>>
>>>> Utkarsh
>>>>
>>>> On Wed, Apr 21, 2010 at 8:55 AM, Christian Werner
>>>> <christian.werner at rwth-aachen.de> wrote:
>>>>
>>>>
>>>>>
>>>>> Hi!
>>>>>
>>>>> I made a new topic about that selection thing. Here is my use-case:
>>>>>
>>>>> Overview: We have volumetric data of metal components. These components
>>>>> contain unwanted defects (holes that appear during the casting
>>>>> process).
>>>>> These holes are visible as dark regions (objects) in the data.
>>>>> Unfortunately, there are other structures in the metal that are also
>>>>> dark
>>>>> (graphite). After a few image processing steps many of those objects
>>>>> (defects and graphite) are segmented out of the originial volume data.
>>>>> A
>>>>> contouring (and connectivity filtering) yields a nice visualization of
>>>>> those
>>>>> objects.
>>>>>
>>>>> Use Case: Select defects
>>>>> Goal: The user selects the defects out of the many presented objects.
>>>>>
>>>>> Details: Due to the extremely cool features of Paraview, the user is
>>>>> able
>>>>> to
>>>>> mix the views of all extracted objects and the original volume data
>>>>> (see
>>>>> image) to easily verify which object is a defect and which one is
>>>>> graphite.
>>>>> When the user identifies an object as a defect, he marks it by a simple
>>>>> click. The object will highlight so the user can always see which
>>>>> objects
>>>>> have already been selected. When the user is done selecting all
>>>>> defects,
>>>>> he
>>>>> clicks on the "Measure Defects" button. A database containing all
>>>>> necessary
>>>>> information on the defects (centroid, total volume, volume
>>>>> percentage,...)
>>>>> will automatically be created and saved in a secret place.
>>>>>
>>>>> Remark:
>>>>> The "Measure Defects Button" will call a Python macro that desperately
>>>>> tries
>>>>> to extract the selected objects (points). These points are needed for
>>>>> correspondance to the original volume data that is actually being
>>>>> analyzed
>>>>> (the mean grey value of a defect and such are important quantities).
>>>>> Certainly, one single point per object suffices for this
>>>>> correspondance.
>>>>>
>>>>>
>>>>> Best regards,
>>>>> Christian
>>>>>
>>>>>
>>>>> Utkarsh Ayachit schrieb:
>>>>>
>>>>>
>>>>>>
>>>>>> Christian,
>>>>>>
>>>>>> O-oh! We can't have our users going mad now can we :). Guess we are
>>>>>> looking at this the wrong way, instead of working from the solution,
>>>>>> let's start with the problem/use-case. Can you describe your use-case
>>>>>> as simply as possibly. What's the goal here? What is the user doing?
>>>>>>
>>>>>> Utkarsh
>>>>>>
>>>>>> On Mon, Apr 19, 2010 at 11:20 AM, Christian Werner
>>>>>> <christian.werner at rwth-aachen.de> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Does that mean that I have to create a selection with explicitly
>>>>>>> defining
>>>>>>> the points? Oh man... Then I can forget the whole thing anyway.
>>>>>>>
>>>>>>> Everything is so nice about Paraview, but this selection thing is
>>>>>>> driving
>>>>>>> me
>>>>>>> mad.
>>>>>>>
>>>>>>> It's still all about making it as easy as possible for the user to
>>>>>>> select
>>>>>>> objects out of Polydata and let a plugin analyze these objects. As it
>>>>>>> seems
>>>>>>> now, the user has to:
>>>>>>>
>>>>>>> 1) Ctrl+Click matching objects one after another (already dangerours,
>>>>>>> because you might forget to hold down Ctrl when selecting)
>>>>>>> 2) go to Filter->Recent->ExtractSelection
>>>>>>> 3) wait at least 3 seconds
>>>>>>> 4) call a plugin that writes the extracted points' coordinates and
>>>>>>> their
>>>>>>> ID
>>>>>>> to a file
>>>>>>> 5) call the analyzing plugin that reads out the file (to get the
>>>>>>> RegionID
>>>>>>> and coordinates) and does the analysing stuff (in ITK)
>>>>>>>
>>>>>>> I have found a way to do that "wait 3 seconds" in Python using a
>>>>>>> thread(!)
>>>>>>> which checks the time and joins after some seconds. Using sleep(5)
>>>>>>> simply
>>>>>>> froze everything and postponed the segmentation fault (which clearly
>>>>>>> comes
>>>>>>> from my writer that doesn't have input). Another possibility would be
>>>>>>> to
>>>>>>> modify vtkExtractSelection to suite my needs, but I won't do that,
>>>>>>> since
>>>>>>> I
>>>>>>> don't have time for that anymore. This workaround has to do.
>>>>>>>
>>>>>>> Anyway, Paraview, VTK and ITK are really nice, I am glad I found
>>>>>>> these
>>>>>>> open-source tools.
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Christian
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Utkarsh Ayachit schrieb:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Does your data have time? If not, you don't need to specify the
>>>>>>>> time=10000 attribute at all. So SelectionWriter is the thing that's
>>>>>>>> coming from your plugin? Does it support writing empty datasets?
>>>>>>>>  Can
>>>>>>>> you attach a debugger and see where is crashes? Are you sure it's
>>>>>>>> not
>>>>>>>> crashing in the writer? I dont' see why UpdatePipeline() on extract
>>>>>>>> selection would crash. Instead of using a macro, try manually typing
>>>>>>>> the text in the python shell to see exactly what line causes the
>>>>>>>> segfault.
>>>>>>>>
>>>>>>>> BTW, ExtractSelection needs two inputs: 'Input" and "Selection"
>>>>>>>> where
>>>>>>>> Selection is set to the SelectionQuerySource proxy.
>>>>>>>>
>>>>>>>> Utkarsh
>>>>>>>>
>>>>>>>> On Mon, Apr 19, 2010 at 10:34 AM, Christian Werner
>>>>>>>> <christian.werner at rwth-aachen.de> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> I am afraid UpdatePipeline doesn't help, even if I set the time to
>>>>>>>>> some
>>>>>>>>> high
>>>>>>>>> value. Paraview crashes right in the moment where I start this
>>>>>>>>> macro:
>>>>>>>>>
>>>>>>>>> extract=ExtractSelection(Input=ConnectivityFilter)
>>>>>>>>>
>>>>>>>>> UpdatePipeline(time= 10000, proxy=extract)
>>>>>>>>>
>>>>>>>>> mFilename = destPath + str( time() )
>>>>>>>>>
>>>>>>>>> swriter=SelectionWriter(Input=extract)
>>>>>>>>>
>>>>>>>>> swriter.FileName=mFilename
>>>>>>>>>
>>>>>>>>> swriter.UpdatePipeline()
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> When I manually select Fiters->ExtractSelection and then do:
>>>>>>>>>
>>>>>>>>> mFilename = destPath + str( time() )
>>>>>>>>>
>>>>>>>>> swriter=SelectionWriter()
>>>>>>>>>
>>>>>>>>> swriter.FileName=mFilename
>>>>>>>>>
>>>>>>>>> swriter.UpdatePipeline()
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> everything works fine.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Utkarsh Ayachit schrieb:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> You can simply call UpdatePipeline() as follows:
>>>>>>>>>>
>>>>>>>>>> from paraview.simple import *
>>>>>>>>>> ....
>>>>>>>>>> UpdatePipeline(proxy=extractSelectionSource)
>>>>>>>>>>
>>>>>>>>>> This will update the extract selection filter explicitly. Look at
>>>>>>>>>> help(UpdatePipeline) for details.
>>>>>>>>>>
>>>>>>>>>> Utkarsh
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Apr 18, 2010 at 3:38 PM, Christian Werner
>>>>>>>>>> <christian.werner at rwth-aachen.de> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hi Utkarsh,
>>>>>>>>>>>
>>>>>>>>>>> these are great news. I tried the python trace but not in
>>>>>>>>>>> combination
>>>>>>>>>>> with
>>>>>>>>>>> the extraction (what I acutally do need anyway....)
>>>>>>>>>>>
>>>>>>>>>>> As you might remember I am working around the "lack" of
>>>>>>>>>>> possibilty
>>>>>>>>>>> to
>>>>>>>>>>> select
>>>>>>>>>>> whole objects (cells with same RegionID). With the given
>>>>>>>>>>> SelectionQuerySource this workaround is complete.
>>>>>>>>>>>
>>>>>>>>>>> There remains one issue: At some point I call an
>>>>>>>>>>> ExtractSelection()
>>>>>>>>>>> in
>>>>>>>>>>> Python that is followed by a call to a vtk-Plugin (which writes
>>>>>>>>>>> the
>>>>>>>>>>> point
>>>>>>>>>>> data of the selected points to disk). The resulting file is
>>>>>>>>>>> empty,
>>>>>>>>>>> because
>>>>>>>>>>> the Extraction takes a few seconds and obviously the plugin has
>>>>>>>>>>> no
>>>>>>>>>>> valid
>>>>>>>>>>> input when being executed. Paraview also crashes as a
>>>>>>>>>>> consequence.
>>>>>>>>>>> When
>>>>>>>>>>> I
>>>>>>>>>>> am
>>>>>>>>>>> doing this manually (trigger ExtractSelection, wait until it's
>>>>>>>>>>> done,
>>>>>>>>>>> call
>>>>>>>>>>> the vtk Plugin to write the point data) everything works fine. I
>>>>>>>>>>> could
>>>>>>>>>>> just
>>>>>>>>>>> go ahead and do a dull time.sleep(3) between the extraction and
>>>>>>>>>>> the
>>>>>>>>>>> call
>>>>>>>>>>> to
>>>>>>>>>>> the plugin, but this certainly isn't good programming style.
>>>>>>>>>>>
>>>>>>>>>>> What can I do instead?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Christian
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Utkarsh Ayachit wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Yes, you can use the "SelectionQuerySource" to construct your
>>>>>>>>>>>> query
>>>>>>>>>>>> as
>>>>>>>>>>>> follows:
>>>>>>>>>>>>
>>>>>>>>>>>> selection_source_540 = SelectionQuerySource( InsideOut=0,
>>>>>>>>>>>> ArrayName='', HierarchicalLevel=-1, ProcessID=-1,
>>>>>>>>>>>> ContainingCells=0,
>>>>>>>>>>>> DoubleValues=None, HierarchicalIndex=-1, FieldType='CELL',
>>>>>>>>>>>> ArrayComponent=0, Operator='IS_ONE_OF', TermMode='ID',
>>>>>>>>>>>> CompositeIndex=-1, IdTypeValues=0 )
>>>>>>>>>>>>
>>>>>>>>>>>> You can use the python trace recorder functionality to determine
>>>>>>>>>>>> how
>>>>>>>>>>>> to create the query. You will, however have to "Extract
>>>>>>>>>>>> Selection"
>>>>>>>>>>>> from the query (and hit apply) before the selection_source
>>>>>>>>>>>> object
>>>>>>>>>>>> will
>>>>>>>>>>>> appear in the trace.
>>>>>>>>>>>>
>>>>>>>>>>>> Utkarsh
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Apr 17, 2010 at 9:32 AM, Christian Werner
>>>>>>>>>>>> <christian.werner at rwth-aachen.de> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hello!
>>>>>>>>>>>>>
>>>>>>>>>>>>> Is there any chance that the new Edit->Find Data functionality
>>>>>>>>>>>>> is
>>>>>>>>>>>>> available
>>>>>>>>>>>>> in Python-Scripting?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>> Christian
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> 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