Opened 3 months ago

Closed 3 months ago

Last modified 3 months ago

#18733 closed defect (fixed)

DICOM output problems and Wavefront output error

Reported by: weberm@… Owned by: Tom Goddard
Priority: normal Milestone:
Component: Input/Output Version:
Keywords: Cc: Zach Pearson
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Windows-10-10.0.26100
ChimeraX Version: 1.10.1 (2025-07-24 20:15:27 UTC)
Description
I tried to save successfully loaded and manipulated DICOM data to the 3D formats .glb, .x3d and .obj to view them in an AR viewer, however, the saved files of a fullchest CT dataset are very small (50 kb) and look broken (just a distorted box in case of .glb). The used dataset is the one mentioned in ChimeraX DICOM reference and can be found here: https://www.rbvi.ucsf.edu/chimerax/data/dicom/4-24533.zip

Log:
UCSF ChimeraX version: 1.10.1 (2025-07-24)  
© 2016-2025 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open C:/MW/India-2024/neu/RKN/HoloDeck-Entwicklungsprojekte/MRT-
> CT/play/4-24533/4-24533 format dicom

Summary of feedback from opening C:/MW/India-2024/neu/RKN/HoloDeck-
Entwicklungsprojekte/MRT-CT/play/4-24533/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 region all imageMode "full region"

> volume unzone

> mousemode rightMode "crop volume"

> lighting full

> save C:/MW/India-2024/neu/RKN/HoloDeck-Entwicklungsprojekte/MRT-
> CT/play/4-24533/test.x3d

> save C:/MW/India-2024/neu/RKN/HoloDeck-Entwicklungsprojekte/MRT-
> CT/play/4-24533/test.obj

Traceback (most recent call last):  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\toolbar\tool.py", line 185, in callback  
bundle_info.run_provider(session, name, session.toolbar,
display_name=display_name)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\core\toolshed\info.py", line 397, in run_provider  
return api._api_caller.run_provider(api, session, name, mgr, **kw)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\core\toolshed\\__init__.py", line 1419, in run_provider  
return cls._get_func(api, "run_provider")(session, name, mgr, **kw)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\toolbar\\__init__.py", line 37, in run_provider  
providers.run_provider(session, name)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\toolbar\providers.py", line 56, in run_provider  
what(session)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\toolbar\providers.py", line 38, in _file_save  
show_save_file_dialog(session)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\save_command\dialog.py", line 138, in show_save_file_dialog  
_dlg.display(session, **kw)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\save_command\dialog.py", line 62, in display  
run(session, cmd)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\core\commands\run.py", line 49, in run  
results = command.run(text, log=log, return_json=return_json)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\core\commands\cli.py", line 3221, in run  
result = ci.function(session, **kw_args)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\save_command\cmd.py", line 86, in cmd_save  
Command(session, registry=registry).run(provider_cmd_text, log=log)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\core\commands\cli.py", line 3221, in run  
result = ci.function(session, **kw_args)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\save_command\cmd.py", line 101, in provider_save  
saver_info.save(session, path, **provider_kw)  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\wavefront_obj\\__init__.py", line 50, in save  
return obj.write_obj(session, path, models)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\wavefront_obj\obj.py", line 363, in write_obj  
vcount = write_object(file, name, va, na, tca, ta, voffset, pos, obj_to_unity)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\wavefront_obj\obj.py", line 393, in write_object  
file.write('\n'.join(('vt %.5g %.5g' % tuple(uv)) for uv in tca))  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\wavefront_obj\obj.py", line 393, in <genexpr>  
file.write('\n'.join(('vt %.5g %.5g' % tuple(uv)) for uv in tca))  
~~~~~~~~~~~~~~~^~~~~~~~~~~  
TypeError: not all arguments converted during string formatting  
  
TypeError: not all arguments converted during string formatting  
  
