Opened 2 years ago

Closed 2 years ago

Last modified 2 years ago

#10206 closed defect (fixed)

Crop mouse mode in VR with tilted slab moves wrong slab face

Reported by: phil.cruz@… Owned by: Tom Goddard
Priority: normal Milestone:
Component: VR Version:
Keywords: Cc: Elaine Meng
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Windows-10-10.0.22621
ChimeraX Version: 1.7.dev202309201855 (2023-09-20 18:55:20 UTC)
Description
Crop mode in VR with a volume in tilted slab style does not consistently choose which face of the slab to move.  Sometimes it moves the face being pointed to with the controller and sometimes the other face.

Log:
Startup Messages  
---  
warnings | Fetch provider 'emdb' supplied unknown keywords in provider
description: {'group_multiple_models': 'false'}  
Fetch provider 'emdb_europe' supplied unknown keywords in provider
description: {'group_multiple_models': 'false'}  
Fetch provider 'emdb_us' supplied unknown keywords in provider description:
{'group_multiple_models': 'false'}  
Fetch provider 'emdb_japan' supplied unknown keywords in provider description:
{'group_multiple_models': 'false'}  
Fetch provider 'emdb_china' supplied unknown keywords in provider description:
{'group_multiple_models': 'false'}  
1 messages similar to the above omitted  
  
UCSF ChimeraX version: 1.7.dev202309201855 (2023-09-20)  
© 2016-2023 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open C:\Users\goddard\Downloads\4-24533 format dicom

Summary of feedback from opening C:\Users\goddard\Downloads\4-24533  
---  
note | Opened 4 CT (No Description) as #1.1.1, grid size 512,512,236, pixel
0.576,0.576,1.24, shown at step 1, values int16  
  

> volume #1.1.1 region 0,0,0,511,511,235 step 2

> volume #1.1.1 region 0,0,0,511,511,235 step 2 showOutlineBox true imageMode
> "tilted slab" tiltedSlabOffset -189.7 tiltedSlabSpacing 0.5762
> tiltedSlabPlaneCount 23

> vr true

started SteamVR rendering  
VR mode crop volume  

> volume #1.1.1 tiltedSlabOffset -226 tiltedSlabPlaneCount 117

> volume #1.1.1 tiltedSlabOffset -226 tiltedSlabPlaneCount 68

> volume #1.1.1 tiltedSlabOffset -170.7 tiltedSlabPlaneCount 60

> volume #1.1.1 tiltedSlabOffset -182.3 tiltedSlabPlaneCount 62

VR mode rotate slab  

> volume #1.1.1 tiltedSlabAxis -0.2561,0.9655,0.04667 tiltedSlabOffset -93.3

> volume #1.1.1 tiltedSlabOffset -123.8 tiltedSlabPlaneCount 86

> volume #1.1.1 tiltedSlabOffset -97.33 tiltedSlabPlaneCount 50

> volume #1.1.1 tiltedSlabOffset -91 tiltedSlabPlaneCount 39




OpenGL version: 3.3.0 NVIDIA 536.19
OpenGL renderer: NVIDIA GeForce RTX 3070/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation

Python: 3.11.2
Locale: en_US.cp1252
Qt version: PyQt6 6.3.1, Qt 6.3.1
Qt runtime version: 6.3.2
Qt platform: windows

Manufacturer: Dell Inc.
Model: OptiPlex 7000
OS: Microsoft Windows 11 Pro (Build 22621)
Memory: 68,393,086,976
MaxProcessMemory: 137,438,953,344
CPU: 20 12th Gen Intel(R) Core(TM) i7-12700K
OSLanguage: en-US

