comparison Samples/Sdl/TrackerSampleApp.cpp @ 891:0aff28f15ea2

new abstraction: IViewport
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 10 Jul 2019 18:18:42 +0200
parents 77c96ba899f9
children 0c5201499af8 9c2f6d6b9f4a
comparison
equal deleted inserted replaced
890:77c96ba899f9 891:0aff28f15ea2
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);