File "C:\Program Files\ChimeraX 1.10.1\bin\Lib\site-
packages\chimerax\wavefront_obj\obj.py", line 393, in  
file.write('\n'.join(('vt %.5g %.5g' % tuple(uv)) for uv in tca))  
~~~~~~~~~~~~~~~^~~~~~~~~~~  
  
See log for complete Python traceback.  
  




OpenGL version: 3.3.0 Core Profile Context 23.19.21.11.250530
OpenGL renderer: AMD Radeon(TM) Graphics
OpenGL vendor: ATI Technologies Inc.

Python: 3.11.4
Locale: de_DE.cp1252
Qt version: PyQt6 6.8.1, Qt 6.8.2
Qt runtime version: 6.8.2
Qt platform: windows

Manufacturer: LENOVO
Model: 20UES3YA01
OS: Microsoft Windows 11 Pro (Build 26100)
Memory: 33,528,926,208
MaxProcessMemory: 137,438,953,344
CPU: 16 AMD Ryzen 7 PRO 4750U with Radeon Graphics
OSLanguage: de-DE

Installed Packages:
    alabaster: 1.0.0
    appdirs: 1.4.4
    asttokens: 3.0.0
    babel: 2.17.0
    beautifulsoup4: 4.13.3
    blockdiag: 3.0.0
    blosc2: 3.6.1
    build: 1.2.2.post1
    certifi: 2025.7.14
    cftime: 1.6.4.post1
    charset-normalizer: 3.4.2
    ChimeraX-AddCharge: 1.5.19
    ChimeraX-AddH: 2.2.7
    ChimeraX-AlignmentAlgorithms: 2.0.2
    ChimeraX-AlignmentHdrs: 3.6.1
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.20.2
    ChimeraX-AlphaFold: 1.0.1
    ChimeraX-AltlocExplorer: 1.1.2
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Aniso: 1.1.4
    ChimeraX-Arrays: 1.1
    ChimeraX-Atomic: 1.60.7
    ChimeraX-AtomicLibrary: 14.1.19
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.4
    ChimeraX-BasicActions: 1.1.3
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 3.0.0
    ChimeraX-Boltz: 1.0
    ChimeraX-BondRot: 2.0.4
    ChimeraX-BugReporter: 1.0.2
    ChimeraX-BuildStructure: 2.13.1
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.5.1
    ChimeraX-ButtonPanel: 1.0.1
    ChimeraX-CageBuilder: 1.0.1
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.4
    ChimeraX-ChangeChains: 1.1
    ChimeraX-CheckWaters: 1.5
    ChimeraX-ChemGroup: 2.0.2
    ChimeraX-Clashes: 2.3
    ChimeraX-ColorActions: 1.0.5
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.8
    ChimeraX-CommandLine: 1.3
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.10.1
    ChimeraX-CoreFormats: 1.2
    ChimeraX-coulombic: 1.4.5
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.4
    ChimeraX-Dicom: 1.2.7
    ChimeraX-DistMonitor: 1.4.2
    ChimeraX-DockPrep: 1.1.4
    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.4.1
    ChimeraX-Hbonds: 2.5.1
    ChimeraX-Help: 1.3
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.3
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-IUPAC: 1.0
    ChimeraX-KVFinder: 1.6.2
    ChimeraX-Label: 1.1.14
    ChimeraX-ListInfo: 1.2.2
    ChimeraX-Log: 1.2
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.9.1
    ChimeraX-Map: 1.3
    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.2.2
    ChimeraX-MCopy: 1.0
    ChimeraX-MDcrds: 2.10.1
    ChimeraX-MedicalToolbar: 1.1
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1.1
    ChimeraX-mmCIF: 2.16
    ChimeraX-MMTF: 2.2
    ChimeraX-ModelArchive: 1.0
    ChimeraX-Modeller: 1.5.19
    ChimeraX-ModelPanel: 1.5.1
    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-MutationScores: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nifti: 1.2
    ChimeraX-NMRSTAR: 1.0.2
    ChimeraX-NRRD: 1.2
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.14.1
    ChimeraX-OrthoPick: 1.0.1
    ChimeraX-PDB: 2.7.10
    ChimeraX-PDBBio: 1.0.1
    ChimeraX-PDBLibrary: 1.0.4
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0.1
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1.3
    ChimeraX-ProfileGrids: 1.1.3
    ChimeraX-PubChem: 2.2
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.2
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.6.3
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.3.1
    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.3
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0.1
    ChimeraX-Segmentations: 3.5.7
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.17.1
    ChimeraX-Shape: 1.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.2.1
    ChimeraX-ShowSequences: 1.0.3
    ChimeraX-SideView: 1.0.1
    ChimeraX-SimilarStructures: 1.0.1
    ChimeraX-Smiles: 2.1.2
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.19.1
    ChimeraX-STL: 1.0.1
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.2.1
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0.1
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.5.2
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-TaskManager: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.2.3
    ChimeraX-ToolshedUtils: 1.2.4
    ChimeraX-Topography: 1.0
    ChimeraX-ToQuest: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.45.2
    ChimeraX-Umap: 1.0
    ChimeraX-uniprot: 2.3.1
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.4.4
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0.1
    ChimeraX-vrml: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0.2
    ChimeraX-WebServices: 1.1.5
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.6
    comm: 0.2.2
    comtypes: 1.4.10
    contourpy: 1.3.2
    coverage: 7.10.0
    cxservices: 1.2.3
    cycler: 0.12.1
    Cython: 3.0.12
    debugpy: 1.8.15
    decorator: 5.2.1
    docutils: 0.21.2
    executing: 2.2.0
    filelock: 3.18.0
    fonttools: 4.59.0
    funcparserlib: 2.0.0a0
    glfw: 2.9.0
    grako: 3.16.5
    h5py: 3.14.0
    html2text: 2024.2.26
    idna: 3.10
    ihm: 2.2
    imagecodecs: 2024.6.1
    imagesize: 1.4.1
    iniconfig: 2.1.0
    ipykernel: 6.29.5
    ipython: 8.26.0
    ipywidgets: 8.1.7
    jedi: 0.19.1
    Jinja2: 3.1.6
    jupyter_client: 8.6.3
    jupyter_core: 5.8.1
    jupyterlab_widgets: 3.0.15
    kiwisolver: 1.4.8
    line_profiler: 4.2.0
    lxml: 5.3.1
    lz4: 4.3.2
    MarkupSafe: 3.0.2
    matplotlib: 3.10.1
    matplotlib-inline: 0.1.7
    MolecularDynamicsViewer: 1.6
    msgpack: 1.1.0
    ndindex: 1.10.0
    nest-asyncio: 1.6.0
    netCDF4: 1.6.5
    networkx: 3.3
    nibabel: 5.2.0
    nptyping: 2.5.0
    numexpr: 2.11.0
    numpy: 1.26.4
    nvidia-nvjitlink-cu12: 12.9.86
    OpenMM: 8.2.0
    OpenMM-CUDA-12: 8.2.0
    openvr: 1.26.701
    packaging: 24.2
    ParmEd: 4.2.2
    parso: 0.8.4
    pep517: 0.13.1
    pickleshare: 0.7.5
    pillow: 10.4.0
    pip: 25.0.1
    pkginfo: 1.11.1
    platformdirs: 4.3.8
    pluggy: 1.6.0
    prompt_toolkit: 3.0.51
    psutil: 7.0.0
    pure_eval: 0.2.3
    py-cpuinfo: 9.0.0
    pycollada: 0.8
    pydicom: 2.4.4
    Pygments: 2.18.0
    pynmrstar: 3.3.5
    pynrrd: 1.0.0
    PyOpenGL: 3.1.9
    PyOpenGL-accelerate: 3.1.9
    pyopenxr: 1.1.4501
    pyparsing: 3.2.3
    pyproject_hooks: 1.2.0
    PyQt6-commercial: 6.8.1
    PyQt6-Qt6: 6.8.2
    PyQt6-WebEngine-commercial: 6.8.0
    PyQt6-WebEngine-Qt6: 6.8.2
    PyQt6_sip: 13.10.0
    pytest: 8.4.1
    pytest-cov: 6.2.1
    python-dateutil: 2.9.0.post0
    pytz: 2025.2
    pywin32: 310
    pyzmq: 27.0.0
    qtconsole: 5.5.2
    QtPy: 2.4.3
    qtshim: 1.1
    RandomWords: 0.4.0
    requests: 2.32.3
    roman-numerals-py: 3.1.0
    scipy: 1.14.0
    setuptools: 78.1.0
    sfftk-rw: 0.8.1
    six: 1.16.0
    snowballstemmer: 3.0.1
    sortedcontainers: 2.4.0
    soupsieve: 2.7
    Sphinx: 8.2.3
    sphinx-autodoc-typehints: 3.1.0
    sphinxcontrib-applehelp: 2.0.0
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 2.0.0
    sphinxcontrib-htmlhelp: 2.1.0
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 2.0.0
    sphinxcontrib-serializinghtml: 2.0.0
    stack-data: 0.6.3
    superqt: 0.7.1
    tables: 3.10.2
    tcia_utils: 1.5.1
    tifffile: 2025.3.13
    tinyarray: 1.2.4
    tornado: 6.5.1
    traitlets: 5.14.3
    typing_extensions: 4.14.1
    tzdata: 2025.2
    urllib3: 2.5.0
    wcwidth: 0.2.13
    webcolors: 24.11.1
    wheel: 0.45.1
    wheel-filename: 1.4.2
    widgetsnbextension: 4.0.14
    WMI: 1.5.1

