Mercurial > hg > orthanc-stone
view OrthancStone/Sources/StoneInitialization.cpp @ 1515:b750b6eab453
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 Jul 2020 20:52:35 +0200 |
parents | 244ad1e4e76a |
children | 5887a4f8594b |
line wrap: on
line source
/** * Stone of Orthanc * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. **/ #include "StoneInitialization.h" #if !defined(ORTHANC_ENABLE_SDL) # error Macro ORTHANC_ENABLE_SDL must be defined #endif #if !defined(ORTHANC_ENABLE_SSL) # error Macro ORTHANC_ENABLE_SSL must be defined #endif #if !defined(ORTHANC_ENABLE_CURL) # error Macro ORTHANC_ENABLE_CURL must be defined #endif #if !defined(ORTHANC_ENABLE_DCMTK) # error Macro ORTHANC_ENABLE_DCMTK must be defined # if !defined(DCMTK_VERSION_NUMBER) # error Macro DCMTK_VERSION_NUMBER must be defined # endif #endif #if ORTHANC_ENABLE_SDL == 1 # include "Viewport/SdlWindow.h" #endif #if ORTHANC_ENABLE_CURL == 1 # include <HttpClient.h> #endif #if ORTHANC_ENABLE_DCMTK == 1 # include <DicomParsing/FromDcmtkBridge.h> #endif #if ORTHANC_ENABLE_WASM == 1 static double viewportsTimeout_ = 1000; static std::unique_ptr<OrthancStone::WebGLViewportsRegistry> viewportsRegistry_; #endif #include "Toolbox/LinearAlgebra.h" #include <Logging.h> #include <OrthancException.h> #include <Toolbox.h> #include <locale> namespace OrthancStone { void StoneInitialize(void* pluginContext) { if (pluginContext != NULL) { Orthanc::Logging::InitializePluginContext(pluginContext); } else { Orthanc::Logging::Initialize(); } #if ORTHANC_ENABLE_SSL == 1 // Must be before curl Orthanc::Toolbox::InitializeOpenSsl(); #endif #if ORTHANC_ENABLE_CURL == 1 Orthanc::HttpClient::GlobalInitialize(); # if ORTHANC_ENABLE_SSL == 1 Orthanc::HttpClient::ConfigureSsl(false, ""); # endif #endif #if ORTHANC_ENABLE_DCMTK == 1 Orthanc::FromDcmtkBridge::InitializeDictionary(true); Orthanc::FromDcmtkBridge::InitializeCodecs(); # if DCMTK_VERSION_NUMBER <= 360 OFLog::configure(OFLogger::FATAL_LOG_LEVEL); # else OFLog::configure(OFLogger::OFF_LOG_LEVEL); # endif #endif /** * This call is necessary to make "boost::lexical_cast<>" work in * a consistent way in the presence of "double" or "float", and of * a numeric locale that replaces dot (".") by comma (",") as the * decimal separator. * https://stackoverflow.com/a/18981514/881731 **/ std::locale::global(std::locale::classic()); { // Run-time checks of locale settings, to be run after Qt has // been initialized, as Qt changes locale settings { OrthancStone::Vector v; if (!OrthancStone::LinearAlgebra::ParseVector(v, "1.3671875\\-1.3671875") || v.size() != 2 || !OrthancStone::LinearAlgebra::IsNear(1.3671875f, v[0]) || !OrthancStone::LinearAlgebra::IsNear(-1.3671875f, v[1])) { throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Error in the locale settings, giving up"); } } { Json::Value dicomweb = Json::objectValue; dicomweb["00280030"] = Json::objectValue; dicomweb["00280030"]["vr"] = "DS"; dicomweb["00280030"]["Value"] = Json::arrayValue; dicomweb["00280030"]["Value"].append(1.2f); dicomweb["00280030"]["Value"].append(-1.5f); Orthanc::DicomMap source; source.FromDicomWeb(dicomweb); std::string s; OrthancStone::Vector v; if (!source.LookupStringValue(s, Orthanc::DICOM_TAG_PIXEL_SPACING, false) || !OrthancStone::LinearAlgebra::ParseVector(v, s) || v.size() != 2 || !OrthancStone::LinearAlgebra::IsNear(1.2f, v[0]) || !OrthancStone::LinearAlgebra::IsNear(-1.5f, v[1])) { throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Error in the locale settings, giving up"); } } } #if ORTHANC_ENABLE_SDL == 1 OrthancStone::SdlWindow::GlobalInitialize(); #endif } void StoneFinalize() { #if ORTHANC_ENABLE_WASM == 1 viewportsRegistry_.reset(); #endif #if ORTHANC_ENABLE_SDL == 1 OrthancStone::SdlWindow::GlobalFinalize(); #endif #if ORTHANC_ENABLE_DCMTK == 1 Orthanc::FromDcmtkBridge::FinalizeCodecs(); #endif #if ORTHANC_ENABLE_CURL == 1 Orthanc::HttpClient::GlobalFinalize(); #endif #if ORTHANC_ENABLE_SSL == 1 Orthanc::Toolbox::FinalizeOpenSsl(); #endif Orthanc::Logging::Finalize(); } #if ORTHANC_ENABLE_WASM == 1 void SetWebGLViewportsRegistryTimeout(double timeout) { if (viewportsRegistry_.get()) { throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); } else { viewportsTimeout_ = timeout; } } #endif #if ORTHANC_ENABLE_WASM == 1 WebGLViewportsRegistry& GetWebGLViewportsRegistry() { if (viewportsRegistry_.get() == NULL) { viewportsRegistry_.reset(new WebGLViewportsRegistry(viewportsTimeout_)); } return *viewportsRegistry_; } #endif }