ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ScaleBarWidget.h
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 
8 #pragma once
9 
10 #include <vtkActor2D.h>
11 #include <vtkCamera.h>
12 #include <vtkLineSource.h>
13 #include <vtkPolyDataMapper2D.h>
14 #include <vtkRenderWindowInteractor.h>
15 #include <vtkRenderer.h>
16 #include <vtkSmartPointer.h>
17 #include <vtkTextActor.h>
18 
19 // Qt version compatibility handling
20 #include <QApplication>
21 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
22 #include <QDesktopWidget>
23 #endif
24 #include <QScreen>
25 
27 public:
28  ScaleBarWidget(vtkRenderer* renderer);
30  void update(vtkRenderer* renderer, vtkRenderWindowInteractor* interactor);
31  void setVisible(bool visible);
32 
33 private:
36  vtkSmartPointer<vtkActor2D> leftTickActor; // Left tick mark
37  vtkSmartPointer<vtkActor2D> rightTickActor; // Right tick mark
38  double lastLength = 0.0;
39  bool visible = true;
40  double dpiScale = 1.0;
41 
42  // DPI retrieval method compatible with different Qt versions
43  double getDPIScale();
44 
45  // Cross-platform font size optimization function
46  int getOptimizedFontSize(int baseFontSize = 18);
47 
48  // Cross-platform DPI scaling function
49  double getPlatformAwareDPIScale();
50 
51  // Create tick mark actor
52  vtkSmartPointer<vtkActor2D> createTickActor(double x,
53  double y,
54  double length);
55 };
ScaleBarWidget(vtkRenderer *renderer)
void update(vtkRenderer *renderer, vtkRenderWindowInteractor *interactor)
void setVisible(bool visible)
normal_z y
normal_z x