# SlicerSegmentEditorExtraEffects: extra Segment Editor effects for 3D Slicer # (Fast marching, Flood filling, Surface cut, Watershed, Draw tube, Split volume, # Local threshold, Engrave). Scripted effects plus one C++ VTK logic library # (vtkPichonFastMarching), built NON-superbuild against the system 3dslicer. # SlicerVMTK's Quick/GuidedArterySegmentation require it (3dslicer-vmtk Requires # it instead of letting upstream download it on demand). %global commit 36a5f2987a96578ffc25d8916d015ec48eb6a073 %global shortcommit %(c=%{commit}; echo ${c:0:8}) %global snapdate 20260624 %global slicer_inst %{_prefix}/lib/slicer %global slicer_subdir Slicer-5.12 Name: 3dslicer-segmenteditorextraeffects Version: 0 Release: 0.1.%{snapdate}git%{shortcommit}%{?dist} Summary: Extra Segment Editor effects for 3D Slicer (SegmentEditorExtraEffects) License: BSD-3-Clause URL: https://github.com/lassoan/SlicerSegmentEditorExtraEffects Source0: %{url}/archive/%{commit}/SlicerSegmentEditorExtraEffects-%{shortcommit}.tar.gz BuildRequires: cmake >= 3.20.6 BuildRequires: ninja-build BuildRequires: gcc-c++ BuildRequires: python3-devel BuildRequires: git-core BuildRequires: 3dslicer-devel >= 5.12.4 # Full Qt6 set find_package(Slicer)'s Qt check demands. BuildRequires: cmake(Qt6Core) BuildRequires: cmake(Qt6Gui) BuildRequires: cmake(Qt6Widgets) BuildRequires: cmake(Qt6Network) BuildRequires: cmake(Qt6Sql) BuildRequires: cmake(Qt6Svg) BuildRequires: cmake(Qt6Xml) BuildRequires: cmake(Qt6OpenGL) BuildRequires: cmake(Qt6OpenGLWidgets) BuildRequires: cmake(Qt6PrintSupport) BuildRequires: cmake(Qt6Multimedia) BuildRequires: cmake(Qt6MultimediaWidgets) BuildRequires: cmake(Qt6Core5Compat) BuildRequires: cmake(Qt6StateMachine) BuildRequires: cmake(Qt6WebEngineCore) BuildRequires: cmake(Qt6WebEngineWidgets) BuildRequires: cmake(Qt6WebChannel) BuildRequires: cmake(Qt6Qml) BuildRequires: cmake(Qt6Quick) BuildRequires: cmake(Qt6QuickWidgets) BuildRequires: cmake(Qt6Test) BuildRequires: cmake(Qt6UiTools) BuildRequires: qt6-qttools-devel BuildRequires: InsightToolkit5-devel >= 5.4.6-7 BuildRequires: InsightToolkit5-vtk-devel BuildRequires: vtk-devel >= 9.6 BuildRequires: ctk-devel BuildRequires: qttesting-devel BuildRequires: vtkAddon-devel BuildRequires: qRestAPI-devel BuildRequires: python-pythonqt-devel BuildRequires: commontk-applauncher-devel BuildRequires: dcmtk-devel BuildRequires: SlicerExecutionModel-devel BuildRequires: rapidjson-devel BuildRequires: libcurl-devel BuildRequires: jsoncpp-devel # Loading the foundation SlicerConfig.cmake triggers find_package(Teem). BuildRequires: teem-devel Requires: 3dslicer # Surface cut calls slicer.modules.markupstomodel.logic() (upstream EXTENSION_DEPENDS). Requires: 3dslicer-markupstomodel%{?_isa} # Pin the exact VTK ABI this package was built against. VTK freezes its soname at # libvtk*.so.1 across all of 9.x, so rpm cannot tell 9.5 from 9.6 from 9.7: a consumer # built against one installs cleanly against another and fails at LOAD with undefined # symbols. %%vtk_abi comes from vtk-devel's macros.vtk; the %%build test catches a # buildroot without it (see 3dslicer-igt.spec for why the check is not at parse time). Requires: vtk(abi) = %{?vtk_abi}%{!?vtk_abi:UNSET} %description SegmentEditorExtraEffects adds effects to 3D Slicer's Segment Editor: Fast marching, Flood filling, Surface cut, Watershed, Draw tube, Split volume, Local threshold and Engrave. SlicerVMTK's artery segmentation modules use the Flood filling and Split volume effects. %prep %autosetup -n SlicerSegmentEditorExtraEffects-%{commit} # Distro build: install modules directly, not as an Extension-Manager bundle, so # skip SlicerExtensionCPack (wants README/license + the s4ext description template # the install tree doesn't ship). sed -i '/include(${Slicer_EXTENSION_CPACK})/d' CMakeLists.txt ! grep -q 'Slicer_EXTENSION_CPACK' CMakeLists.txt || { echo "ERROR: CPack include left" >&2; exit 1; } %build test -n "%{?vtk_abi}" || { echo "ERROR: vtk_abi undefined - add 'BuildRequires: vtk-devel'" >&2; exit 1; } %cmake -G Ninja \ -DSlicer_DIR:PATH=%{slicer_inst}/lib/%{slicer_subdir} \ -DBUILD_TESTING:BOOL=OFF \ -DSlicer_SKIP_SlicerBlockAdditionalLauncherSettings:BOOL=TRUE \ -DCMAKE_INSTALL_PREFIX:PATH=%{slicer_inst} %cmake_build %install %cmake_install # Catch-all file list (files + symlinks only, so the shared module dirs that # 3dslicer owns are never claimed). No headers: nothing builds against it. ( cd %{buildroot} && find . \( -type f -o -type l \) | sed 's|^\.||' ) \ | grep -v '^%{slicer_inst}/include/' > %{_builddir}/3dslicer-segmenteditorextraeffects.files # All eight effects are installed as scripted modules, and Fast marching's C++ # logic is Python-wrapped (its effect imports vtkSlicerSegmentEditorFastMarchingModuleLogicPython). _qsm=%{buildroot}%{slicer_inst}/lib/%{slicer_subdir}/qt-scripted-modules for _e in FastMarching FloodFilling SurfaceCut Watershed DrawTube SplitVolume LocalThreshold Engrave; do test -f "$_qsm/SegmentEditor$_e.py" || { echo "ERROR: SegmentEditor$_e.py not installed" >&2; exit 1; } done find %{buildroot} -name 'vtkSlicerSegmentEditorFastMarchingModuleLogicPython*' | grep -q . \ || { echo "ERROR: FastMarching logic is not Python-wrapped" >&2; exit 1; } %files -f %{_builddir}/3dslicer-segmenteditorextraeffects.files %license LICENSE %doc README.md %changelog * Sat Oct 10 2026 Morgan Hough - 0-0.1.%{snapdate}git%{shortcommit} - Initial package. SlicerSegmentEditorExtraEffects built non-superbuild against the system 3dslicer.