ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ecvTracePolylineTool.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 // LOCAL
11 #include "ecvOverlayDialog.h"
12 #include "ecvPickingListener.h"
13 
14 // CV_DB_LIB
15 #include <ecvHObject.h>
16 
17 // SYSTEM
18 #include <set>
19 
20 // GUI
21 #include <ui_tracePolylineDlg.h>
22 
23 class ccPolyline;
24 class ccPointCloud;
25 class ccPickingHub;
26 
29  public ccPickingListener,
30  public Ui::TracePolyLineDlg {
31  Q_OBJECT
32 
33 public:
35  explicit ccTracePolylineTool(ccPickingHub* pickingHub, QWidget* parent);
37  virtual ~ccTracePolylineTool();
38 
39  // inherited from ccOverlayDialog
40  virtual bool linkWith(QWidget* win) override;
41  virtual bool start() override;
42  virtual void stop(bool accepted) override;
43 
44 protected slots:
45 
46  void apply();
47  void cancel();
48  void exportLine();
49  inline void continueEdition() { restart(false); }
50  inline void resetLine() { restart(true); }
51 
52  // void handlePickedItem(ccHObject*, unsigned, int, int, const CCVector3&);
53  // void addPointToPolyline(int x, int y);
54  void closePolyLine(int x = 0,
55  int y = 0); // arguments for compatibility with
56  // ccGlWindow::rightButtonClicked signal
57 
58  void updatePolyLineTip(int x, int y, Qt::MouseButtons buttons);
59 
60  void onWidthSizeChanged(int);
61 
63  void onShortcutTriggered(int);
64 
66  virtual void onItemPicked(const PickedItem& pi) override;
67 
68 protected:
70  void restart(bool reset);
71 
72  void resetTip();
73  void updateTip();
74  void resetPoly3D();
75  void updatePoly3D();
76 
78  ccPolyline* polylineOverSampling(unsigned steps) const;
79 
81  struct SegmentGLParams {
83  SegmentGLParams(int x, int y);
86  };
87 
92 
97 
99  std::vector<SegmentGLParams> m_segmentParams;
100 
102  bool m_done;
103 
106 };
#define slots
Generic overlay dialog interface.
Point/triangle picking hub.
Definition: ecvPickingHub.h:29
Point/triangle picking listener interface.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Colored polyline.
Definition: ecvPolyline.h:24
Graphical Polyline Tracing tool.
ccPointCloud * m_poly3DVertices
3D polyline vertices
ccPolyline * m_poly3D
3D polyline
void restart(bool reset)
Restarts the edition mode.
void onShortcutTriggered(int)
To capture overridden shortcuts (pause button, etc.)
virtual void onItemPicked(const PickedItem &pi) override
Inherited from ccPickingListener.
ccPolyline * polylineOverSampling(unsigned steps) const
Oversamples the active 3D polyline.
virtual ~ccTracePolylineTool()
Destructor.
void updatePolyLineTip(int x, int y, Qt::MouseButtons buttons)
bool m_done
Current process state.
ccTracePolylineTool(ccPickingHub *pickingHub, QWidget *parent)
Default constructor.
ccPointCloud * m_polyTipVertices
2D polyline vertices
virtual void stop(bool accepted) override
Stops process/dialog.
ccPolyline * m_polyTip
2D polyline (for the currently edited part)
std::vector< SegmentGLParams > m_segmentParams
Viewport parameters use to draw each segment of the polyline.
ccPickingHub * m_pickingHub
Picking hub.
void closePolyLine(int x=0, int y=0)
virtual bool linkWith(QWidget *win) override
Links the overlay dialog with a MDI window.
virtual bool start() override
Starts process.
OpenGL camera parameters.
Viewport parameters (used for picking)