ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
cvGenericSelectionTool.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 <vector>
11 
12 #include "cvSelectionBase.h"
13 #include "cvSelectionData.h"
14 // cvSelectionTypes.h merged into cvSelectionData.h
15 
16 // VTK includes (need full definitions for template instantiation)
17 #include <vtkCellPicker.h> // Full definition needed for vtkSmartPointer<vtkCellPicker>
18 #include <vtkHardwareSelector.h> // Full definition needed for vtkSmartPointer<vtkHardwareSelector>
19 #include <vtkPointPicker.h> // Full definition needed for vtkSmartPointer<vtkPointPicker>
20 #include <vtkSmartPointer.h> // For vtkSmartPointer template
21 #include <vtkType.h> // For vtkIdType
22 
23 // Forward declarations
24 class vtkRenderer;
25 class vtkSelection;
26 class vtkRenderWindowInteractor;
29 
48 public:
54 
60 
62  : cvSelectionBase(),
63  m_manager(nullptr),
64  m_useHardwareSelection(false),
65  m_captureZValues(true),
66  m_multipleSelectionMode(false),
67  m_interactor(nullptr),
68  m_renderer(nullptr) {}
69 
70  ~cvGenericSelectionTool() override = default;
71 
77  m_manager = manager;
78  }
79 
84  cvViewSelectionManager* getSelectionManager() const { return m_manager; }
85 
90  cvSelectionPipeline* getSelectionPipeline() const;
91 
111  vtkPolyData* getPolyDataForSelection(
112  const cvSelectionData* selectionData = nullptr) override;
113 
114 protected:
115  // Note: Visualizer access methods (setVisualizer, getVisualizer, getPCLVis,
116  // hasValidPCLVis, getAllPolyDataFromVisualizer)
117  // are inherited from cvSelectionBase
118 
120 
139  cvSelectionData hardwareSelectAtPoint(
140  int x,
141  int y,
144 
152  cvSelectionData hardwareSelectInRegion(
153  const int region[4],
156 
166  QVector<cvActorSelectionInfo> getActorsAtPoint(int x, int y);
167 
169 
171 
183  void setUseHardwareSelection(bool enable) {
184  m_useHardwareSelection = enable;
185  }
186 
190  bool useHardwareSelection() const { return m_useHardwareSelection; }
191 
196  void setCaptureZValues(bool capture) { m_captureZValues = capture; }
197 
202  void setMultipleSelectionMode(bool enable) {
203  m_multipleSelectionMode = enable;
204  }
205 
209  bool multipleSelectionMode() const { return m_multipleSelectionMode; }
210 
212 
214 
231  void initializePickers();
232 
243  vtkIdType pickAtPosition(int x, int y, bool selectCells);
244 
253  vtkIdType pickAtCursor(bool selectCells);
254 
259  void setInteractor(vtkRenderWindowInteractor* interactor) {
260  m_interactor = interactor;
261  }
262 
266  vtkRenderWindowInteractor* getInteractor() const { return m_interactor; }
267 
272  void setRenderer(vtkRenderer* renderer) { m_renderer = renderer; }
273 
277  vtkRenderer* getPickingRenderer() const { return m_renderer; }
278 
284  void setPickerTolerance(double cellTolerance, double pointTolerance);
285 
296  vtkActor* getPickedActor(bool selectCells);
297 
306  vtkPolyData* getPickedPolyData(bool selectCells);
307 
315  bool getPickedPosition(bool selectCells, double position[3]);
316 
327  cvSelectionData createSelectionFromPick(vtkIdType pickedId,
328  bool selectCells);
329 
341  cvSelectionData applySelectionModifierUnified(
342  const cvSelectionData& newSelection,
343  const cvSelectionData& currentSelection,
344  int modifier,
345  int fieldAssociation);
346 
348 
349 private:
354  vtkHardwareSelector* getHardwareSelector();
355 
362  vtkHardwareSelector* configureHardwareSelector(const int region[4],
363  int fieldAssociation);
364 
368  QVector<cvActorSelectionInfo> extractActorInfo(
369  vtkHardwareSelector* selector, vtkSelection* vtkSel);
370 
374  cvSelectionData convertSelection(
375  vtkSelection* vtkSel,
376  const QVector<cvActorSelectionInfo>& actorInfos);
377 
381  cvSelectionData applyModifier(const cvSelectionData& newSelection,
382  const cvSelectionData& currentSelection,
383  SelectionModifier modifier);
384 
388  vtkRenderer* getRenderer();
389 
390 protected:
391  // Note: m_viewer is inherited from cvSelectionBase
392 
395 
399  vtkRenderWindowInteractor* m_interactor;
400  vtkRenderer* m_renderer;
401 
409 };
math::float3 position
Base class for selection tools with picking capabilities.
vtkSmartPointer< vtkCellPicker > m_cellPicker
Software picking components (unified from subclasses)
void setCaptureZValues(bool capture)
Set whether to capture Z-buffer values.
vtkRenderWindowInteractor * getInteractor() const
Get the interactor.
bool multipleSelectionMode() const
Check if multi-selection is enabled.
bool m_captureZValues
Capture Z-buffer values.
vtkRenderer * getPickingRenderer() const
Get the renderer (for picking)
bool useHardwareSelection() const
Check if hardware selection is enabled.
~cvGenericSelectionTool() override=default
vtkRenderWindowInteractor * m_interactor
Interactor (weak pointer)
void setUseHardwareSelection(bool enable)
Hardware selection configuration.
cvViewSelectionManager * getSelectionManager() const
Get the selection manager.
vtkSmartPointer< vtkPointPicker > m_pointPicker
Point picker.
void setSelectionManager(cvViewSelectionManager *manager)
Set the selection manager (to access pipeline)
cvViewSelectionManager * m_manager
Manager reference (for pipeline access)
bool m_useHardwareSelection
Hardware selection components (reused for performance)
::SelectionMode SelectionMode
Selection mode Now using global SelectionMode enum from cvSelectionTypes.h.
void setMultipleSelectionMode(bool enable)
Enable/disable multi-selection mode.
void setInteractor(vtkRenderWindowInteractor *interactor)
Set the interactor for picking.
void setRenderer(vtkRenderer *renderer)
Set the renderer for picking.
bool m_multipleSelectionMode
Allow multiple selections.
vtkSmartPointer< vtkHardwareSelector > m_hardwareSelector
Hardware selector (reused)
::SelectionModifier SelectionModifier
Selection modifier (for multi-selection) Now using global SelectionModifier enum from cvSelectionType...
cvSelectionData m_currentSelection
Current selection (for modifiers)
vtkRenderer * m_renderer
Renderer (weak pointer)
Lightweight base class for all selection-related components.
virtual vtkPolyData * getPolyDataForSelection(const cvSelectionData *selectionData=nullptr)
Get polyData using ParaView-style priority (centralized method)
Encapsulates selection data without exposing VTK types.
Selection pipeline abstraction layer.
Central manager for all selection operations in the view.
SelectionMode
Selection modes matching ParaView's SelectionMode enum.
@ SELECT_SURFACE_CELLS
Select cells on surface (rectangle)
SelectionModifier
Selection modifiers for combining selections.
@ SELECTION_DEFAULT
Replace selection (default)
normal_z y
normal_z x
#define QPCL_ENGINE_LIB_API
Definition: qPCL.h:15