Mercurial > hg > orthanc-stone
comparison Samples/WebAssembly/BasicScene.cpp @ 897:9c2f6d6b9f4a am-dev
Merge
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 16 Jul 2019 12:37:29 +0200 |
parents | 6073c980323a 50cd372e2460 |
children | 2d8ab34c8c91 |
comparison
equal
deleted
inserted
replaced
896:875bd6aca5e6 | 897:9c2f6d6b9f4a |
---|---|
31 // From Orthanc framework | 31 // From Orthanc framework |
32 #include <Core/Images/Image.h> | 32 #include <Core/Images/Image.h> |
33 #include <Core/Logging.h> | 33 #include <Core/Logging.h> |
34 #include <Core/OrthancException.h> | 34 #include <Core/OrthancException.h> |
35 | 35 |
36 #include "../Shared/SharedBasicScene.h" | 36 void PrepareScene(OrthancStone::Scene2D& scene) |
37 { | |
38 using namespace OrthancStone; | |
39 | |
40 // Texture of 2x2 size | |
41 if (1) | |
42 { | |
43 Orthanc::Image i(Orthanc::PixelFormat_RGB24, 2, 2, false); | |
44 | |
45 uint8_t *p = reinterpret_cast<uint8_t*>(i.GetRow(0)); | |
46 p[0] = 255; | |
47 p[1] = 0; | |
48 p[2] = 0; | |
49 | |
50 p[3] = 0; | |
51 p[4] = 255; | |
52 p[5] = 0; | |
53 | |
54 p = reinterpret_cast<uint8_t*>(i.GetRow(1)); | |
55 p[0] = 0; | |
56 p[1] = 0; | |
57 p[2] = 255; | |
58 | |
59 p[3] = 255; | |
60 p[4] = 0; | |
61 p[5] = 0; | |
62 | |
63 scene.SetLayer(12, new ColorTextureSceneLayer(i)); | |
64 | |
65 std::auto_ptr<ColorTextureSceneLayer> l(new ColorTextureSceneLayer(i)); | |
66 l->SetOrigin(-3, 2); | |
67 l->SetPixelSpacing(1.5, 1); | |
68 l->SetAngle(20.0 / 180.0 * M_PI); | |
69 scene.SetLayer(14, l.release()); | |
70 } | |
71 | |
72 // Texture of 1x1 size | |
73 if (1) | |
74 { | |
75 Orthanc::Image i(Orthanc::PixelFormat_RGB24, 1, 1, false); | |
76 | |
77 uint8_t *p = reinterpret_cast<uint8_t*>(i.GetRow(0)); | |
78 p[0] = 255; | |
79 p[1] = 0; | |
80 p[2] = 0; | |
81 | |
82 std::auto_ptr<ColorTextureSceneLayer> l(new ColorTextureSceneLayer(i)); | |
83 l->SetOrigin(-2, 1); | |
84 l->SetAngle(20.0 / 180.0 * M_PI); | |
85 scene.SetLayer(13, l.release()); | |
86 } | |
87 | |
88 // Some lines | |
89 if (1) | |
90 { | |
91 std::auto_ptr<PolylineSceneLayer> layer(new PolylineSceneLayer); | |
92 | |
93 layer->SetThickness(1); | |
94 | |
95 PolylineSceneLayer::Chain chain; | |
96 chain.push_back(ScenePoint2D(0 - 0.5, 0 - 0.5)); | |
97 chain.push_back(ScenePoint2D(0 - 0.5, 2 - 0.5)); | |
98 chain.push_back(ScenePoint2D(2 - 0.5, 2 - 0.5)); | |
99 chain.push_back(ScenePoint2D(2 - 0.5, 0 - 0.5)); | |
100 layer->AddChain(chain, true, 255, 0, 0); | |
101 | |
102 chain.clear(); | |
103 chain.push_back(ScenePoint2D(-5, -5)); | |
104 chain.push_back(ScenePoint2D(5, -5)); | |
105 chain.push_back(ScenePoint2D(5, 5)); | |
106 chain.push_back(ScenePoint2D(-5, 5)); | |
107 layer->AddChain(chain, true, 0, 255, 0); | |
108 | |
109 double dy = 1.01; | |
110 chain.clear(); | |
111 chain.push_back(ScenePoint2D(-4, -4)); | |
112 chain.push_back(ScenePoint2D(4, -4 + dy)); | |
113 chain.push_back(ScenePoint2D(-4, -4 + 2.0 * dy)); | |
114 chain.push_back(ScenePoint2D(4, 2)); | |
115 layer->AddChain(chain, false, 0, 0, 255); | |
116 | |
117 scene.SetLayer(50, layer.release()); | |
118 } | |
119 | |
120 // Some text | |
121 if (1) | |
122 { | |
123 std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer); | |
124 layer->SetText("Hello"); | |
125 scene.SetLayer(100, layer.release()); | |
126 } | |
127 } | |
128 | |
37 | 129 |
38 std::auto_ptr<OrthancStone::WebAssemblyViewport> viewport1_; | 130 std::auto_ptr<OrthancStone::WebAssemblyViewport> viewport1_; |
39 std::auto_ptr<OrthancStone::WebAssemblyViewport> viewport2_; | 131 std::auto_ptr<OrthancStone::WebAssemblyViewport> viewport2_; |
40 std::auto_ptr<OrthancStone::WebAssemblyViewport> viewport3_; | 132 std::auto_ptr<OrthancStone::WebAssemblyViewport> viewport3_; |
41 OrthancStone::MessageBroker broker_; | 133 boost::shared_ptr<OrthancStone::ViewportController> controller1_; |
134 boost::shared_ptr<OrthancStone::ViewportController> controller2_; | |
135 boost::shared_ptr<OrthancStone::ViewportController> controller3_; | |
136 OrthancStone::MessageBroker broker_; | |
137 | |
42 | 138 |
43 EM_BOOL OnWindowResize( | 139 EM_BOOL OnWindowResize( |
44 int eventType, const EmscriptenUiEvent *uiEvent, void *userData) | 140 int eventType, const EmscriptenUiEvent *uiEvent, void *userData) |
45 { | 141 { |
46 if (viewport1_.get() != NULL) | 142 if (viewport1_.get() != NULL) |
72 } | 168 } |
73 | 169 |
74 EMSCRIPTEN_KEEPALIVE | 170 EMSCRIPTEN_KEEPALIVE |
75 void Initialize() | 171 void Initialize() |
76 { | 172 { |
77 viewport1_.reset( | 173 viewport1_.reset(new OrthancStone::WebAssemblyViewport("mycanvas1")); |
78 new OrthancStone::WebAssemblyViewport(broker_, "mycanvas1")); | |
79 PrepareScene(viewport1_->GetScene()); | 174 PrepareScene(viewport1_->GetScene()); |
80 viewport1_->UpdateSize(); | 175 viewport1_->UpdateSize(); |
81 | 176 |
82 viewport2_.reset( | 177 viewport2_.reset(new OrthancStone::WebAssemblyViewport("mycanvas2")); |
83 new OrthancStone::WebAssemblyViewport(broker_, "mycanvas2")); | |
84 PrepareScene(viewport2_->GetScene()); | 178 PrepareScene(viewport2_->GetScene()); |
85 viewport2_->UpdateSize(); | 179 viewport2_->UpdateSize(); |
86 | 180 |
87 viewport3_.reset( | 181 viewport3_.reset(new OrthancStone::WebAssemblyViewport("mycanvas3")); |
88 new OrthancStone::WebAssemblyViewport(broker_, "mycanvas3")); | |
89 PrepareScene(viewport3_->GetScene()); | 182 PrepareScene(viewport3_->GetScene()); |
90 viewport3_->UpdateSize(); | 183 viewport3_->UpdateSize(); |
91 | 184 |
185 viewport1_->GetCompositor().SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, | |
186 FONT_SIZE, Orthanc::Encoding_Latin1); | |
187 viewport2_->GetCompositor().SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, | |
188 FONT_SIZE, Orthanc::Encoding_Latin1); | |
189 viewport3_->GetCompositor().SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, | |
190 FONT_SIZE, Orthanc::Encoding_Latin1); | |
191 | |
192 controller1_.reset(new OrthancStone::ViewportController(boost::make_shared<OrthancStone::UndoStack>(), broker_, *viewport1_)); | |
193 controller2_.reset(new OrthancStone::ViewportController(boost::make_shared<OrthancStone::UndoStack>(), broker_, *viewport2_)); | |
194 controller3_.reset(new OrthancStone::ViewportController(boost::make_shared<OrthancStone::UndoStack>(), broker_, *viewport3_)); | |
195 | |
196 controller1_->FitContent(viewport1_->GetCanvasWidth(), viewport1_->GetCanvasHeight()); | |
197 controller2_->FitContent(viewport2_->GetCanvasWidth(), viewport2_->GetCanvasHeight()); | |
198 controller3_->FitContent(viewport3_->GetCanvasWidth(), viewport3_->GetCanvasHeight()); | |
199 | |
200 viewport1_->Refresh(); | |
201 viewport2_->Refresh(); | |
202 viewport3_->Refresh(); | |
203 | |
204 SetupEvents("mycanvas1", controller1_); | |
205 SetupEvents("mycanvas2", controller2_); | |
206 SetupEvents("mycanvas3", controller3_); | |
207 | |
92 emscripten_set_resize_callback("#window", NULL, false, OnWindowResize); | 208 emscripten_set_resize_callback("#window", NULL, false, OnWindowResize); |
93 } | 209 } |
94 } | 210 } |