Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkRenderingController.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkRenderingController_h
14 #define mitkRenderingController_h
15 
16 #include <mitkDataStorageBridge.h>
17 #include <mitkRenderWindowBridge.h>
19 #include <httplib.h>
20 
21 #include <functional>
22 #include <mutex>
23 #include <optional>
24 #include <utility>
25 
26 #include <MitkRESTAPIExports.h>
27 
28 namespace mitk
29 {
30 
39  {
40  public:
47 
60 
78 
88  void HandlePOST_update(const httplib::Request& req, httplib::Response& res) const;
89 
111  void HandlePOST_reinit(const httplib::Request& req, httplib::Response& res) const;
112 
127  void HandleGET_selectedPosition(const httplib::Request& req, httplib::Response& res) const;
128 
143  void HandlePUT_selectedPosition(const httplib::Request& req, httplib::Response& res) const;
144 
156  void HandleGET_selectedTime(const httplib::Request& req, httplib::Response& res) const;
157 
172  void HandlePUT_selectedTime(const httplib::Request& req, httplib::Response& res) const;
173 
182  void HandleGET_editors(const httplib::Request& req, httplib::Response& res) const;
183 
189  void HandleGET_stdmultiInfo(const httplib::Request& req, httplib::Response& res) const;
190 
196  void HandleGET_stdmultiWindows(const httplib::Request& req, httplib::Response& res) const;
197 
203  void HandleGET_stdmultiWindow(const httplib::Request& req, httplib::Response& res) const;
204 
210  void HandleGET_stdmultiCamera(const httplib::Request& req, httplib::Response& res) const;
211 
219  void HandlePUT_stdmultiCamera(const httplib::Request& req, httplib::Response& res) const;
220 
226  void HandleGET_stdmultiSelectedSlice(const httplib::Request& req, httplib::Response& res) const;
227 
235  void HandlePUT_stdmultiSelectedSlice(const httplib::Request& req, httplib::Response& res) const;
236 
242  void HandleGET_stdmultiScreenshot(const httplib::Request& req, httplib::Response& res) const;
243 
249  void HandleGET_stdmultiWindowScreenshot(const httplib::Request& req, httplib::Response& res) const;
250 
251  // ---- MxN editor handlers ----
252 
254  void HandleGET_mxnInfo(const httplib::Request& req, httplib::Response& res) const;
255 
257  void HandleGET_mxnWindows(const httplib::Request& req, httplib::Response& res) const;
258 
260  void HandleGET_mxnWindow(const httplib::Request& req, httplib::Response& res) const;
261 
263  void HandleGET_mxnLayout(const httplib::Request& req, httplib::Response& res) const;
264 
281  void HandlePUT_mxnLayout(const httplib::Request& req, httplib::Response& res) const;
282 
284  void HandleGET_mxnCamera(const httplib::Request& req, httplib::Response& res) const;
285 
294  void HandlePUT_mxnCamera(const httplib::Request& req, httplib::Response& res) const;
295 
297  void HandleGET_mxnSelectedSlice(const httplib::Request& req, httplib::Response& res) const;
298 
306  void HandlePUT_mxnSelectedSlice(const httplib::Request& req, httplib::Response& res) const;
307 
315  void HandleGET_mxnSelectedPosition(const httplib::Request& req, httplib::Response& res) const;
316 
326  void HandlePUT_mxnSelectedPosition(const httplib::Request& req, httplib::Response& res) const;
327 
335  void HandleGET_mxnScreenshot(const httplib::Request& req, httplib::Response& res) const;
336 
344  void HandleGET_mxnWindowScreenshot(const httplib::Request& req, httplib::Response& res) const;
345 
362  void HandleGET_screenshot(const httplib::Request& req, httplib::Response& res) const;
363 
364  private:
370  void Dispatch(std::function<void()> task) const;
371 
372  void SendErrorResponse(httplib::Response& res, int status, const nlohmann::json& error) const;
373 
390  static std::pair<int, nlohmann::json> MapBridgeException(
391  const std::exception& e, const std::string& instance);
392 
400  static bool IsValidStdMultiWindowId(const std::string& id);
401 
403  static bool IsStdMulti3dWindow(const std::string& id);
404 
412  static std::string ReadRequiredPathParam(const httplib::Request& req,
413  const std::string& key);
414 
415  DataStorageBridge& m_Bridge;
416  RenderWindowBridge* m_RenderWindowBridge = nullptr;
418  mutable std::mutex m_DispatcherMutex;
419  };
420 }
421 
422 #endif
#define MITKRESTAPI_EXPORT
Thread-safe bridge between the REST API layer and MITK DataStorage.
Bridge between the REST API server and the Qt/render-window layer.
Handles all /api/v1/rendering endpoints.
void HandlePUT_mxnSelectedSlice(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/editors/mxn/windows/{id}/selected-slice.
void HandleGET_mxnSelectedSlice(const httplib::Request &req, httplib::Response &res) const
void HandlePOST_reinit(const httplib::Request &req, httplib::Response &res) const
Handle POST /rendering/reinit request.
void HandlePUT_mxnLayout(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/editors/mxn/layout.
void HandleGET_editors(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors request.
void HandlePUT_mxnCamera(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/editors/mxn/windows/{id}/camera.
void SetDispatcher(StorageThreadDispatcherBase *dispatcher)
Set the thread dispatcher for RenderingManager operations.
void HandlePUT_selectedPosition(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/selected-position request.
void HandleGET_mxnSelectedPosition(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/mxn/windows/{id}/selected-position.
void HandleGET_screenshot(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/screenshot request.
RenderingController(DataStorageBridge &bridge)
Construct a RenderingController.
void HandleGET_selectedTime(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/selected-time request.
void HandleGET_mxnWindows(const httplib::Request &req, httplib::Response &res) const
void HandleGET_stdmultiScreenshot(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti/screenshot.
void HandleGET_selectedPosition(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/selected-position request.
void HandlePUT_mxnSelectedPosition(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/editors/mxn/windows/{id}/selected-position.
void HandleGET_stdmultiInfo(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti request.
void HandleGET_stdmultiWindow(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti/windows/{id} request.
void HandlePUT_selectedTime(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/selected-time request.
void HandleGET_stdmultiWindowScreenshot(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti/windows/{id}/screenshot.
void HandlePOST_update(const httplib::Request &req, httplib::Response &res) const
Handle POST /rendering/update request.
void HandleGET_mxnLayout(const httplib::Request &req, httplib::Response &res) const
void HandleGET_stdmultiCamera(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti/windows/{id}/camera.
void SetRenderWindowBridge(RenderWindowBridge *bridge)
Set or clear the RenderWindowBridge for interactions with the rendering stack of the application.
void HandleGET_mxnCamera(const httplib::Request &req, httplib::Response &res) const
void HandlePUT_stdmultiCamera(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/editors/stdmulti/windows/{id}/camera.
void HandleGET_mxnScreenshot(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/mxn/screenshot.
void HandleGET_stdmultiWindows(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti/windows request.
void HandleGET_stdmultiSelectedSlice(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/stdmulti/windows/{id}/selected-slice.
void HandleGET_mxnWindow(const httplib::Request &req, httplib::Response &res) const
void HandleGET_mxnWindowScreenshot(const httplib::Request &req, httplib::Response &res) const
Handle GET /rendering/editors/mxn/windows/{id}/screenshot.
void HandlePUT_stdmultiSelectedSlice(const httplib::Request &req, httplib::Response &res) const
Handle PUT /rendering/editors/stdmulti/windows/{id}/selected-slice.
void HandleGET_mxnInfo(const httplib::Request &req, httplib::Response &res) const
Abstract base class for dispatching tasks to the thread that owns DataStorage.
A weak pointer that observes an itk::Object without preventing its deletion.
nlohmann::json json
Find image slices visible on a given plane.