Installed Packages:
    alabaster: 0.7.13
    appdirs: 1.4.4
    asttokens: 2.4.0
    Babel: 2.12.1
    backcall: 0.2.0
    beautifulsoup4: 4.11.2
    blockdiag: 3.0.0
    blosc2: 2.0.0
    build: 0.10.0
    certifi: 2023.7.22
    cftime: 1.6.2
    charset-normalizer: 3.2.0
    ChimeraX-AddCharge: 1.5.11
    ChimeraX-AddH: 2.2.5
    ChimeraX-AlignmentAlgorithms: 2.0.1
    ChimeraX-AlignmentHdrs: 3.4
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.9.3
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.1.1
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.1
    ChimeraX-Atomic: 1.47.2
    ChimeraX-AtomicLibrary: 10.0.8
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.3.2
    ChimeraX-BasicActions: 1.1.2
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.1.2
    ChimeraX-BondRot: 2.0.4
    ChimeraX-BugReporter: 1.0.1
    ChimeraX-BuildStructure: 2.10.5
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.2.2
    ChimeraX-ButtonPanel: 1.0.1
    ChimeraX-CageBuilder: 1.0.1
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.3.2
    ChimeraX-ChangeChains: 1.0.3
    ChimeraX-CheckWaters: 1.3.1
    ChimeraX-ChemGroup: 2.0.1
    ChimeraX-Clashes: 2.2.4
    ChimeraX-ColorActions: 1.0.3
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.4
    ChimeraX-CommandLine: 1.2.5
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.7.dev202309201855
    ChimeraX-CoreFormats: 1.1
    ChimeraX-coulombic: 1.4.2
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.3
    ChimeraX-Dicom: 1.2
    ChimeraX-DistMonitor: 1.4
    ChimeraX-DockPrep: 1.1.2
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ESMFold: 1.0
    ChimeraX-FileHistory: 1.0.1
    ChimeraX-FunctionKey: 1.0.1
    ChimeraX-Geometry: 1.3
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.1.1
    ChimeraX-Hbonds: 2.4
    ChimeraX-Help: 1.2.2
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-IUPAC: 1.0
    ChimeraX-Label: 1.1.8
    ChimeraX-ListInfo: 1.2.1
    ChimeraX-Log: 1.1.5
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.9.1
    ChimeraX-Map: 1.1.4
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0.1
    ChimeraX-MapFilter: 2.0.1
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1.1
    ChimeraX-Markers: 1.0.1
    ChimeraX-Mask: 1.0.2
    ChimeraX-MatchMaker: 2.1.2
    ChimeraX-MCopy: 1.0
    ChimeraX-MDcrds: 2.6
    ChimeraX-MedicalToolbar: 1.0.2
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1.1
    ChimeraX-mmCIF: 2.12.1
    ChimeraX-MMTF: 2.2
    ChimeraX-Modeller: 1.5.12
    ChimeraX-ModelPanel: 1.4
    ChimeraX-ModelSeries: 1.0.1
    ChimeraX-Mol2: 2.0.3
    ChimeraX-Mole: 1.0
    ChimeraX-Morph: 1.0.2
    ChimeraX-MouseModes: 1.2
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nifti: 1.1
    ChimeraX-NRRD: 1.1
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.10.2
    ChimeraX-PDB: 2.7.2
    ChimeraX-PDBBio: 1.0.1
    ChimeraX-PDBLibrary: 1.0.2
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0.1
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.2
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.1
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.2
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 4.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5.1
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0.1
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0.1
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.9.1
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.1.1
    ChimeraX-ShowSequences: 1.0.2
    ChimeraX-SideView: 1.0.1
    ChimeraX-Smiles: 2.1.2
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.12.2
    ChimeraX-STL: 1.0.1
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.1.2
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0.1
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.2.2
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-TaskManager: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1.2
    ChimeraX-ToolshedUtils: 1.2.4
    ChimeraX-Topography: 1.0
    ChimeraX-ToQuest: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.31.5
    ChimeraX-uniprot: 2.3
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.3
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0.1
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0.2
    ChimeraX-WebServices: 1.1.2
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.6
    comm: 0.1.4
    comtypes: 1.1.14
    contourpy: 1.1.1
    cxservices: 1.2.2
    cycler: 0.11.0
    Cython: 0.29.33
    debugpy: 1.8.0
    decorator: 5.1.1
    docutils: 0.19
    executing: 1.2.0
    filelock: 3.9.0
    fonttools: 4.42.1
    funcparserlib: 1.0.1
    glfw: 2.6.2
    grako: 3.16.5
    h5py: 3.9.0
    html2text: 2020.1.16
    idna: 3.4
    ihm: 0.38
    imagecodecs: 2023.7.10
    imagesize: 1.4.1
    ipykernel: 6.23.2
    ipython: 8.14.0
    ipython-genutils: 0.2.0
    ipywidgets: 8.1.1
    jedi: 0.18.2
    Jinja2: 3.1.2
    jupyter-client: 8.2.0
    jupyter-core: 5.3.1
    jupyterlab-widgets: 3.0.9
    kiwisolver: 1.4.5
    line-profiler: 4.0.2
    lxml: 4.9.2
    lz4: 4.3.2
    MarkupSafe: 2.1.3
    matplotlib: 3.7.2
    matplotlib-inline: 0.1.6
    msgpack: 1.0.4
    nest-asyncio: 1.5.8
    netCDF4: 1.6.2
    networkx: 3.1
    nibabel: 5.0.1
    nptyping: 2.5.0
    numexpr: 2.8.6
    numpy: 1.25.1
    openvr: 1.23.701
    packaging: 23.1
    ParmEd: 3.4.3
    parso: 0.8.3
    pep517: 0.13.0
    pickleshare: 0.7.5
    Pillow: 10.0.0
    pip: 23.0
    pkginfo: 1.9.6
    platformdirs: 3.10.0
    prompt-toolkit: 3.0.39
    psutil: 5.9.5
    pure-eval: 0.2.2
    py-cpuinfo: 9.0.0
    pycollada: 0.7.2
    pydicom: 2.3.0
    Pygments: 2.16.1
    pynrrd: 1.0.0
    PyOpenGL: 3.1.7
    PyOpenGL-accelerate: 3.1.7
    pyopenxr: 1.0.2801
    pyparsing: 3.0.9
    pyproject-hooks: 1.0.0
    PyQt6: 6.3.1
    PyQt6-Qt6: 6.3.2
    PyQt6-sip: 13.4.0
    PyQt6-WebEngine: 6.3.1
    PyQt6-WebEngine-Qt6: 6.3.2
    python-dateutil: 2.8.2
    pytz: 2023.3.post1
    pywin32: 305
    pyzmq: 25.1.1
    qtconsole: 5.4.3
    QtPy: 2.4.0
    RandomWords: 0.4.0
    requests: 2.31.0
    scipy: 1.11.1
    setuptools: 67.4.0
    sfftk-rw: 0.7.3
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    soupsieve: 2.5
    sphinx: 6.1.3
    sphinx-autodoc-typehints: 1.22
    sphinxcontrib-applehelp: 1.0.7
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.5
    sphinxcontrib-htmlhelp: 2.0.4
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.6
    sphinxcontrib-serializinghtml: 1.1.9
    stack-data: 0.6.2
    superqt: 0.5.0
    tables: 3.8.0
    tcia-utils: 1.5.1
    tifffile: 2023.7.18
    tinyarray: 1.2.4
    tomli: 2.0.1
    tornado: 6.3.3
    traitlets: 5.9.0
    typing-extensions: 4.8.0
    tzdata: 2023.3
    urllib3: 2.0.5
    wcwidth: 0.2.6
    webcolors: 1.12
    wheel: 0.38.4
    wheel-filename: 1.4.1
    widgetsnbextension: 4.0.9
    WMI: 1.5.1

