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 }