Skip to content

CI TESTING: 3.1 - #34

Draft
psavery wants to merge 426 commits into
masterfrom
3.1
Draft

psavery wants to merge 426 commits into
masterfrom
3.1

Conversation

@psavery

@psavery psavery commented Sep 2, 2026

Copy link
Copy Markdown
Owner

No description provided.

psavery and others added 30 commits May 25, 2026 13:49
This 3.0 branch is for the new release we have planned. Ensure the
CI runs for it, while we are using it.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This was originally removed in d031416, since I originally thought it
did not make sense for a B&C editor to also modify opacity.

Users are actually expecting and relying on this, however, and adjusting
the opacity to hide the voxels below the minimum is necessary for thresholding
them out. Thus, we are restoring this behavior.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
For macos, it would appear *behind* the main window. We need to
flag it as a Qt Tool for it to appear on top.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This warning is harmless and we should just ignore it.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This is very valuable for actually seeing the plots.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Rather than at compile time. This allows us to bundle them later. For
the conda-forge packages, we don't want to bundle them, but for the DMG/MSI files,
we do.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This rewires the deferred "insertion" operators (operators that are
being inserted somewhere in an existing pipeline) so that they visually
appear where they are going to actually be placed when they execute. Before,
they would appear as if a new branch was being formed, but then move to their
insertion location when applied.

When "Cancel" is clicked, or escape/x button so that the dialog is closed, the
connected operators are rewired according to their initial wiring (before the
operator was added), and the pipeline is not re-executed.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This fixes a segfault.

Also fixes a re-entrant `processEvents()` call.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Previously, the visualization would just be gone.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
As seen from the CI

There are only a few warnings left on Windows, which look harmless but
may be difficult to fix.

Linux and Mac have no warnings.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
These are runtime warnings from deprecated functions. Just update them
to the recommended versions.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
These reflect the expected import paths in newer versions of scipy.
The older ones were deprecated.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This allows volumes to be rendered that are greater than the
OpenGL limit (typically 2048 for many GPUs) by bricking them
together.

A single voxel of overlap is present between the bricks so that
no seams are displayed.

The bricking is only performed if the volume exceeds the limit
size, so all volume rendering is the same performance if it is
smaller than the limit.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
We have historically used `vtkDataArray::GetRange()/GetFiniteRange()`,
but this function is not thread-safe (due to its cache), and we have
been calling it in a background thread. I recently ran into a segmentation
fault that is probably unlikely, but we want to avoid all crashes.

So we must compute the histogram range ourselves to avoid all crashes.

The result is actually cached one level up so this shouldn't affect
performance.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Restore rescaling opacity to B&C editor
Previously, if we failed to read an HDF5 file (perhaps because it
was open for writing in another process), it would kill the whole
table setup.

This makes several steps in the PyXRF source more robust to errors
like this.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Otherwise, the warning gets swallowed and it just shows up as "fail".

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
This will help prevent flakiness in the CI

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
The first issue was another case of calling OpenGL code from a background
thread instead of the GUI thread. To fix it, we added a `ThreadUtils.h`
file that provides helper functions, which allows us to consolidate
repeated code sections. Then we used this helper function in the new
volume block sections.

We also made `m_node` a QPointer and guard against it being nullptr.
That prevents another crash.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
They were just not appearing before. This was not an issue in the
packaging.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Recent updates to 3.0
Previous scaling wouldn't work since arrays with different shapes were
not allowed. This fixes the issue by cleaning the arrays out at the end
and then putting the new arrays (with the new shapes) in.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Previously, the dialog pop-ups, including the operator dialogs, could
show up behind the main window, or if you click the main window they
would move behind the main window. This is kind of annoying - the pop-up
dialogs should remain in front.