Change History (4)

comment:1 by Tom Goddard, 2 years ago

Component: UnassignedVR
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Reporter: changed from goddard@… to phil.cruz@…
Status: newassigned
Summary: ChimeraX bug report submissionCrop mouse mode in VR with tilted slab moves wrong slab face

comment:2 by Tom Goddard, 2 years ago

Cc: Elaine Meng added
Resolution: fixed
Status: assignedclosed

Fixed in daily build and 1.7 release candidates dated Nov 22, 2023.

The crop code was looking at the camera direction instead of the hand-controller pointing direction. That makes sense on the desktop display, but in VR I think we want to choose the front or back of the slab based on the hand-controller pointing direction not the view direction. So I fixed it in VR so the slab face is chosen based on the hand controller pointing direction. So if you point at the front face from the front it moves the front face, and if you point at the back face from the back it moves the back face. This can be a bit cumbersome to move the back face (the one farthest from view) because it suggests you should reach behind the slab and point back at it. But in fact it is only the direction of pointing that matters, while the position of the hand-controller is ignored. So you can have the hand-controller in front of the front face of the slab put point away from the slab and it will move the back face. What matters is if you look at the outward facing normal vectors from front and back slab faces, the hand-controller moves the face whose normal points opposite the hand-controller pointing direction. This makes it easy to move either slab face from any position.

Pointing from in front of the slab face you want to move at the slab face is pretty intuitive. The one aspect that may not be so intuitive is that if you want to move the back slab face you might think you can poke the hand controller through the slab to reach the back face and move it. But it doesn't work that way. Given that the slab may be large and out of arm's reach I think the current behavior where only the pointing direction of the hand-controller matters is probably best.

comment:3 by Elaine Meng, 2 years ago

Hi Tom,
Does this also apply to volume cropping in general (not just tilted slab, but also when box is aligned with XYZ)?  Asking for documentation purposes.  :-)
Elaine


comment:4 by Tom Goddard, 2 years ago

Yes these rules for what face moves in VR also applies to the 6 faces of the volume box when not in tilted slab mode. It is a bit weird in VR when you are inside the volume box because you are inclined to point at the inside face you want to move but that in fact moves the opposite face. But I think cropping will usually be done from outside the box.

Note: See TracTickets for help on using tickets.