Mercurial > hg > orthanc-stone
comparison Samples/Qt/BasicScene.cpp @ 883:30268a0cafca am-dev
basic scene Qt sample working
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 09 Jul 2019 14:34:56 +0200 |
parents | 12b591d5d63c |
children | 56e4e9281076 |
comparison
equal
deleted
inserted
replaced
882:31319fe867b9 | 883:30268a0cafca |
---|---|
144 scene.SetLayer(100, layer.release()); | 144 scene.SetLayer(100, layer.release()); |
145 } | 145 } |
146 } | 146 } |
147 | 147 |
148 | 148 |
149 //void TakeScreenshot(const std::string& target, | |
150 // const Scene2D& scene, | |
151 // unsigned int canvasWidth, | |
152 // unsigned int canvasHeight) | |
153 //{ | |
154 // // Take a screenshot, then save it as PNG file | |
155 // CairoCompositor compositor(scene, canvasWidth, canvasHeight); | |
156 // compositor.SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, FONT_SIZE, Orthanc::Encoding_Latin1); | |
157 // compositor.Refresh(); | |
158 | |
159 // Orthanc::ImageAccessor canvas; | |
160 // compositor.GetCanvas().GetReadOnlyAccessor(canvas); | |
161 | |
162 // Orthanc::Image png(Orthanc::PixelFormat_RGB24, canvas.GetWidth(), canvas.GetHeight(), false); | |
163 // Orthanc::ImageProcessing::Convert(png, canvas); | |
164 | |
165 // Orthanc::PngWriter writer; | |
166 // writer.WriteToFile(target, png); | |
167 //} | |
168 | |
169 | |
170 //void HandleApplicationEvent(ViewportControllerPtr controller, | |
171 // const OpenGLCompositor& compositor, | |
172 // const SDL_Event& event, | |
173 // FlexiblePointerTrackerPtr& activeTracker) | |
174 //{ | |
175 // Scene2D& scene(*controller->GetScene()); | |
176 // if (event.type == SDL_MOUSEMOTION) | |
177 // { | |
178 // int scancodeCount = 0; | |
179 // const uint8_t* keyboardState = SDL_GetKeyboardState(&scancodeCount); | |
180 | |
181 // if (activeTracker.get() == NULL && | |
182 // SDL_SCANCODE_LCTRL < scancodeCount && | |
183 // keyboardState[SDL_SCANCODE_LCTRL]) | |
184 // { | |
185 // // The "left-ctrl" key is down, while no tracker is present | |
186 | |
187 // PointerEvent e; | |
188 // e.AddPosition(compositor.GetPixelCenterCoordinates(event.button.x, event.button.y)); | |
189 | |
190 // ScenePoint2D p = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); | |
191 | |
192 // char buf[64]; | |
193 // sprintf(buf, "(%0.02f,%0.02f)", p.GetX(), p.GetY()); | |
194 | |
195 // if (scene.HasLayer(LAYER_POSITION)) | |
196 // { | |
197 // TextSceneLayer& layer = | |
198 // dynamic_cast<TextSceneLayer&>(scene.GetLayer(LAYER_POSITION)); | |
199 // layer.SetText(buf); | |
200 // layer.SetPosition(p.GetX(), p.GetY()); | |
201 // } | |
202 // else | |
203 // { | |
204 // std::auto_ptr<TextSceneLayer> | |
205 // layer(new TextSceneLayer); | |
206 // layer->SetColor(0, 255, 0); | |
207 // layer->SetText(buf); | |
208 // layer->SetBorder(20); | |
209 // layer->SetAnchor(BitmapAnchor_BottomCenter); | |
210 // layer->SetPosition(p.GetX(), p.GetY()); | |
211 // scene.SetLayer(LAYER_POSITION, layer.release()); | |
212 // } | |
213 // } | |
214 // else | |
215 // { | |
216 // scene.DeleteLayer(LAYER_POSITION); | |
217 // } | |
218 // } | |
219 // else if (event.type == SDL_MOUSEBUTTONDOWN) | |
220 // { | |
221 // PointerEvent e; | |
222 // e.AddPosition(compositor.GetPixelCenterCoordinates(event.button.x, event.button.y)); | |
223 | |
224 // switch (event.button.button) | |
225 // { | |
226 // case SDL_BUTTON_MIDDLE: | |
227 // activeTracker = boost::make_shared<PanSceneTracker>(controller, e); | |
228 // break; | |
229 | |
230 // case SDL_BUTTON_RIGHT: | |
231 // activeTracker = boost::make_shared<ZoomSceneTracker>(controller, | |
232 // e, compositor.GetCanvasHeight()); | |
233 // break; | |
234 | |
235 // case SDL_BUTTON_LEFT: | |
236 // activeTracker = boost::make_shared<RotateSceneTracker>(controller, e); | |
237 // break; | |
238 | |
239 // default: | |
240 // break; | |
241 // } | |
242 // } | |
243 // else if (event.type == SDL_KEYDOWN && | |
244 // event.key.repeat == 0 /* Ignore key bounce */) | |
245 // { | |
246 // switch (event.key.keysym.sym) | |
247 // { | |
248 // case SDLK_s: | |
249 // controller->FitContent(compositor.GetCanvasWidth(), | |
250 // compositor.GetCanvasHeight()); | |
251 // break; | |
252 | |
253 // case SDLK_c: | |
254 // TakeScreenshot("screenshot.png", scene, | |
255 // compositor.GetCanvasWidth(), | |
256 // compositor.GetCanvasHeight()); | |
257 // break; | |
258 | |
259 // default: | |
260 // break; | |
261 // } | |
262 // } | |
263 //} | |
264 | |
265 | |
266 static void GLAPIENTRY OpenGLMessageCallback(GLenum source, | 149 static void GLAPIENTRY OpenGLMessageCallback(GLenum source, |
267 GLenum type, | 150 GLenum type, |
268 GLuint id, | 151 GLuint id, |
269 GLenum severity, | 152 GLenum severity, |
270 GLsizei length, | 153 GLsizei length, |
277 ( type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : "" ), | 160 ( type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : "" ), |
278 type, severity, message ); | 161 type, severity, message ); |
279 } | 162 } |
280 } | 163 } |
281 | 164 |
282 | |
283 //void Run(ViewportControllerPtr controller) | |
284 //{ | |
285 // SdlOpenGLWindow window("Hello", 1024, 768); | |
286 | |
287 // controller->FitContent(window.GetCanvasWidth(), window.GetCanvasHeight()); | |
288 | |
289 // glEnable(GL_DEBUG_OUTPUT); | |
290 // glDebugMessageCallback(OpenGLMessageCallback, 0); | |
291 | |
292 // OpenGLCompositor compositor(window, *controller->GetScene()); | |
293 // compositor.SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, | |
294 // FONT_SIZE, Orthanc::Encoding_Latin1); | |
295 | |
296 // FlexiblePointerTrackerPtr tracker; | |
297 | |
298 // bool stop = false; | |
299 // while (!stop) | |
300 // { | |
301 // compositor.Refresh(); | |
302 | |
303 // SDL_Event event; | |
304 // while (!stop && | |
305 // SDL_PollEvent(&event)) | |
306 // { | |
307 // if (event.type == SDL_QUIT) | |
308 // { | |
309 // stop = true; | |
310 // break; | |
311 // } | |
312 // else if (event.type == SDL_MOUSEMOTION) | |
313 // { | |
314 // if (tracker) | |
315 // { | |
316 // PointerEvent e; | |
317 // e.AddPosition(compositor.GetPixelCenterCoordinates( | |
318 // event.button.x, event.button.y)); | |
319 // tracker->PointerMove(e); | |
320 // } | |
321 // } | |
322 // else if (event.type == SDL_MOUSEBUTTONUP) | |
323 // { | |
324 // if (tracker) | |
325 // { | |
326 // PointerEvent e; | |
327 // e.AddPosition(compositor.GetPixelCenterCoordinates( | |
328 // event.button.x, event.button.y)); | |
329 // tracker->PointerUp(e); | |
330 // if(!tracker->IsAlive()) | |
331 // tracker.reset(); | |
332 // } | |
333 // } | |
334 // else if (event.type == SDL_WINDOWEVENT && | |
335 // event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) | |
336 // { | |
337 // tracker.reset(); | |
338 // compositor.UpdateSize(); | |
339 // } | |
340 // else if (event.type == SDL_KEYDOWN && | |
341 // event.key.repeat == 0 /* Ignore key bounce */) | |
342 // { | |
343 // switch (event.key.keysym.sym) | |
344 // { | |
345 // case SDLK_f: | |
346 // window.GetWindow().ToggleMaximize(); | |
347 // break; | |
348 | |
349 // case SDLK_q: | |
350 // stop = true; | |
351 // break; | |
352 | |
353 // default: | |
354 // break; | |
355 // } | |
356 // } | |
357 | |
358 // HandleApplicationEvent(controller, compositor, event, tracker); | |
359 // } | |
360 | |
361 // SDL_Delay(1); | |
362 // } | |
363 //} | |
364 | |
365 extern void InitGL(); | 165 extern void InitGL(); |
366 | 166 |
367 #include <QApplication> | 167 #include <QApplication> |
368 #include "BasicSceneWindow.h" | 168 #include "BasicSceneWindow.h" |
369 #include "Scene2DInteractor.h" | 169 #include "Scene2DInteractor.h" |
395 | 195 |
396 boost::shared_ptr<OpenGLCompositor> compositor = boost::make_shared<OpenGLCompositor>(window.GetOpenGlWidget(), *controller->GetScene()); | 196 boost::shared_ptr<OpenGLCompositor> compositor = boost::make_shared<OpenGLCompositor>(window.GetOpenGlWidget(), *controller->GetScene()); |
397 compositor->SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, | 197 compositor->SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, |
398 FONT_SIZE, Orthanc::Encoding_Latin1); | 198 FONT_SIZE, Orthanc::Encoding_Latin1); |
399 | 199 |
200 interactor->SetCompositor(compositor); | |
400 window.GetOpenGlWidget().SetCompositor(compositor); | 201 window.GetOpenGlWidget().SetCompositor(compositor); |
401 | 202 |
402 return a.exec(); | 203 return a.exec(); |
403 } | 204 } |
404 | |
405 | |
406 | |
407 | |
408 | |
409 | |
410 | |
411 | |
412 | |
413 | |
414 | |
415 | |
416 // StoneInitialize(); | |
417 // Orthanc::Logging::EnableInfoLevel(true); | |
418 | |
419 // QApplication app(argc, argv); | |
420 | |
421 // OrthancStone::Samples::BasicSceneWindow window; | |
422 | |
423 // QSurfaceFormat requestedFormat; | |
424 // requestedFormat.setVersion( 3, 3 ); | |
425 | |
426 // window.show(); | |
427 | |
428 // QOpenGLContext * context = new QOpenGLContext; | |
429 // context->setFormat( requestedFormat ); | |
430 // context->create(); | |
431 | |
432 // GLenum err = glewInit(); | |
433 // if( GLEW_OK != err ){ | |
434 // qDebug() << "[Error] GLEW failed to initialize. " << (const char*)glewGetErrorString(err); | |
435 // } | |
436 | |
437 // try | |
438 // { | |
439 // MessageBroker broker; | |
440 // ViewportControllerPtr controller = boost::make_shared<ViewportController>( | |
441 // boost::ref(broker)); | |
442 // PrepareScene(controller); | |
443 | |
444 // boost::shared_ptr<OpenGLCompositor> compositor(new OpenGLCompositor(window.GetOpenGlWidget(), *controller->GetScene())); | |
445 | |
446 // compositor->SetFont(0, Orthanc::EmbeddedResources::UBUNTU_FONT, | |
447 // FONT_SIZE, Orthanc::Encoding_Latin1); | |
448 | |
449 // window.SetCompositor(compositor); | |
450 | |
451 // app.exec(); | |
452 // } | |
453 // catch (Orthanc::OrthancException& e) | |
454 // { | |
455 // LOG(ERROR) << "EXCEPTION: " << e.What(); | |
456 // } | |
457 | |
458 | |
459 | |
460 // StoneFinalize(); | |
461 | |
462 // return 0; | |
463 } | 205 } |