ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
vtkScalarBarRepresentationCustom.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
9 
11 #include "vtkNew.h"
12 #include "vtkObjectFactory.h"
13 #include "vtkViewport.h"
14 
15 // #define DEBUG_BOUNDING_BOX
16 #if defined(DEBUG_BOUNDING_BOX)
17 #include "vtkBrush.h"
18 #include "vtkContext2D.h"
19 #include "vtkContextDevice2D.h"
20 #include "vtkPen.h"
21 #endif
22 
23 //-----------------------------------------------------------------------------
25 
26 //-----------------------------------------------------------------------------
29 }
30 
31 //-----------------------------------------------------------------------------
33 
34 //-----------------------------------------------------------------------------
36  // Query scalar bar size given the viewport
38  vtkContext2DScalarBarActor::SafeDownCast(this->GetScalarBarActor());
39  if (!actor) {
40  vtkErrorMacro(
41  << "Actor expected to be of type vtkContext2DScalarBarActor");
42  return 0;
43  }
44 
45  vtkRectf boundingRect = actor->GetBoundingRect();
46 
47 #if defined(DEBUG_BOUNDING_BOX)
48  vtkNew<vtkContext2D> context;
49  vtkNew<vtkContextDevice2D> contextDevice;
50  contextDevice->Begin(viewport);
51  context->Begin(contextDevice.Get());
52  vtkPen* pen = context->GetPen();
53  pen->SetColor(255, 255, 255);
54  vtkBrush* brush = context->GetBrush();
55  brush->SetOpacityF(0.0);
56  double xx = this->PositionCoordinate->GetValue()[0];
57  double yy = this->PositionCoordinate->GetValue()[1];
58  viewport->NormalizedViewportToViewport(xx, yy);
59  viewport->ViewportToNormalizedDisplay(xx, yy);
60  viewport->NormalizedDisplayToDisplay(xx, yy);
61  context->DrawRect(xx + boundingRect.GetX(), yy + boundingRect.GetY(),
62  boundingRect.GetWidth(), boundingRect.GetHeight());
63  context->End();
64  contextDevice->End();
65 #endif
66 
67  // Start with Lower Right corner.
68  int* displaySize = viewport->GetSize();
69 
70  if (this->WindowLocation != AnyLocation) {
71  double pad = 4.0;
72  double x = 0.0;
73  double y = 0.0;
74  switch (this->WindowLocation) {
75  case LowerLeftCorner:
76  x = 0.0 + pad;
77  y = 0.0 + pad;
78  break;
79 
80  case LowerRightCorner:
81  x = displaySize[0] - 1.0 - boundingRect.GetWidth() - pad;
82  y = 0.0 + pad;
83  break;
84 
85  case LowerCenter:
86  x = 0.5 * (displaySize[0] - boundingRect.GetWidth());
87  y = 0.0 + pad;
88  break;
89 
90  case UpperLeftCorner:
91  x = 0.0 + pad;
92  y = displaySize[1] - 1.0 - boundingRect.GetHeight() - pad;
93  break;
94 
95  case UpperRightCorner:
96  x = displaySize[0] - 1.0 - boundingRect.GetWidth() - pad;
97  y = displaySize[1] - 1.0 - boundingRect.GetHeight() - pad;
98  break;
99 
100  case UpperCenter:
101  x = 0.5 * (displaySize[0] - boundingRect.GetWidth());
102  y = displaySize[1] - 1.0 - boundingRect.GetHeight() - pad;
103 
104  default:
105  break;
106  }
107 
108  x -= boundingRect.GetX();
109  y -= boundingRect.GetY();
110 
111  viewport->DisplayToNormalizedDisplay(x, y);
112 
113  this->PositionCoordinate->SetValue(x, y);
114  }
115 
116  return this->Superclass::RenderOverlay(viewport);
117 }
118 
119 //-----------------------------------------------------------------------------
120 void vtkScalarBarRepresentationCustom::PrintSelf(ostream& os,
121  vtkIndent indent) {
122  this->Superclass::PrintSelf(os, indent);
123 
124  os << indent << "WindowLocation: ";
125  switch (this->WindowLocation) {
126  case AnyLocation:
127  os << "AnyLocation";
128  break;
129 
130  case LowerLeftCorner:
131  os << "LowerLeftCorner";
132  break;
133 
134  case LowerRightCorner:
135  os << "LowerRightCorner";
136  break;
137 
138  case LowerCenter:
139  os << "LowerCenter";
140  break;
141 
142  case UpperLeftCorner:
143  os << "UpperLeftCorner";
144  break;
145 
146  case UpperRightCorner:
147  os << "UpperRightCorner";
148  break;
149 
150  case UpperCenter:
151  os << "UpperCenter";
152  break;
153 
154  default:
155  // Do nothing
156  break;
157  }
158  os << endl;
159 }
ImGuiContext * context
Definition: Window.cpp:76
normal_z y
normal_z x
QTextStream & endl(QTextStream &stream)
Definition: QtCompat.h:718
vtkStandardNewMacro(vtkScalarBarRepresentationCustom)