ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
surface.cpp
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 #include "surface.h"
9 
10 #include <vtkDelaunay2D.h>
11 #include <vtkPoints.h>
12 #include <vtkPolyData.h>
13 #include <vtkPolyDataMapper.h>
14 #include <vtkRenderer.h>
15 
16 #include "vtkutils.h"
17 
18 namespace VtkUtils {
19 
20 class SurfacePrivate {
21 public:
22  SurfacePrivate(Surface* q) : q_ptr(q) {}
23 
24  Surface* q_ptr;
25  vtkActor* surfaceActor = nullptr;
26  QList<Point3F> points;
27 };
28 
29 Surface::Surface(QWidget* parent) : VtkWidget(parent) {
30  d_ptr = new SurfacePrivate(this);
31 }
32 
33 Surface::~Surface() { delete d_ptr; }
34 
35 void Surface::setPoints(const QList<Point3F>& points) {
36  d_ptr->points = points;
37  renderSurface();
38 }
39 
41  if (d_ptr->points.isEmpty()) return;
42 
43  VTK_CREATE(vtkPoints, vtkpoints);
44 
45  foreach (const Point3F& pot, d_ptr->points)
46  vtkpoints->InsertNextPoint(pot.x, pot.y, pot.z);
47 
48  VTK_CREATE(vtkPolyData, polydata);
49  polydata->SetPoints(vtkpoints);
50 
51  VTK_CREATE(vtkDelaunay2D, del);
52  del->SetInputData(polydata);
53  del->Update();
54 
55  VTK_CREATE(vtkPolyDataMapper, mapper);
56  mapper->SetInputConnection(del->GetOutputPort());
57  mapper->Update();
58 
59  surfaceActor()->SetMapper(mapper);
60  defaultRenderer()->AddActor(surfaceActor());
61 
62  update();
63 }
64 
65 vtkActor* Surface::surfaceActor() const {
66  VtkUtils::vtkInitOnce(&d_ptr->surfaceActor);
67  return d_ptr->surfaceActor;
68 }
69 
70 } // namespace VtkUtils
int points
Surface(QWidget *parent=nullptr)
Definition: surface.cpp:29
vtkActor * surfaceActor() const
Definition: surface.cpp:65
void setPoints(const QList< Point3F > &points)
Definition: surface.cpp:35
virtual void renderSurface()
Definition: surface.cpp:40
virtual ~Surface()
Definition: surface.cpp:33
vtkRenderer * defaultRenderer()
Definition: vtkwidget.cpp:313
void vtkInitOnce(T **obj)
Definition: vtkutils.h:44
#define VTK_CREATE(type, name)