This adds a utility function that is utilized, as well as setting parents
correctly in all of the dialogs, that fixes the issue.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
A Camera Orbit viewpoint added at load sat at the top of every path a
user built afterwards, framed by the load-time camera. Play with
nothing set up to animate now makes it from the current view, before
the player starts, so the list stays empty until then and a lone plain
viewpoint, an authored animation or a time series is left alone.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Legs and orbits now carry a frame count instead of a relative weight,
and the scene's total is their sum, shown in place of the frame box.
Older state files convert their weights, and a leg of zero frames
plays as a cut.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
The custom transform manager dropped ~/.tomviz from the search paths,
so operators placed there by earlier releases vanished; it is scanned
again, read-only. Its tests also pass on Windows now.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
A tilt series of a synthetic object arrives on a wall clock, and
should_auto_execute asks for a re-run only while new projections exist,
so it shows every hook a live source needs. It heads the Sample Data
menu and turns on periodic execution through a new autoExecute block.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
examples/batch builds four volumes and a blur-threshold-label pipeline
and runs them all with one tomviz-pipeline call. A test runs the
example, skipping when tomviz-pipeline has no label map writer.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Rename sets the editable flag before opening the editor, and Qt
reports that as an item change, so the deferred rename handler saw an
unchanged name and rebuilt the list, closing the editor before the
user could type. An unchanged name is now left alone.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
flush_dataset flattened a replaced array in Fortran order and handed
VTK a one-component array, so a script that replaced an RGB stack's
array left the image with three times too many scalars and the
channels scrambled. Interleave the components the way VTK stores them.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Recalling a viewpoint or playing a recorded change of exploded axis
went through the setters that refit the camera, which yanked it away
from the viewpoint just placed or off the path mid-flight. The axis
setter takes the same refitCamera switch the enable setter has, and
both are passed false from the recorded animations and Go To.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
The directory fingerprint only covered the recon_*.npy files, so a
scan whose arrays arrived before its angle config was never absorbed
until some later change. The config files count now.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
ParaView clamps the clipping range to cached scene bounds that it only
refreshes for its own representations, so data tomviz adds to the
renderer directly was cut once it grew or moved. The bounds are now
refreshed at the start of every render of every render view.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Operator search matches names, and "FFT (abs log)" did not contain
"Fourier". It is now "Fast Fourier Transform (FFT)", with a description
saying it shows the log magnitude, and the Fourier operators refer to
it by the new name.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Outputs copied the color map of the first input in port-name order, so
Fourier Mask took its mask's label colors. They now follow the primary
input and skip label maps, and an output with nothing to inherit, like
the FFT's, which opts out, starts from the default preset.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
New labels took the next color in sequence, so a label map with labels
removed from the middle, like the output of Remove Labels, shifted the
color of every label after them. A label now keeps its color in any
label map that holds it.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Save Data only offered persistent ports, so a transient output still in
memory, like the last step of a pipeline, could not be saved. Any port
holding data now can, and the dialog names transient ports whose data
was released and says how to get it back.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
ParaView's linkToOtherView() connects QWidget::close, a slot, as a
signal, which warned "signal not found" on every camera link and leaked
the link widget. tomviz now shows that widget itself and frees it once
it hides.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Opacity edits reach the proxy one event-loop turn late, so range
changes rescaled a copy that still held the placeholder nodes. Each
auto-contrast Apply squeezed the curve further, and Reset Range left
it narrowed.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Entering 2D always viewed a slice from one fixed side with a fixed up.
The camera now stays on the side it was on, with the in-plane axis
nearest its current up pointing up.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
The cut-out and exploded view grow, shrink and change setup smoothly
instead of snapping, slices and clips swing round to a new direction,
and volume solidity is recorded and can be swept. Clip normals are
recorded in the data coordinates they are restored in.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Orbits turn at constant speed unless their own Ease In/Out is checked,
new legs take 100 frames, and captions are centered on their position,
the bottom middle by default, with clearer field text.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Builds without git history, such as one from a release tarball, now
report 3.1.0 rather than 3.0.0. The SAM environments drop the beta
channel from the 3.0 prerelease and accept tomviz-pipeline up to 4.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Showing a clip again, as playback and Go To do, drew its arrow whenever
Show Arrow was checked, even with Show Plane off; so did a state file
that set Show Arrow after Show Plane. The arrow now needs both.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Viewpoints record a volume's solidity too, so the tooltip listing what
they record now says so.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
File and Animation > Export Movie... still ran ParaView's exporter,
which has no MP4 writer in our packages; only the Animation Helper's
button opened the tomviz dialog. Both now do, and the dialog hides the
"x" between the custom width and height along with the fields.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
tomviz supports 3.14, and ParaView 6.1 and the rest of the test
environment, including the PyXRF stack, resolve for it on Linux, macOS
and Windows.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
visible_if hid a string parameter's field but left its label behind,
since the label is the field's buddy rather than the row's; Fourier
Peak Mask showed a bare "Peak Centers" with auto-detect on.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Clone Data now walks up to the source feeding the selected branch and
keeps a label map's type and label table. A PyXRF scan range that names
no scans lists nothing instead of every file, and a config comment gives
the right tomviz-pipeline bound.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Changing Contour by fed the mapper the bare contour surface, which lacks
the color-by array, so a colored contour turned white. Every mapper
hookup now goes through one helper that probes the color array when
Color by is on.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
A peak at index 0 of an even-sized axis (the Nyquist frequency) is its
own mate, but mirroring gave index n, off the grid, so the mate's window
landed on the far edge and auto-detection kept both of the pair. This
was carried over from the reference MATLAB.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Removing a node deleted it while the worker thread could still be
running, or about to run, its should_auto_execute() query. The removal
now waits for the worker to finish with the node first.

Signed-off-by: Patrick Avery <patrick.avery@kitware.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants