3#include <NDEVR/Scanner3D.h>
4#include <NDEVR/ApplicationOptions.h>
5#include <NDEVR/Matrix.h>
7#include <NDEVR/Scene.h>
8#include <NDEVR/Pointer.h>
9#include <NDEVR/Thread.h>
10#include <NDEVR/INIInterface.h>
15 class PointMeasureModel;
19 class CarlsonScannerOrientation;
20 class CarlsonScannerConnection;
21 class CarlsonScannerBattery;
22 class CarlsonScannerMotor;
30 class TOTAL_STATION_API TotalStation final :
public Scanner3D,
public INIInterface
36 TotalStation(DesignObjectLookup* manager, QObject* parent =
nullptr);
41 bool isConnected()
const override;
45 [[nodiscard]]
virtual Light* light() const final override;
48 [[nodiscard]] virtual Light* redDot() const final override;
51 [[nodiscard]] virtual OrientationSensor* orientationSensor() const final override;
54 [[nodiscard]] virtual Connection* connection() const final override;
57 [[nodiscard]] virtual PositionSensor* positionSensor() const final override;
60 [[nodiscard]] virtual RangeSensor* rangeSensor() const final override;
63 [[nodiscard]] virtual TranslatedString scannerInfo() const final override;
66 [[nodiscard]] virtual Buffer<Battery*> batteries() const final override;
69 [[nodiscard]] virtual Buffer<TemperatureSensor*> temperatureSensors() const final override;
72 [[nodiscard]] virtual DistanceEncoder* distanceEncoder() const final override;
75 void setConstantLaserFire(
bool constant_fire);
78 void setModelFile(const File& file);
81 virtual
void endUpdates() override;
84 virtual
void startScan(const Scanner3DScanSettings& settings) final override;
87 virtual RangeSensor* createRangeSensor() final override;
89 virtual
void stopScan() final override;
91 virtual
void pauseScan() final override;
93 virtual
void resumeScan() final override;
95 virtual
void createScanner() final override;
97 void addReverseOrientation();
102 void addGridOrientation(sint04 range, const Angle<fltp08>& step, const Angle<fltp08>& offset);
104 void createScannerModel() final override;
106 void checkScanStep();
108 void recordLocation();
111 void orientHead(const Vector<3, Angle<fltp08>>& head_orientation) final override;
115 bool executeManualCommand(const String& command) final override;
118 virtual
void setScannerState(ScannerState scanner_state) final override;
121 virtual
void showWarning(const TranslatedString& error) const final override;
125 [[nodiscard]] virtual
bool supportsState(ScannerState state) const final override;
128 [[nodiscard]] virtual TimeSpan updateInterval() const final override;
132 [[nodiscard]] virtual TimeSpan getScanTime(const Scanner3DScanSettings& settings) const final override;
135 [[nodiscard]]
bool useCalibratedScan() const final override;
138 [[nodiscard]] ScannerState scannerState() const final override;
141 [[nodiscard]] virtual
bool supportsScanImageRaster() const final override;
145 [[nodiscard]] virtual RasterInfo defaultRasterInfo(const UUID& profile) const final override;
148 [[nodiscard]] virtual Buffer<ScanProfile> availableScanProfiles() const final override;
151 [[nodiscard]] Bounds<2, Angle<fltp08>> scanBounds() const final override;
154 [[nodiscard]] virtual Matrix<fltp08> cameraTransform() const final override;
157 [[nodiscard]] virtual
bool usingPrism() const override;
160 fltp08 calculateDistance();
163 Vertex<3, fltp08> targetPosition() const;
167 virtual FileRequest scanModelFile() const override;
170 Matrix<fltp08> scanModelFileTransform() const override;
173 Matrix<fltp08> prismModelFileTransform() const override;
176 virtual
void update(Time time) override;
179 void onConnectedUpdate(const Time& current);
181 void parkDevice() override;
185 Matrix<fltp08> laserTransform(const Vector<3, Angle<fltp08>>& head_angle) const override;
188 virtual Matrix<fltp08> scanTransform() const override;
192 Vector<3, Angle<fltp08>> pointToHeadAngle(Vertex<3, fltp08> point) const override;
195 virtual
void getINI(INIFactory& factory) override;
197 Time m_last_distance_update_time = Time(0);
198 Scene m_measurement_points;
199 Vector<2, Angle<fltp08>> m_current_target = Constant<Vector<2, Angle<fltp08>>>::Invalid;
200 Buffer<Vector<2, Angle<fltp08>>> m_angle_targets;
201 DynamicPointer<Camera> m_camera_model;
202 MadgwickOrientationSensor* m_orientation =
nullptr;
203 PositionSensor* m_position_sensor =
nullptr;
204 DistanceEncoder* m_distance_encoder =
nullptr;
205 Light* m_light =
nullptr;
206 Light* m_red_dot =
nullptr;
208 bool m_use_gnss = false;
209 bool m_constant_laser_fire = false;
210 bool m_auto_update_model = true;
211 fltp08 m_max_range = 100.0;
212 uint04 m_measure_initial_size = Constant<uint04>::Invalid;
213 PointMeasureModel* m_measure_model;
A core class where all Design Objects including models, materials, and geometries are stored.
Contains methods for easily reading and writing to an INI file including efficient casting,...
Serves as the primary program interface for processes to report issues and allows any number of LogSt...
Used to calculate madgick orientation given sensor streams for gyro and optionally magnetometer(s) an...
Forward declaration for distance encoder device.
A specific channel of communication within the SocketIO framework.
The primary namespace for the NDEVR SDK.
A FileRequest bundles format data as well as a particular file.