Mercurial > hg > orthanc-stone
comparison Samples/Sdl/TrackerSampleApp.cpp @ 897:9c2f6d6b9f4a am-dev
Merge
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 16 Jul 2019 12:37:29 +0200 |
parents | 6e79e8c9021c 0aff28f15ea2 |
children | f9ae731fdc25 |
comparison
equal
deleted
inserted
replaced
896:875bd6aca5e6 | 897:9c2f6d6b9f4a |
---|---|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 **/ | 19 **/ |
20 | 20 |
21 #include "TrackerSampleApp.h" | 21 #include "TrackerSampleApp.h" |
22 | 22 |
23 #include "../../Applications/Sdl/SdlOpenGLWindow.h" | 23 #include "../../Applications/Sdl/SdlOpenGLContext.h" |
24 | 24 |
25 #include "../../Framework/Scene2D/CairoCompositor.h" | 25 #include "../../Framework/Scene2D/CairoCompositor.h" |
26 #include "../../Framework/Scene2D/ColorTextureSceneLayer.h" | 26 #include "../../Framework/Scene2D/ColorTextureSceneLayer.h" |
27 #include "../../Framework/Scene2D/OpenGLCompositor.h" | 27 #include "../../Framework/Scene2D/OpenGLCompositor.h" |
28 #include "../../Framework/Scene2D/PanSceneTracker.h" | 28 #include "../../Framework/Scene2D/PanSceneTracker.h" |
66 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Wrong tool index"); | 66 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "Wrong tool index"); |
67 } | 67 } |
68 return descs[i]; | 68 return descs[i]; |
69 } | 69 } |
70 | 70 |
71 boost::shared_ptr<Scene2D> TrackerSampleApp::GetScene() | |
72 { | |
73 return controller_->GetScene(); | |
74 } | |
75 | |
76 boost::shared_ptr<const Scene2D> TrackerSampleApp::GetScene() const | |
77 { | |
78 return controller_->GetScene(); | |
79 } | |
80 | |
81 void TrackerSampleApp::SelectNextTool() | 71 void TrackerSampleApp::SelectNextTool() |
82 { | 72 { |
83 currentTool_ = static_cast<GuiTool>(currentTool_ + 1); | 73 currentTool_ = static_cast<GuiTool>(currentTool_ + 1); |
84 if (currentTool_ == GuiTool_LAST) | 74 if (currentTool_ == GuiTool_LAST) |
85 currentTool_ = static_cast<GuiTool>(0);; | 75 currentTool_ = static_cast<GuiTool>(0);; |
100 msg << kv->first << " : " << kv->second << std::endl; | 90 msg << kv->first << " : " << kv->second << std::endl; |
101 } | 91 } |
102 std::string msgS = msg.str(); | 92 std::string msgS = msg.str(); |
103 | 93 |
104 TextSceneLayer* layerP = NULL; | 94 TextSceneLayer* layerP = NULL; |
105 if (GetScene()->HasLayer(FIXED_INFOTEXT_LAYER_ZINDEX)) | 95 if (controller_->GetScene().HasLayer(FIXED_INFOTEXT_LAYER_ZINDEX)) |
106 { | 96 { |
107 TextSceneLayer& layer = dynamic_cast<TextSceneLayer&>( | 97 TextSceneLayer& layer = dynamic_cast<TextSceneLayer&>( |
108 GetScene()->GetLayer(FIXED_INFOTEXT_LAYER_ZINDEX)); | 98 controller_->GetScene().GetLayer(FIXED_INFOTEXT_LAYER_ZINDEX)); |
109 layerP = &layer; | 99 layerP = &layer; |
110 } | 100 } |
111 else | 101 else |
112 { | 102 { |
113 std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer); | 103 std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer); |
115 layer->SetColor(0, 255, 0); | 105 layer->SetColor(0, 255, 0); |
116 layer->SetFontIndex(1); | 106 layer->SetFontIndex(1); |
117 layer->SetBorder(20); | 107 layer->SetBorder(20); |
118 layer->SetAnchor(BitmapAnchor_TopLeft); | 108 layer->SetAnchor(BitmapAnchor_TopLeft); |
119 //layer->SetPosition(0,0); | 109 //layer->SetPosition(0,0); |
120 GetScene()->SetLayer(FIXED_INFOTEXT_LAYER_ZINDEX, layer.release()); | 110 controller_->GetScene().SetLayer(FIXED_INFOTEXT_LAYER_ZINDEX, layer.release()); |
121 } | 111 } |
122 // position the fixed info text in the upper right corner | 112 // position the fixed info text in the upper right corner |
123 layerP->SetText(msgS.c_str()); | 113 layerP->SetText(msgS.c_str()); |
124 double cX = compositor_->GetCanvasWidth() * (-0.5); | 114 double cX = compositor_->GetCanvasWidth() * (-0.5); |
125 double cY = compositor_->GetCanvasHeight() * (-0.5); | 115 double cY = compositor_->GetCanvasHeight() * (-0.5); |
126 GetScene()->GetCanvasToSceneTransform().Apply(cX,cY); | 116 controller_->GetScene().GetCanvasToSceneTransform().Apply(cX,cY); |
127 layerP->SetPosition(cX, cY); | 117 layerP->SetPosition(cX, cY); |
128 } | 118 } |
129 | 119 |
130 void TrackerSampleApp::DisplayFloatingCtrlInfoText(const PointerEvent& e) | 120 void TrackerSampleApp::DisplayFloatingCtrlInfoText(const PointerEvent& e) |
131 { | 121 { |
132 ScenePoint2D p = e.GetMainPosition().Apply(GetScene()->GetCanvasToSceneTransform()); | 122 ScenePoint2D p = e.GetMainPosition().Apply(controller_->GetScene().GetCanvasToSceneTransform()); |
133 | 123 |
134 char buf[128]; | 124 char buf[128]; |
135 sprintf(buf, "S:(%0.02f,%0.02f) C:(%0.02f,%0.02f)", | 125 sprintf(buf, "S:(%0.02f,%0.02f) C:(%0.02f,%0.02f)", |
136 p.GetX(), p.GetY(), | 126 p.GetX(), p.GetY(), |
137 e.GetMainPosition().GetX(), e.GetMainPosition().GetY()); | 127 e.GetMainPosition().GetX(), e.GetMainPosition().GetY()); |
138 | 128 |
139 if (GetScene()->HasLayer(FLOATING_INFOTEXT_LAYER_ZINDEX)) | 129 if (controller_->GetScene().HasLayer(FLOATING_INFOTEXT_LAYER_ZINDEX)) |
140 { | 130 { |
141 TextSceneLayer& layer = | 131 TextSceneLayer& layer = |
142 dynamic_cast<TextSceneLayer&>(GetScene()->GetLayer(FLOATING_INFOTEXT_LAYER_ZINDEX)); | 132 dynamic_cast<TextSceneLayer&>(controller_->GetScene().GetLayer(FLOATING_INFOTEXT_LAYER_ZINDEX)); |
143 layer.SetText(buf); | 133 layer.SetText(buf); |
144 layer.SetPosition(p.GetX(), p.GetY()); | 134 layer.SetPosition(p.GetX(), p.GetY()); |
145 } | 135 } |
146 else | 136 else |
147 { | 137 { |
149 layer->SetColor(0, 255, 0); | 139 layer->SetColor(0, 255, 0); |
150 layer->SetText(buf); | 140 layer->SetText(buf); |
151 layer->SetBorder(20); | 141 layer->SetBorder(20); |
152 layer->SetAnchor(BitmapAnchor_BottomCenter); | 142 layer->SetAnchor(BitmapAnchor_BottomCenter); |
153 layer->SetPosition(p.GetX(), p.GetY()); | 143 layer->SetPosition(p.GetX(), p.GetY()); |
154 GetScene()->SetLayer(FLOATING_INFOTEXT_LAYER_ZINDEX, layer.release()); | 144 controller_->GetScene().SetLayer(FLOATING_INFOTEXT_LAYER_ZINDEX, layer.release()); |
155 } | 145 } |
156 } | 146 } |
157 | 147 |
158 void TrackerSampleApp::HideInfoText() | 148 void TrackerSampleApp::HideInfoText() |
159 { | 149 { |
160 GetScene()->DeleteLayer(FLOATING_INFOTEXT_LAYER_ZINDEX); | 150 controller_->GetScene().DeleteLayer(FLOATING_INFOTEXT_LAYER_ZINDEX); |
161 } | 151 } |
162 | 152 |
163 ScenePoint2D TrackerSampleApp::GetRandomPointInScene() const | 153 ScenePoint2D TrackerSampleApp::GetRandomPointInScene() const |
164 { | 154 { |
165 unsigned int w = compositor_->GetCanvasWidth(); | 155 unsigned int w = compositor_->GetCanvasWidth(); |
177 LOG(TRACE) << "random x = " << x << "random y = " << y; | 167 LOG(TRACE) << "random x = " << x << "random y = " << y; |
178 | 168 |
179 ScenePoint2D p = compositor_->GetPixelCenterCoordinates(x, y); | 169 ScenePoint2D p = compositor_->GetPixelCenterCoordinates(x, y); |
180 LOG(TRACE) << "--> p.GetX() = " << p.GetX() << " p.GetY() = " << p.GetY(); | 170 LOG(TRACE) << "--> p.GetX() = " << p.GetX() << " p.GetY() = " << p.GetY(); |
181 | 171 |
182 ScenePoint2D r = p.Apply(GetScene()->GetCanvasToSceneTransform()); | 172 ScenePoint2D r = p.Apply(controller_->GetScene().GetCanvasToSceneTransform()); |
183 LOG(TRACE) << "--> r.GetX() = " << r.GetX() << " r.GetY() = " << r.GetY(); | 173 LOG(TRACE) << "--> r.GetX() = " << r.GetX() << " r.GetY() = " << r.GetY(); |
184 return r; | 174 return r; |
185 } | 175 } |
186 | 176 |
187 void TrackerSampleApp::CreateRandomMeasureTool() | 177 void TrackerSampleApp::CreateRandomMeasureTool() |
274 | 264 |
275 PointerEvent e; | 265 PointerEvent e; |
276 e.AddPosition(compositor_->GetPixelCenterCoordinates(event.button.x, event.button.y)); | 266 e.AddPosition(compositor_->GetPixelCenterCoordinates(event.button.x, event.button.y)); |
277 | 267 |
278 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 268 ScenePoint2D scenePos = e.GetMainPosition().Apply( |
279 controller_->GetScene()->GetCanvasToSceneTransform()); | 269 controller_->GetScene().GetCanvasToSceneTransform()); |
280 //auto measureTools = GetController()->HitTestMeasureTools(scenePos); | 270 //auto measureTools = GetController()->HitTestMeasureTools(scenePos); |
281 //LOG(TRACE) << "# of hit tests: " << measureTools.size(); | 271 //LOG(TRACE) << "# of hit tests: " << measureTools.size(); |
282 | 272 |
283 // this returns the collection of measuring tools where hit test is true | 273 // this returns the collection of measuring tools where hit test is true |
284 std::vector<boost::shared_ptr<MeasureTool> > measureTools = controller_->HitTestMeasureTools(scenePos); | 274 std::vector<boost::shared_ptr<MeasureTool> > measureTools = controller_->HitTestMeasureTools(scenePos); |
525 | 515 |
526 p[3] = 255; | 516 p[3] = 255; |
527 p[4] = 0; | 517 p[4] = 0; |
528 p[5] = 0; | 518 p[5] = 0; |
529 | 519 |
530 GetScene()->SetLayer(TEXTURE_2x2_1_ZINDEX, new ColorTextureSceneLayer(i)); | 520 controller_->GetScene().SetLayer(TEXTURE_2x2_1_ZINDEX, new ColorTextureSceneLayer(i)); |
531 | 521 |
532 std::auto_ptr<ColorTextureSceneLayer> l(new ColorTextureSceneLayer(i)); | 522 std::auto_ptr<ColorTextureSceneLayer> l(new ColorTextureSceneLayer(i)); |
533 l->SetOrigin(-3, 2); | 523 l->SetOrigin(-3, 2); |
534 l->SetPixelSpacing(1.5, 1); | 524 l->SetPixelSpacing(1.5, 1); |
535 l->SetAngle(20.0 / 180.0 * M_PI); | 525 l->SetAngle(20.0 / 180.0 * M_PI); |
536 GetScene()->SetLayer(TEXTURE_2x2_2_ZINDEX, l.release()); | 526 controller_->GetScene().SetLayer(TEXTURE_2x2_2_ZINDEX, l.release()); |
537 } | 527 } |
538 | 528 |
539 // Texture of 1x1 size | 529 // Texture of 1x1 size |
540 { | 530 { |
541 Orthanc::Image i(Orthanc::PixelFormat_RGB24, 1, 1, false); | 531 Orthanc::Image i(Orthanc::PixelFormat_RGB24, 1, 1, false); |
546 p[2] = 0; | 536 p[2] = 0; |
547 | 537 |
548 std::auto_ptr<ColorTextureSceneLayer> l(new ColorTextureSceneLayer(i)); | 538 std::auto_ptr<ColorTextureSceneLayer> l(new ColorTextureSceneLayer(i)); |
549 l->SetOrigin(-2, 1); | 539 l->SetOrigin(-2, 1); |
550 l->SetAngle(20.0 / 180.0 * M_PI); | 540 l->SetAngle(20.0 / 180.0 * M_PI); |
551 GetScene()->SetLayer(TEXTURE_1x1_ZINDEX, l.release()); | 541 controller_->GetScene().SetLayer(TEXTURE_1x1_ZINDEX, l.release()); |
552 } | 542 } |
553 | 543 |
554 // Some lines | 544 // Some lines |
555 { | 545 { |
556 std::auto_ptr<PolylineSceneLayer> layer(new PolylineSceneLayer); | 546 std::auto_ptr<PolylineSceneLayer> layer(new PolylineSceneLayer); |
577 chain.push_back(ScenePoint2D(4, -4 + dy)); | 567 chain.push_back(ScenePoint2D(4, -4 + dy)); |
578 chain.push_back(ScenePoint2D(-4, -4 + 2.0 * dy)); | 568 chain.push_back(ScenePoint2D(-4, -4 + 2.0 * dy)); |
579 chain.push_back(ScenePoint2D(4, 2)); | 569 chain.push_back(ScenePoint2D(4, 2)); |
580 layer->AddChain(chain, false, 0, 0, 255); | 570 layer->AddChain(chain, false, 0, 0, 255); |
581 | 571 |
582 GetScene()->SetLayer(LINESET_1_ZINDEX, layer.release()); | 572 controller_->GetScene().SetLayer(LINESET_1_ZINDEX, layer.release()); |
583 } | 573 } |
584 | 574 |
585 // Some text | 575 // Some text |
586 { | 576 { |
587 std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer); | 577 std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer); |
588 layer->SetText("Hello"); | 578 layer->SetText("Hello"); |
589 GetScene()->SetLayer(LINESET_2_ZINDEX, layer.release()); | 579 controller_->GetScene().SetLayer(LINESET_2_ZINDEX, layer.release()); |
590 } | 580 } |
591 } | 581 } |
592 | 582 |
593 | 583 |
594 void TrackerSampleApp::DisableTracker() | 584 void TrackerSampleApp::DisableTracker() |
621 | 611 |
622 boost::shared_ptr<IFlexiblePointerTracker> TrackerSampleApp::TrackerHitTest(const PointerEvent & e) | 612 boost::shared_ptr<IFlexiblePointerTracker> TrackerSampleApp::TrackerHitTest(const PointerEvent & e) |
623 { | 613 { |
624 // std::vector<boost::shared_ptr<MeasureTool>> measureTools_; | 614 // std::vector<boost::shared_ptr<MeasureTool>> measureTools_; |
625 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 615 ScenePoint2D scenePos = e.GetMainPosition().Apply( |
626 controller_->GetScene()->GetCanvasToSceneTransform()); | 616 controller_->GetScene().GetCanvasToSceneTransform()); |
627 | 617 |
628 std::vector<boost::shared_ptr<MeasureTool> > measureTools = controller_->HitTestMeasureTools(scenePos); | 618 std::vector<boost::shared_ptr<MeasureTool> > measureTools = controller_->HitTestMeasureTools(scenePos); |
629 | 619 |
630 if (measureTools.size() > 0) | 620 if (measureTools.size() > 0) |
631 { | 621 { |
655 | 645 |
656 void TrackerSampleApp::Run() | 646 void TrackerSampleApp::Run() |
657 { | 647 { |
658 // False means we do NOT let Windows treat this as a legacy application | 648 // False means we do NOT let Windows treat this as a legacy application |
659 // that needs to be scaled | 649 // that needs to be scaled |
660 SdlOpenGLWindow window("Hello", 1024, 1024, false); | 650 SdlOpenGLContext window("Hello", 1024, 1024, false); |
661 | 651 |
662 controller_->FitContent(window.GetCanvasWidth(), window.GetCanvasHeight()); | 652 controller_->FitContent(window.GetCanvasWidth(), window.GetCanvasHeight()); |
663 | 653 |
664 glEnable(GL_DEBUG_OUTPUT); | 654 glEnable(GL_DEBUG_OUTPUT); |
665 glDebugMessageCallback(OpenGLMessageCallback, 0); | 655 glDebugMessageCallback(OpenGLMessageCallback, 0); |
685 } | 675 } |
686 else if (event.type == SDL_WINDOWEVENT && | 676 else if (event.type == SDL_WINDOWEVENT && |
687 event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) | 677 event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) |
688 { | 678 { |
689 DisableTracker(); // was: tracker.reset(NULL); | 679 DisableTracker(); // was: tracker.reset(NULL); |
690 compositor_->UpdateSize(); | |
691 } | 680 } |
692 else if (event.type == SDL_KEYDOWN && | 681 else if (event.type == SDL_KEYDOWN && |
693 event.key.repeat == 0 /* Ignore key bounce */) | 682 event.key.repeat == 0 /* Ignore key bounce */) |
694 { | 683 { |
695 switch (event.key.keysym.sym) | 684 switch (event.key.keysym.sym) |