User:Dcthomp

From ParaQ Wiki
Revision as of 17:16, 30 July 2006 by Dcthomp (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Just this guy, you know.

Various Viz Invectives or Unsolicited Ramblings

Easy-to-use selections and "element cursor"

  • Keyboard navigation of a mesh with a "cursor", a la Mucke and Edelsbrunner. It is a really elegant way to select a single node, edge, face, or cell. The cursor is always located at a node of the mesh and it points from that node along some edge of the mesh. The user then presses keys to move the cursor or enters the ID of a new point or cell to "warp" to another part of the mesh:
  < - opposite face on next element
  > - opposite face on previous element
  e - next (co)edge on current face of current element
  f - next face on current (co)edge of current element
  r - opposite coedge of current edge (i.e., switch to neighboring element sharing same edge on current face loop).

I've used this for debugging mesh connectivity problems and it works quite well.

  • Mouse navigation, a la Solidworks/ProE. Although it's intended for single (not multiple) selections, the nice thing about SolidWorks and ProE is that you can select surfaces that are partially or totally obscured using multiple mouse clicks:
  left click - draw a line through current pixel, selecting topmost element

then

  right click - move down (further from image plane) along selection line
  middle click- move up (towards image plane) along selection line
  left click - complete selection
  • Also a la Solidworks: toggle buttons to filter selection by type (ele/face/edge/node, perhaps inc/excl specific datasets).
  • Again, selections are first class objects! There should be an icon (or stack of icons for each refinement of a selection?) for current selection that you drag/drop. If selection is a single node/face/edge you should be able to drop it onto plane normal of a filter to set the plane base point, normal, etc. Perhaps a couple of way to do it to indicate whether updating the selection should update the plane as well?

This would be a way to tie filter inputs together so that the same plane gets used in several places, the same isovalue gets applied to several datasets, etc.

Collaboration

It would be interesting to add an "out-of-band" protocol to Jabber spec for collaboration + some XML elements to the "in-band" chat notes that refer to datasets, elements, selections, screen coordinates, etc. . Out-of-band communications could be any combination of:

  • client-server command streams
  • datasets (geometry for client to render when compositing disabled)
  • image data (images for client to render when compositing enabled)

The Jabber protocol presents some interesting use cases for collaboration:

  • single pvserver with multiple users
    • one user has "the conch"; all users see exactly the same thing (images or geom+view from pvserver sent to all users)
    • all users have their own pipelines based on same source data and can send their pipelines to other users
    • users may have privelege to see newly derived data generated by others?
    • all users share pipline but viewpoints can vary; users can send views plus annotations to others
  • one pvserver per user: users send entire piplines; both clients and servers communicate to make this happen.
  • Jabber allows public forums and private, invite-only rooms for secure collaborations.

Queries

  • Apple Automator-style
    An example query UI.
    filters for datasets. An example:
    • elements whose nodal "Temp" values exceed 320 C
    • AND/OR/XOR elements whose nodal vector velocity (magnitude/component [XYZ]) is between 0 and 10
    • ...
  • The types of queries accepted can be written with a simple grammar and that grammar could be constrained so that only the types of queries that can be quickly answered can be used for temporal queries:
  result-specification  whose (subset-criterion have)? field-criterion

where result-specifications can be

 (nodes|faces|edges|elements)

A 'subset-criterion is of the form

 (nodes|edges|faces|elements)

and a field-criterion is of the form:

 (nodal|cell|edge|face|...) field-name (X|Y|Z|magnitude)? value-query

where value-query is one of:

 (is|is not|contains|matches) value1
 (is between|is not between) value1 and value2

There aren't any isocontouring or clipping/cutting requests here that could make the pipeline hard to handle for fast plots. There's also no mention of time yet, but I see two basic types of queries: questions that constrain themselves to a particular timestep (or set of timesteps) and questions that ask when (and maybe where) an event occurs. The first is relatively simple to support. The second not so simple, depending on the grammar you accept.

  • For info-vis where there's lots of free-form data a Beagle(Linux)- or Spotlight(Apple)-style search bar might make sense. Even for scientific vis, it might makes sense to search for dataset filenames and their fields.

Scripting

Although I've heard hints that Python scripting will be available in ParaQ, it's not noticable in beta. Easy-to-use syntax really important. Current TCL scripting in ParaView is not easy to use. Current things like setting the camera eye/aim require

         [[$Application GetMainWindow] GetMainView] SetViewingParameters eyex eyey eyez aimx aimy aimz upx upy upz

it should be like this:

         client.setActiveView('Main 3D')
         camera.setEye( [x,y,z] )
         camera.rotateAbout( [x,y,z], phi )

By having some predefined variables (app, view, camera) that are kept up to date (so that effectively there is a state machine), it is simple to use when there is a single view without having to learn a lot about the application's hierarchical structure. Having to say app.view['Main 3D'].camera['Perspective'].setEye( [x,y,z] ) is tedious and unneccesary. However, the dictionary syntax should be present as well.

It's also important to have help and/or completion available within the scripting language. For instance:

       help(client)

should yield some information like:

 "The client application contains global settings such as a working directory URL, plus dictionaries of
 the application windows, viewports, cameras, animations, dialogs, filter graphs, selections, etc. A full
 list is below. ..."

It should be really easy to write/modify queries (such as those in the section above) in the scripting language:

       filt = pvQueryFilter()
       filt.setInput( server.datasets['HighTempElements'] )
       clause1 = pvQueryFilterClause( 'elements whose nodal vorticity > 10' )
       clause2 = pvQueryFilterClause( 'elements whose cell temperature is in [320,1000[' )
       filt.setQuery( pvQueryFilterClause( clause1, AND, clause2 ) )

Animations

Channels and timeline like Final Cut Studio/other nonlinear editors. ParaView had the beginnings of this. You should be able to drag and drop datasets/views(camera)/filters/properties/Python variables into a timeline channel. Selecting a camera channel in the animation will display an editable TNB-spline in all "geometric" viewports.

Provenance/Pedigree and Annotations

Claudio Silva was right about the importance of provenance. I'm not totally sold on the "spreadsheet" UI, but the graph of filters/queries that a user creates should be recorded. Something like his notebook system should be used to archive interactions with ParaQ and uniquely mark it. Perhaps subversion/WebDAV could be used to save session history. Images and animations should store the pipeline that created them (or references to the session history at a minimum). This would be a great use of PNG comment fields. That way, one could load a PNG image of a dataset and have the server recreate the session that created the picture.

If subversion/webdav were used for storing session traces, the history could be retrieved from an online repository no matter what machine created it -- which is a great feature if you want people to use the viz corridors since it would be easy to move to a new machine and have the same client session. Adventurous users could even try svk (distributed-repository version of svn) for checking sessions in while disconnected from the network.

Also, having a URL for a session would allow users to write annotations for datasets in their favorite word processor and refer directly to the session from their writeups. Along with PNG files containing references, it provides an easy way to use existing content management systems to save a wide variety of documentation that is closely tied to a particular, reproducible session state in ParaQ.