18 #include <vtkDataSet.h>
19 #include <vtkDataSetMapper.h>
20 #include <vtkMapper.h>
21 #include <vtkPolyData.h>
22 #include <vtkPolyDataMapper.h>
23 #include <vtkPropCollection.h>
24 #include <vtkRenderer.h>
54 vtkMapper* mapper = actor->GetMapper();
59 vtkDataSet*
data = mapper->GetInput();
63 "data: %1 points, %2 cells")
64 .arg(
data->GetNumberOfPoints())
65 .arg(
data->GetNumberOfCells()));
74 vtkPolyData* polyData =
nullptr;
81 "[cvSelectionBase] Using polyData from provided selection "
94 "[cvSelectionBase] Using polyData from selection manager "
103 if (!actors.isEmpty()) {
105 polyData = vtkPolyData::SafeDownCast(
data);
108 "[cvSelectionBase] Fallback to first data actor");
118 QList<vtkActor*> actors;
123 "[cvSelectionBase::getDataActors] visualizer is nullptr");
129 CVLog::Warning(
"[cvSelectionBase::getDataActors] renderer is nullptr");
134 vtkPropCollection* props = renderer->GetViewProps();
135 props->InitTraversal();
137 while (vtkProp* prop = props->GetNextProp()) {
138 vtkActor* actor = vtkActor::SafeDownCast(prop);
140 if (actor && actor->GetVisibility() && actor->GetPickable() &&
141 actor->GetMapper() && actor->GetMapper()->GetInput()) {
142 actors.append(actor);
147 QString(
"[cvSelectionBase::getDataActors] Found %1 data actors")
148 .arg(actors.size()));
155 std::vector<vtkPolyData*> polyDataList;
160 "[cvSelectionBase::getAllPolyDataFromVisualizer] visualizer is "
168 "[cvSelectionBase::getAllPolyDataFromVisualizer] renderer is "
174 vtkPropCollection* props = renderer->GetViewProps();
175 props->InitTraversal();
178 int polyDataCount = 0;
180 while (vtkProp* p = props->GetNextProp()) {
181 vtkActor* actor = vtkActor::SafeDownCast(p);
182 if (actor && actor->GetMapper() &&
183 actor->GetVisibility() &&
184 actor->GetPickable()) {
186 vtkMapper* mapper = actor->GetMapper();
188 vtkPolyData* polyData =
nullptr;
191 vtkPolyDataMapper* polyMapper =
192 vtkPolyDataMapper::SafeDownCast(mapper);
194 polyData = vtkPolyData::SafeDownCast(polyMapper->GetInput());
197 vtkDataSetMapper* datasetMapper =
198 vtkDataSetMapper::SafeDownCast(mapper);
200 vtkDataSet* dataset = datasetMapper->GetInput();
202 polyData = vtkPolyData::SafeDownCast(dataset);
208 if (polyData && polyData->GetNumberOfCells() > 0) {
209 polyDataList.push_back(polyData);
212 QString(
"[cvSelectionBase::"
213 "getAllPolyDataFromVisualizer] Found "
215 "%2 cells, %3 points")
217 .arg(polyData->GetNumberOfCells())
218 .arg(polyData->GetNumberOfPoints()));
224 QString(
"[cvSelectionBase::getAllPolyDataFromVisualizer] "
225 "Found %1 polyData(s) "
static bool Warning(const char *format,...)
Prints out a formatted warning message in console.
static bool PrintVerbose(const char *format,...)
Prints out a verbose formatted message in console.
vtkRenderer * getCurrentRenderer(int viewport=0)
PclUtils::PCLVis * getPCLVis() const
Get PCLVis instance (for VTK-specific operations)
vtkDataSet * getDataFromActor(vtkActor *actor)
Get data object from a specific actor (ParaView-style)
QList< vtkActor * > getDataActors() const
Get all visible data actors from visualizer.
std::vector< vtkPolyData * > getAllPolyDataFromVisualizer()
Get all polyData from the visualizer.
virtual vtkPolyData * getPolyDataForSelection(const cvSelectionData *selectionData=nullptr)
Get polyData using ParaView-style priority (centralized method)
ecvGenericVisualizer3D * m_viewer
Visualizer instance (abstract interface)
bool hasValidPCLVis() const
Check if visualizer is valid and is PCLVis.
Encapsulates selection data without exposing VTK types.
bool hasActorInfo() const
Check if actor information is available.
vtkPolyData * primaryPolyData() const
Get the primary (front-most) polyData.
Central manager for all selection operations in the view.
vtkPolyData * getPolyData() const
Get the underlying polyData for selection operations.
static cvViewSelectionManager * instance()
Get the singleton instance.