Change History (4)

comment:1 by Eric Pettersen, 3 months ago

Cc: Zach Pearson added
Component: UnassignedInput/Output
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionDICOM output problems and Wavefront output error

Reported by Michael Weber

comment:2 by Tom Goddard, 3 months ago

Resolution: fixed
Status: assignedclosed

None of the 3d scene export formats (.obj, .glb, .x3d) handle 3D texture and volumetric rendering of DICOM data uses 3D textures. I fixed the .obj error by putting in a test for 3D textures so it will not give an error and just saves the geometry without the texture information. The ChimeraX GLTF save (.glb) can save 2D textures and if you change the volume rendering to use 2D textures it worked in my test. To change your volume rendering to use 2D texture use command

volume projectionMode 2d-z

Don't expect any of this to work with standalone augmented or virtual reality. The graphics on such devices is not fast enough to do volumetric rendering for large data like a DICOM 3D image.

comment:3 by weberm@…, 3 months ago

Thank you very much, the .glb export now appears to work.
However, ChimeraX is still not able to re-load these self-exported .glb 
files.
And indeed, the exported .glb file does not load in an AR environment.
Unfortunately, I am not enough of a multimedia person to know how to 
interpret this.
-Michael.


Am 08.09.2025 21:31 schrieb ChimeraX:

comment:4 by Tom Goddard, 3 months ago

ChimeraX reopens the volumetric image .glb files that it writes for me. For example, the following creates a .glb file then opens it and it displays correctly in ChimeraX 1.10.1.

open 1080 from emdb
volume #1 style image proj 2d-z
save test.glb
close #1
open test.glb

I would not be surprised if this .glb file does not open in your AR environment because the GLTF reader being used does not support the features of the format that are used.

When I drop the above test.glb file into the web GLTF viewer Babylon.js Sandbox (https://sandbox.babylonjs.com) it displays correctly (helps to turn off the SkyBox lighting under Scenes/Nodes/hdrSkyBox that Babylon adds even though it is not in the .glb file). I usually use Babylon.js for testing GLTF files.

Note: See TracTickets for help on using tickets.