Opened 7 years ago

Closed 6 years ago

#1439 closed enhancement (wontfix)

Ability to spawn secondary View instance(s)

Reported by: Tristan Croll Owned by: Tristan Croll
Priority: moderate Milestone:
Component: Graphics Version:
Keywords: Cc: Tom Goddard
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

I can think of a number of situations where it would be really good to have the ability to spawn a separate OpenGL window, with the ability to target Drawing objects to it. Examples:

  • Visualisation of Fourier-space (H,K,L) crystallographic data - really useful for diagnosing various pathologies in the experimental data, and generally following the course of a refinement. I don't see any way to make it play nicely in the same window as the actual real-space volumes/models.
  • Visualisation of non-crystallographic symmetry: work with one chain (and its associated portion of the map) in the main view, and slave the equivalent view of an NCS copy in the secondary view. Wouldn't really work by overlaying in the same view, since overlaying the different map portions would get *really* busy.

Change History (2)

comment:1 by Tom Goddard, 7 years ago

Cc: Tom Goddard added
Owner: changed from Tom Goddard to Tristan Croll

The side view tool (chimerax/sideview, menu Tools / General / Side View) makes its own OpenGL window. So it can be done. But to do it in a general way would be a ton of work. In your HKL data example, that data does not even use the same coordinates (1/length units instead of length units) so I agree it is hard to sensibly put it into the same scene with other models. But if you make a new scene that is separate from the models scene you will have a ton of work to support that well. How will the user control all the rendering settings for that scene (lighting, background color, camera settings, save an image...) None of the commands that do that now know how to act on anything other than the one scene with its one view. Your second use case is also a nightmare of complexity to handle in any general way. Models know whether they are displayed or hidden -- how will a particular view override those settings? How will bounds and picking calculations know whether something is shown if a view window overrides what is displayed?

So I think the practical solution is to handle such cases like the side view. It is not a general view like the main graphics -- in fact the user can do almost nothing with the side view other that look at it and move a few controls on it. For these simple purposes the Python support already exists since it is used by Side View. But your two cases will be more complex than side view which is only showing the exact same models from a different camera angle. So I would expect you to run into lots of problems. Probably what side view does to setup its opengl window can be simplified if there is are other cases that need to do the same thing. But I think we'd need a second use case implemented to see what the common elements are.

If you try to make another graphics view like side view and run into specific capabilities you need then make a ticket.

I'm reassigning this to Tristan since the capability to make additional OpenGL windows is already supported.

comment:2 by Tristan Croll, 6 years ago

Resolution: wontfix
Status: assignedclosed

Rob Oeffner in the lab here is working on a WebGL-based reflection viewer (based on NGL, to be specific) which when finished should be quite straightforward to attach. Seems a much better option than attempting to reinvent the wheel to this extent.

Note: See TracTickets for help on using tickets.