Mercurial > hg > orthanc-stone
comparison Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1579:c476b0d5e59c
skeleton for cross-hair tool
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 30 Sep 2020 19:09:03 +0200 |
parents | 1f812f4c95be |
children | c6b29bf58914 |
comparison
equal
deleted
inserted
replaced
1578:1f812f4c95be | 1579:c476b0d5e59c |
---|---|
103 DisplayedFrameQuality_Low, | 103 DisplayedFrameQuality_Low, |
104 DisplayedFrameQuality_High | 104 DisplayedFrameQuality_High |
105 }; | 105 }; |
106 | 106 |
107 | 107 |
108 enum EMSCRIPTEN_KEEPALIVE MouseAction | 108 enum EMSCRIPTEN_KEEPALIVE WebViewerAction |
109 { | 109 { |
110 MouseAction_GrayscaleWindowing, | 110 WebViewerAction_GrayscaleWindowing, |
111 MouseAction_Zoom, | 111 WebViewerAction_Zoom, |
112 MouseAction_Pan, | 112 WebViewerAction_Pan, |
113 MouseAction_Rotate | 113 WebViewerAction_Rotate, |
114 WebViewerAction_Crosshair | |
114 }; | 115 }; |
115 | 116 |
117 | |
118 | |
119 static OrthancStone::MouseAction ConvertWebViewerAction(int action) | |
120 { | |
121 switch (action) | |
122 { | |
123 case WebViewerAction_GrayscaleWindowing: | |
124 return OrthancStone::MouseAction_GrayscaleWindowing; | |
125 | |
126 case WebViewerAction_Zoom: | |
127 return OrthancStone::MouseAction_Zoom; | |
128 | |
129 case WebViewerAction_Pan: | |
130 return OrthancStone::MouseAction_Pan; | |
131 | |
132 case WebViewerAction_Rotate: | |
133 return OrthancStone::MouseAction_Rotate; | |
134 | |
135 case WebViewerAction_Crosshair: | |
136 return OrthancStone::MouseAction_None; | |
137 | |
138 default: | |
139 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
140 } | |
141 } | |
142 | |
116 | 143 |
117 | 144 |
118 static const int PRIORITY_HIGH = -100; | 145 static const int PRIORITY_HIGH = -100; |
119 static const int PRIORITY_LOW = 100; | 146 static const int PRIORITY_LOW = 100; |
120 static const int PRIORITY_NORMAL = 0; | 147 static const int PRIORITY_NORMAL = 0; |
1890 lock->Invalidate(); | 1917 lock->Invalidate(); |
1891 } | 1918 } |
1892 } | 1919 } |
1893 } | 1920 } |
1894 | 1921 |
1895 void SetMouseButtonActions(OrthancStone::MouseAction leftAction, | 1922 |
1896 OrthancStone::MouseAction middleAction, | 1923 |
1897 OrthancStone::MouseAction rightAction) | 1924 class Interactor : public OrthancStone::DefaultViewportInteractor |
1898 { | 1925 { |
1899 std::unique_ptr<OrthancStone::DefaultViewportInteractor> interactor( | 1926 private: |
1900 new OrthancStone::DefaultViewportInteractor); | 1927 WebViewerAction leftAction_; |
1901 | 1928 WebViewerAction middleAction_; |
1902 interactor->SetLeftButtonAction(leftAction); | 1929 WebViewerAction rightAction_; |
1903 interactor->SetMiddleButtonAction(middleAction); | 1930 |
1904 interactor->SetRightButtonAction(rightAction); | 1931 bool IsAction(const OrthancStone::PointerEvent& event, |
1905 | 1932 WebViewerAction action) |
1933 { | |
1934 switch (event.GetMouseButton()) | |
1935 { | |
1936 case OrthancStone::MouseButton_Left: | |
1937 return (leftAction_ == action); | |
1938 | |
1939 case OrthancStone::MouseButton_Middle: | |
1940 return (middleAction_ == action); | |
1941 | |
1942 case OrthancStone::MouseButton_Right: | |
1943 return (rightAction_ == action); | |
1944 | |
1945 default: | |
1946 return false; | |
1947 } | |
1948 } | |
1949 | |
1950 public: | |
1951 Interactor(WebViewerAction leftAction, | |
1952 WebViewerAction middleAction, | |
1953 WebViewerAction rightAction) : | |
1954 leftAction_(leftAction), | |
1955 middleAction_(middleAction), | |
1956 rightAction_(rightAction) | |
1957 { | |
1958 SetLeftButtonAction(ConvertWebViewerAction(leftAction)); | |
1959 SetMiddleButtonAction(ConvertWebViewerAction(middleAction)); | |
1960 SetRightButtonAction(ConvertWebViewerAction(rightAction)); | |
1961 } | |
1962 | |
1963 virtual OrthancStone::IFlexiblePointerTracker* CreateTracker( | |
1964 boost::shared_ptr<OrthancStone::IViewport> viewport, | |
1965 const OrthancStone::PointerEvent& event, | |
1966 unsigned int viewportWidth, | |
1967 unsigned int viewportHeight) ORTHANC_OVERRIDE | |
1968 { | |
1969 if (IsAction(event, WebViewerAction_Crosshair)) | |
1970 { | |
1971 printf("CROSS-HAIR!\n"); | |
1972 return NULL; | |
1973 } | |
1974 else | |
1975 { | |
1976 return DefaultViewportInteractor::CreateTracker( | |
1977 viewport, event, viewportWidth, viewportHeight); | |
1978 } | |
1979 } | |
1980 }; | |
1981 | |
1982 | |
1983 void SetMouseButtonActions(WebViewerAction leftAction, | |
1984 WebViewerAction middleAction, | |
1985 WebViewerAction rightAction) | |
1986 { | |
1906 assert(viewport_ != NULL); | 1987 assert(viewport_ != NULL); |
1907 viewport_->AcquireInteractor(interactor.release()); | 1988 viewport_->AcquireInteractor(new Interactor(leftAction, middleAction, rightAction)); |
1908 } | 1989 } |
1909 | 1990 |
1910 void FitForPrint() | 1991 void FitForPrint() |
1911 { | 1992 { |
1912 viewport_->FitForPrint(); | 1993 viewport_->FitForPrint(); |
2017 static OrthancStone::DicomSource source_; | 2098 static OrthancStone::DicomSource source_; |
2018 static boost::shared_ptr<FramesCache> cache_; | 2099 static boost::shared_ptr<FramesCache> cache_; |
2019 static boost::shared_ptr<OrthancStone::WebAssemblyLoadersContext> context_; | 2100 static boost::shared_ptr<OrthancStone::WebAssemblyLoadersContext> context_; |
2020 static std::string stringBuffer_; | 2101 static std::string stringBuffer_; |
2021 static bool softwareRendering_ = false; | 2102 static bool softwareRendering_ = false; |
2022 static OrthancStone::MouseAction leftButtonAction_ = OrthancStone::MouseAction_GrayscaleWindowing; | 2103 static WebViewerAction leftButtonAction_ = WebViewerAction_GrayscaleWindowing; |
2023 static OrthancStone::MouseAction middleButtonAction_ = OrthancStone::MouseAction_Pan; | 2104 static WebViewerAction middleButtonAction_ = WebViewerAction_Pan; |
2024 static OrthancStone::MouseAction rightButtonAction_ = OrthancStone::MouseAction_Zoom; | 2105 static WebViewerAction rightButtonAction_ = WebViewerAction_Zoom; |
2025 | 2106 |
2026 | 2107 |
2027 static void FormatTags(std::string& target, | 2108 static void FormatTags(std::string& target, |
2028 const Orthanc::DicomMap& tags) | 2109 const Orthanc::DicomMap& tags) |
2029 { | 2110 { |
2075 else | 2156 else |
2076 { | 2157 { |
2077 return found->second; | 2158 return found->second; |
2078 } | 2159 } |
2079 } | 2160 } |
2080 | |
2081 | |
2082 | |
2083 static OrthancStone::MouseAction ConvertMouseAction(int action) | |
2084 { | |
2085 switch (action) | |
2086 { | |
2087 case MouseAction_GrayscaleWindowing: | |
2088 return OrthancStone::MouseAction_GrayscaleWindowing; | |
2089 | |
2090 case MouseAction_Zoom: | |
2091 return OrthancStone::MouseAction_Zoom; | |
2092 | |
2093 case MouseAction_Pan: | |
2094 return OrthancStone::MouseAction_Pan; | |
2095 | |
2096 case MouseAction_Rotate: | |
2097 return OrthancStone::MouseAction_Rotate; | |
2098 | |
2099 default: | |
2100 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
2101 } | |
2102 } | |
2103 | |
2104 | 2161 |
2105 | 2162 |
2106 extern "C" | 2163 extern "C" |
2107 { | 2164 { |
2108 int main(int argc, char const *argv[]) | 2165 int main(int argc, char const *argv[]) |
2449 int middleAction, | 2506 int middleAction, |
2450 int rightAction) | 2507 int rightAction) |
2451 { | 2508 { |
2452 try | 2509 try |
2453 { | 2510 { |
2454 leftButtonAction_ = ConvertMouseAction(leftAction); | 2511 leftButtonAction_ = static_cast<WebViewerAction>(leftAction); |
2455 middleButtonAction_ = ConvertMouseAction(middleAction); | 2512 middleButtonAction_ = static_cast<WebViewerAction>(middleAction); |
2456 rightButtonAction_ = ConvertMouseAction(rightAction); | 2513 rightButtonAction_ = static_cast<WebViewerAction>(rightAction); |
2457 | 2514 |
2458 for (Viewports::iterator it = allViewports_.begin(); it != allViewports_.end(); ++it) | 2515 for (Viewports::iterator it = allViewports_.begin(); it != allViewports_.end(); ++it) |
2459 { | 2516 { |
2460 assert(it->second != NULL); | 2517 assert(it->second != NULL); |
2461 it->second->SetMouseButtonActions(leftButtonAction_, middleButtonAction_, rightButtonAction_); | 2518 it->second->SetMouseButtonActions(leftButtonAction_, middleButtonAction_, rightButtonAction_); |