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
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.