From 125914006a2c8ae09c15d31f701d7cf73c90fe45 Mon Sep 17 00:00:00 2001 From: Alexy Pellegrini Date: Wed, 18 Feb 2026 16:59:59 +0100 Subject: [PATCH] COMP: Build SlicerLayerDM as vtk modules based on the slicer_core_sdk --- CMakeLists.txt | 49 +++++++++++++++++++++-------------- LayerDM/Logic/CMakeLists.txt | 2 +- LayerDM/Logic/vtk.module | 4 +-- LayerDM/MRML/CMakeLists.txt | 12 +++------ LayerDM/MRML/vtk.module | 6 ++--- LayerDM/MRMLDM/CMakeLists.txt | 17 +++++------- LayerDM/MRMLDM/vtk.module | 6 ++--- Python/slicer_layerdm.py | 2 ++ pyproject.toml | 11 ++++++++ 9 files changed, 60 insertions(+), 49 deletions(-) create mode 100644 Python/slicer_layerdm.py create mode 100644 pyproject.toml diff --git a/CMakeLists.txt b/CMakeLists.txt index b24978b..72f3b37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,34 @@ -cmake_minimum_required(VERSION 3.16.3...3.19.7 FATAL_ERROR) +cmake_minimum_required(VERSION 3.17...4.0) -project(LayerDisplayableManager) +project(${SKBUILD_PROJECT_NAME} VERSION ${SKBUILD_PROJECT_VERSION}) -#----------------------------------------------------------------------------- -# Extension meta-information -set(EXTENSION_HOMEPAGE "https://github.com/KitwareMedical/SlicerLayerDisplayableManager") -set(EXTENSION_CONTRIBUTORS "Thibault Pelletier (Kitware SAS)") -set(EXTENSION_DESCRIPTION "A 3D Slicer module introducing a new displayable manager architecture for layered rendering and interaction handling.") -set(EXTENSION_ICONURL "https://github.com/KitwareMedical/SlicerLayerDisplayableManager/raw/main/Docs/LayerDisplayableManager.png") -set(EXTENSION_SCREENSHOTURLS "https://github.com/KitwareMedical/SlicerLayerDisplayableManager/raw/main/Docs/LayeredDisplayableManager_UML.jpg") -set(EXTENSION_DEPENDS "NA") # Specified as a list or "NA" if no dependencies +find_package(Slicer CONFIG REQUIRED) -#----------------------------------------------------------------------------- -# Extension dependencies -find_package(Slicer REQUIRED) -include(${Slicer_USE_FILE}) +include(FetchContent) +FetchContent_Declare(vtk-sdk-python-helper + GIT_REPOSITORY https://github.com/Kitware/vtk-sdk-python-wheel-helper.git + GIT_TAG main +) +FetchContent_MakeAvailable(vtk-sdk-python-helper) -#----------------------------------------------------------------------------- -# Extension modules -add_subdirectory(LayerDM) +set(modules + SlicerLayerDM::Logic + SlicerLayerDM::MRML + SlicerLayerDM::MRMLDisplayableManager +) -#----------------------------------------------------------------------------- -include(${Slicer_EXTENSION_GENERATE_CONFIG}) -include(${Slicer_EXTENSION_CPACK}) +# Install runtime only dependencies +vtksdk_build_modules(${SKBUILD_PROJECT_NAME} + MODULES ${modules} + DEPENDENCIES slicer_core +) +vtksdk_generate_package_init(${SKBUILD_PROJECT_NAME} + MODULES ${modules} + DEPENDENCIES slicer_core +) + +# Make this package part of the slicer meta package +install(FILES + ${CMAKE_SOURCE_DIR}/Python/slicer_layerdm.py + DESTINATION slicer +) diff --git a/LayerDM/Logic/CMakeLists.txt b/LayerDM/Logic/CMakeLists.txt index e26a4f2..7e41c91 100644 --- a/LayerDM/Logic/CMakeLists.txt +++ b/LayerDM/Logic/CMakeLists.txt @@ -16,7 +16,7 @@ set(headers "${CMAKE_CURRENT_BINARY_DIR}/vtkSlicerLayerDMVersion.h" ) -vtk_module_add_module(VTK::SlicerLayerDMModuleLogic +vtk_module_add_module(SlicerLayerDM::Logic EXPORT_MACRO_PREFIX VTK_SLICER_LAYERDM_MODULE_LOGIC CLASSES ${classes} HEADERS ${headers} diff --git a/LayerDM/Logic/vtk.module b/LayerDM/Logic/vtk.module index 892fd21..6ae851a 100644 --- a/LayerDM/Logic/vtk.module +++ b/LayerDM/Logic/vtk.module @@ -1,8 +1,8 @@ NAME - VTK::SlicerLayerDMModuleLogic + SlicerLayerDM::Logic LIBRARY_NAME vtkSlicerLayerDMModuleLogic DEPENDS - VTK::SlicerLayerDMModuleMRML + SlicerLayerDM::MRML DESCRIPTION "vtkSlicerLayerDMModuleLogic" diff --git a/LayerDM/MRML/CMakeLists.txt b/LayerDM/MRML/CMakeLists.txt index c13f0d5..87ad53e 100644 --- a/LayerDM/MRML/CMakeLists.txt +++ b/LayerDM/MRML/CMakeLists.txt @@ -3,17 +3,11 @@ set(classes vtkMRMLLayerDMObjectEventObserver vtkMRMLLayerDMWidgetEventTranslationNode vtkMRMLLayerDMSelectionObserver + vtkMRMLLayerDMObjectEventObserverScripted + vtkMRMLLayerDMPythonUtil ) -if (VTK_WRAP_PYTHON) - list(APPEND classes - vtkMRMLLayerDMObjectEventObserverScripted - vtkMRMLLayerDMPythonUtil - ) -endif () - - -vtk_module_add_module(VTK::SlicerLayerDMModuleMRML +vtk_module_add_module(SlicerLayerDM::MRML EXPORT_MACRO_PREFIX VTK_SLICER_LAYERDM_MODULE_MRML CLASSES ${classes} ) diff --git a/LayerDM/MRML/vtk.module b/LayerDM/MRML/vtk.module index aaebc41..4a3175d 100644 --- a/LayerDM/MRML/vtk.module +++ b/LayerDM/MRML/vtk.module @@ -1,9 +1,9 @@ NAME - VTK::SlicerLayerDMModuleMRML + SlicerLayerDM::MRML LIBRARY_NAME vtkSlicerLayerDMModuleMRML DEPENDS - VTK::SlicerBaseLogic - VTK::MRMLCore + Slicer::BaseLogic + Slicer::MRMLCore DESCRIPTION "vtkSlicerLayerDMModuleMRML" diff --git a/LayerDM/MRMLDM/CMakeLists.txt b/LayerDM/MRMLDM/CMakeLists.txt index 42507c9..1d2be00 100644 --- a/LayerDM/MRMLDM/CMakeLists.txt +++ b/LayerDM/MRMLDM/CMakeLists.txt @@ -8,17 +8,10 @@ set(classes vtkMRMLLayerDMPipelineI vtkMRMLLayerDMPipelineManager vtkMRMLLayerDisplayableManager + vtkMRMLLayerDMPipelineScriptedCreator + vtkMRMLLayerDMScriptedPipelineBridge ) -if (VTK_WRAP_PYTHON) - list(APPEND classes - vtkMRMLLayerDMPipelineScriptedCreator - vtkMRMLLayerDMScriptedPipelineBridge - ) - - add_subdirectory(Python) -endif () - # Handle factory registration set(factory_classes vtkMRMLLayerDisplayableManager @@ -35,12 +28,14 @@ vtk_object_factory_configure( EXPORT_MACRO "") # Module configuration -vtk_module_add_module(VTK::SlicerLayerDMModuleMRMLDisplayableManager +vtk_module_add_module(SlicerLayerDM::MRMLDisplayableManager EXPORT_MACRO_PREFIX VTK_SLICER_LAYERDM_MODULE_MRMLDISPLAYABLEMANAGER CLASSES ${classes} SOURCES ${vtk_object_factory_source} PRIVATE_HEADERS ${vtk_object_factory_header} ) -vtk_module_definitions(VTK::SlicerLayerDMModuleMRMLDisplayableManager PRIVATE +vtk_module_definitions(SlicerLayerDM::MRMLDisplayableManager PRIVATE "vtkSlicerLayerDMModuleMRMLDisplayableManager_AUTOINIT=1(vtkSlicerLayerDMModuleMRMLDisplayableManager)") + +add_subdirectory(Python) diff --git a/LayerDM/MRMLDM/vtk.module b/LayerDM/MRMLDM/vtk.module index c6c3c03..4304dd2 100644 --- a/LayerDM/MRMLDM/vtk.module +++ b/LayerDM/MRMLDM/vtk.module @@ -1,10 +1,10 @@ NAME - VTK::SlicerLayerDMModuleMRMLDisplayableManager + SlicerLayerDM::MRMLDisplayableManager LIBRARY_NAME vtkSlicerLayerDMModuleMRMLDisplayableManager IMPLEMENTABLE DEPENDS - VTK::MRMLDisplayableManager - VTK::SlicerLayerDMModuleMRML + Slicer::MRMLDisplayableManager + SlicerLayerDM::MRML DESCRIPTION "vtkSlicerLayerDMModuleMRMLDisplayableManager" diff --git a/Python/slicer_layerdm.py b/Python/slicer_layerdm.py new file mode 100644 index 0000000..84309ff --- /dev/null +++ b/Python/slicer_layerdm.py @@ -0,0 +1,2 @@ +# Entry point for slicer dummy package +from slicer_layerdm import * diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2f2d56c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ +[build-system] +requires = ["scikit-build-core", "slicer-core-sdk==5.12.0", "vtk-sdk==9.6.0"] +build-backend = "scikit_build_core.build" + +[project] +name = "slicer-layerdm" +version = "1.0.0" +authors = [ + { name = "Alexy Pellegrini", email = "alexy.pellegrini@kitware.com" } +] +dependencies = ["slicer-core"]