ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
PCLVis.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 #ifdef _MSC_VER
11 #pragma warning(disable : 4996) // Use of [[deprecated]] feature
12 #endif
13 
14 // LOCAL
15 #include <Utils/PCLCloud.h>
16 
17 #include <map>
18 #include <mutex>
19 #include <thread>
20 
21 #include "WidgetMap.h"
22 #include "qPCL.h"
23 
24 // Forward declaration
25 namespace PclUtils {
26 namespace renders {
28 }
29 } // namespace PclUtils
30 
31 // CV_DB_LIB
32 #include <ecvColorTypes.h>
33 #include <ecvDisplayTools.h> // For AxesGridProperties
34 #include <ecvDrawContext.h>
35 #include <ecvGenericVisualizer3D.h>
36 #include <ecvHObject.h>
37 
38 // VTK
39 #include <vtkBoundingBox.h> // needed for iVar
40 
41 // PCL
42 #include <pcl/visualization/pcl_visualizer.h>
43 
44 class vtkLODActor;
45 class vtkCamera;
46 class vtkRender;
47 class vtkPointPicker;
48 class vtkAreaPicker;
49 class vtkPropPicker;
50 class vtkAbstractWidget;
51 class vtkRenderWindow;
52 class vtkMatrix4x4;
53 class vtkLightKit;
54 class vtkCubeAxesActor;
55 class vtkCameraOrientationWidget;
56 class ccGenericMesh;
57 class ccPointCloud;
58 class ccMesh;
59 class ccHObject;
60 class ccBBox;
61 class ecvOrientedBBox;
62 class ccSensor;
63 class ecvPointpickingTools;
64 class ccMaterial;
65 class ccMaterialSet;
66 
67 namespace cloudViewer {
68 namespace geometry {
69 class LineSet;
70 }
71 } // namespace cloudViewer
72 
73 namespace VTKExtensions {
76 } // namespace VTKExtensions
77 
78 namespace PclUtils {
79 
81  public pcl::visualization::PCLVisualizer {
82  Q_OBJECT
83 public:
86  interactor_style,
87  const std::string& viewerName = "",
88  bool initIterator = false,
89  int argc = 0,
90  char** argv = nullptr); // deprecated!
94  interactor_style,
95  const std::string& viewerName = "",
96  bool initIterator = false,
97  int argc = 0,
98  char** argv = nullptr);
99 
100  virtual ~PCLVis();
101 
102  // do some initialization jobs
103  void initialize();
104 
105  // center axes configuration
106  void configCenterAxes();
107 
108  void configInteractorStyle(
110  interactor_style);
111 
112 public:
115  void hidePclMarkerAxes();
116  bool pclMarkerAxesShown();
117  void showPclMarkerAxes(vtkRenderWindowInteractor* interactor = nullptr);
118  void hideOrientationMarkerWidgetAxes();
119  void showOrientationMarkerWidgetAxes(vtkRenderWindowInteractor* interactor);
120  void toggleOrientationMarkerWidgetAxes();
121 
127  bool removeActorFromRenderer(const vtkSmartPointer<vtkProp>& actor,
128  int viewport = 0);
129 
130  void addActorToRenderer(const vtkSmartPointer<vtkProp>& actor,
131  int viewport = 0);
132 
137  void UpdateScreen();
138 
144  void setupInteractor(vtkRenderWindowInteractor* iren, vtkRenderWindow* win);
145 
149  return (interactor_);
150  }
151 
152  // Camera Tools
153  pcl::visualization::Camera getCamera(int viewport = 0);
154  vtkSmartPointer<vtkCamera> getVtkCamera(int viewport = 0);
155 
156  void setModelViewMatrix(const ccGLMatrixd& viewMat, int viewport = 0);
157  double getParallelScale(int viewport = 0);
158  void setParallelScale(double scale, int viewport = 0);
159 
160  void setOrthoProjection(int viewport = 0);
161  void setPerspectiveProjection(int viewport = 0);
162  bool getPerspectiveState(int viewport = 0);
163 
164  inline bool getAutoUpateCameraPos() { return m_autoUpdateCameraPos; }
165  inline void setAutoUpateCameraPos(bool state) {
166  m_autoUpdateCameraPos = state;
167  }
168 
169  void rotateWithAxis(const CCVector2i& pos,
170  const CCVector3d& axis,
171  double angle,
172  int viewport = 0);
173 
174 public:
178  void getCenterOfRotation(double center[3]);
182  void resetCenterOfRotation(int viewport = 0);
183 
184  static void ExpandBounds(double bounds[6], vtkMatrix4x4* matrix);
185 
192  void setCenterOfRotation(double x, double y, double z);
193  inline void setCenterOfRotation(double xyz[3]) {
194  setCenterOfRotation(xyz[0], xyz[1], xyz[2]);
195  }
196 
197  void setRotationFactor(double factor);
198  double getRotationFactor();
199 
200  //*****************************************************************
201  // Forwarded to center axes.
202  void setCenterAxesVisibility(bool);
203 
204  //*****************************************************************
205  // Forwarded to vtkPVInteractorStyle if present on local processes.
206  virtual void setCamera2DManipulators(const int manipulators[9]);
207  virtual void setCamera3DManipulators(const int manipulators[9]);
208  void setCameraManipulators(VTKExtensions::vtkCustomInteractorStyle* style,
209  const int manipulators[9]);
210  virtual void setCamera2DMouseWheelMotionFactor(double factor);
211  virtual void setCamera3DMouseWheelMotionFactor(double factor);
216  virtual void updateCenterAxes();
217 
222  void synchronizeGeometryBounds(int viewport = 0);
223 
224  // Return a depth value for z-buffer
225  double getGLDepth(int x, int y);
226 
227  double getCameraFocalDistance(int viewport = 0);
228  void setCameraFocalDistance(double focal_distance, int viewport = 0);
229 
237  void zoomCamera(double zoomFactor, int viewport = 0);
238 
239  void getProjectionTransformMatrix(Eigen::Matrix4d& proj);
240 
241  void getModelViewTransformMatrix(Eigen::Matrix4d& view);
242 
252  void resetCameraClippingRange(int viewport = 0);
254  this->resetCameraClippingRange(0);
255  }
256  void resetCamera(const ccBBox* bbox);
257  void resetCamera(double xMin,
258  double xMax,
259  double yMin,
260  double yMax,
261  double zMin,
262  double zMax);
263  inline void resetCamera() {
264  pcl::visualization::PCLVisualizer::resetCamera();
265  }
266  inline void resetCamera(double bounds[6]) {
267  resetCamera(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4],
268  bounds[5]);
269  }
270  void getReasonableClippingRange(double range[2], int viewport = 0);
271  void expandBounds(double bounds[6], vtkMatrix4x4* matrix);
272  void setCameraViewAngle(double viewAngle, int viewport = 0);
273 
274  void draw(const CC_DRAW_CONTEXT& context, const PCLCloud::Ptr& smCloud);
275  void draw(const CC_DRAW_CONTEXT& context, const PCLMesh::Ptr& pclMesh);
276  void draw(const CC_DRAW_CONTEXT& context,
277  const PCLTextureMesh::Ptr& textureMesh);
278  void draw(const CC_DRAW_CONTEXT& context,
279  const PCLPolygon::Ptr& pclPolygon,
280  bool closed);
281  void draw(const CC_DRAW_CONTEXT& context, const ccSensor* sensor);
282  void draw(const CC_DRAW_CONTEXT& context,
283  const cloudViewer::geometry::LineSet* lineset);
284 
285  void transformEntities(const CC_DRAW_CONTEXT& context);
286  vtkSmartPointer<vtkTransform> getTransformation(
287  const CC_DRAW_CONTEXT& context, const CCVector3d& origin);
288  void updateNormals(const CC_DRAW_CONTEXT& context,
289  const PCLCloud::Ptr& smCloud);
290  void updateShadingMode(const CC_DRAW_CONTEXT& context, PCLCloud& smCloud);
291  bool removeEntities(const CC_DRAW_CONTEXT& context);
292  void hideShowActors(bool visibility,
293  const std::string& viewID,
294  int viewport = 0);
295  void hideShowWidgets(bool visibility,
296  const std::string& viewID,
297  int viewport = 0);
298 
299  bool addScalarBar(const CC_DRAW_CONTEXT& context);
300  bool updateScalarBar(const CC_DRAW_CONTEXT& context);
301  bool addCaption(const std::string& text,
302  const CCVector2& pos2D,
303  const CCVector3& anchorPos,
304  double r,
305  double g,
306  double b,
307  double a,
308  int fontSize = 10,
309  const std::string& viewID = "caption",
310  bool anchorDragable = false,
311  int viewport = 0);
312 
313  bool updateCaption(const std::string& text,
314  const CCVector2& pos2D,
315  const CCVector3& anchorPos,
316  double r,
317  double g,
318  double b,
319  double a,
320  int fontSize = 10,
321  const std::string& viewID = "caption",
322  int viewport = 0);
323 
325 
331  bool getCaptionPosition(const std::string& viewID,
332  float& posX,
333  float& posY);
334 
335  bool addPolyline(const PCLPolygon::ConstPtr pclPolygon,
336  double r,
337  double g,
338  double b,
339  float width = 1.0f,
340  const std::string& id = "multiline",
341  int viewport = 0);
342  bool updateTexture(const CC_DRAW_CONTEXT& context,
343  const ccMaterialSet* materials);
349  bool addTextureMesh(const PCLTextureMesh& mesh,
350  const std::string& id,
351  int viewport);
361  bool addTextureMeshFromCCMesh(ccGenericMesh* mesh,
362  const std::string& id,
363  int viewport = 0);
364 
374  bool addTextureMeshFromOBJ(const std::string& obj_path,
375  const std::string& id,
376  int viewport = 0,
377  int quality = 2,
378  bool enable_cache = true);
379 
391  bool addTextureMeshFromOBJAdvanced(const std::string& obj_path,
392  const std::string& mtl_path,
393  const std::string& id,
394  int viewport = 0,
395  int max_texture_size = 4096,
396  bool use_mipmaps = true,
397  bool enable_cache = true);
398 
403 
409  void getTextureCacheInfo(size_t& count, size_t& memory_bytes) const;
410 
411  bool addOrientedCube(const ccGLMatrixd& trans,
412  double width,
413  double height,
414  double depth,
415  double r = 1.0,
416  double g = 1.0,
417  double b = 1.0,
418  const std::string& id = "cube",
419  int viewport = 0);
420  bool addOrientedCube(const Eigen::Vector3f& translation,
421  const Eigen::Quaternionf& rotation,
422  double width,
423  double height,
424  double depth,
425  double r = 1.0,
426  double g = 1.0,
427  double b = 1.0,
428  const std::string& id = "cube",
429  int viewport = 0);
430  bool addOrientedCube(const ecvOrientedBBox& obb,
431  const std::string& id = "cube",
432  int viewport = 0);
433  void displayText(const CC_DRAW_CONTEXT& context);
434 
435 private:
436  // Texture rendering manager
437  std::unique_ptr<renders::TextureRenderManager> texture_render_manager_;
438 
439  // Store transformation matrices to prevent memory leaks
440  // Maps view ID to transformation matrix smart pointer
441  std::map<std::string, vtkSmartPointer<vtkMatrix4x4>> transformation_map_;
442 
443 public:
444  void setPointSize(const unsigned char pointSize,
445  const std::string& viewID,
446  int viewport = 0);
447  void setScalarFieldName(const std::string& viewID,
448  const std::string& scalarName,
449  int viewport = 0);
450 
458  void addScalarFieldToVTK(const std::string& viewID,
459  ccPointCloud* cloud,
460  int scalarFieldIndex,
461  int viewport = 0);
462 
473  void syncAllScalarFieldsToVTK(const std::string& viewID,
474  ccPointCloud* cloud,
475  int viewport = 0);
476 
488  void setCurrentSourceObject(ccHObject* obj, const std::string& viewID);
489 
494  void removeSourceObject(const std::string& viewID);
495 
501  ccHObject* getSourceObject(const std::string& viewID) const;
502 
508  ccPointCloud* getSourceCloud(const std::string& viewID) const;
509 
515  ccMesh* getSourceMesh(const std::string& viewID) const;
516 
522  bool hasSourceObject(const std::string& viewID) const;
523 
524  void setPointCloudUniqueColor(double r,
525  double g,
526  double b,
527  const std::string& viewID,
528  int viewport = 0);
529  void resetScalarColor(const std::string& viewID,
530  bool flag = true,
531  int viewport = 0);
532  void setShapeUniqueColor(float r,
533  float g,
534  float b,
535  const std::string& viewID,
536  int viewport = 0);
537  void setLineWidth(const unsigned char lineWidth,
538  const std::string& viewID,
539  int viewport = 0);
540  void setMeshRenderingMode(MESH_RENDERING_MODE mode,
541  const std::string& viewID,
542  int viewport = 0);
543  void setLightMode(const std::string& viewID, int viewport = 0);
544  void setPointCloudOpacity(double opacity,
545  const std::string& viewID,
546  int viewport = 0);
547  void setShapeOpacity(double opacity,
548  const std::string& viewID,
549  int viewport = 0);
550 
564  void setMeshOpacity(double opacity,
565  const std::string& viewID,
566  int viewport = 0);
567 
568  /*
569  * value = 0, PCL_VISUALIZER_SHADING_FLAT
570  * value = 1, PCL_VISUALIZER_SHADING_GOURAUD
571  * value = 2, PCL_VISUALIZER_SHADING_PHONG
572  */
573  void setShapeShadingMode(SHADING_MODE mode,
574  const std::string& viewID,
575  int viewport = 0);
576  void setMeshShadingMode(SHADING_MODE mode,
577  const std::string& viewID,
578  int viewport = 0);
579 
581  getPCLInteractorStyle();
582  vtkActor* getActorById(const std::string& viewId);
583  vtkProp* getPropById(const std::string& viewId);
584  vtkSmartPointer<vtkPropCollection> getPropCollectionById(
585  const std::string& viewId);
586  std::string getIdByActor(vtkProp* actor);
587  vtkAbstractWidget* getWidgetById(const std::string& viewId);
588 
593  vtkRenderer* getCurrentRenderer(int viewport = 0);
594 
595 public:
600  inline bool containWidget(const std::string& id) const {
601  return (m_widget_map->find(id) != m_widget_map->end() ||
602  m_prop_map->find(id) != m_prop_map->end());
603  }
604 
606  inline WidgetActorMapPtr getWidgetActorMap() { return (m_widget_map); }
607 
609  inline PropActorMapPtr getPropActorMap() { return (m_prop_map); }
610 
611  inline vtkBoundingBox getVisibleGeometryBounds() { return GeometryBounds; }
612 
615  return TwoDInteractorStyle;
616  }
617 
620  return ThreeDInteractorStyle;
621  }
622 
623 protected:
626 
629 
630  vtkBoundingBox GeometryBounds;
638 
639 private:
640  bool removeWidgets(const std::string& viewId, int viewport);
641  void removePointClouds(const std::string& viewId, int viewport = 0);
642  void removeShapes(const std::string& viewId, int viewport = 0);
643  void removeMesh(const std::string& viewId, int viewport = 0);
644  void removeText2D(const std::string& viewId, int viewport = 0);
645  void removeText3D(const std::string& viewId, int viewport = 0);
646  void removeALL(int viewport = 0);
647 
648 private:
649  void registerMouse();
650  void registerKeyboard();
651  void registerAreaPicking();
652  void registerPointPicking();
653 
654  void registerInteractorStyle(bool useDefault = false);
655 
656  void pointPickingProcess(const pcl::visualization::PointPickingEvent& event,
657  void* args);
658  void areaPickingEventProcess(
659  const pcl::visualization::AreaPickingEvent& event, void* args);
660  void mouseEventProcess(const pcl::visualization::MouseEvent& event,
661  void* args);
662  void keyboardEventProcess(const pcl::visualization::KeyboardEvent& event,
663  void* args);
664 
665 public:
666  // Util Tools
667  inline bool isPointPickingEnabled() { return m_pointPickingEnabled; }
668  inline void setPointPickingEnabled(bool state) {
669  m_pointPickingEnabled = state;
670  }
671  inline void togglePointPicking() {
672  setPointPickingEnabled(!isPointPickingEnabled());
673  }
674 
675  inline bool isAreaPickingEnabled() { return m_areaPickingEnabled; }
676  inline void setAreaPickingEnabled(bool state) {
677  m_areaPickingEnabled = state;
678  }
679 
680  inline bool isActorPickingEnabled() { return m_actorPickingEnabled; }
681  inline void setActorPickingEnabled(bool state) {
682  m_actorPickingEnabled = state;
683  }
684  inline void toggleActorPicking() {
685  setActorPickingEnabled(!isActorPickingEnabled());
686  }
687 
688  void toggleAreaPicking();
689  void exitCallbackProcess();
690  void setAreaPickingMode(bool state);
691  vtkActor* pickActor(double x, double y);
692  std::string pickItem(double x0 = -1,
693  double y0 = -1,
694  double x1 = 5.0,
695  double y1 = 5.0);
696 
697  QImage renderToImage(int zoomFactor = 1,
698  bool renderOverlayItems = false,
699  bool silent = false,
700  int viewport = 0);
701 
702 protected:
703  // Util Variables
708 
710 
711  std::mutex m_cloud_mutex;
712 
713 signals:
714  void interactorPickedEvent(vtkActor* actor);
715 
716 public:
717  // ========== View Properties (ParaView-compatible) ==========
718 
727  void setLightIntensity(double intensity);
728 
733  double getLightIntensity() const;
734 
735  // ========================================================================
736  // Data Axes Grid (Unified Interface with DataAxesGridProperties struct)
737  // ========================================================================
738 
750  void SetDataAxesGridProperties(const std::string& viewID,
751  const AxesGridProperties& props);
752 
758  void GetDataAxesGridProperties(const std::string& viewID,
759  AxesGridProperties& props) const;
760 
765  void RemoveDataAxesGrid(const std::string& viewID);
766 
775  void ToggleCameraOrientationWidget(bool show);
776 
781  bool IsCameraOrientationWidgetShown() const;
782 
783 protected:
788 
789  std::vector<int> m_selected_slice;
790 
791  // Source objects for selection operations (allows direct extraction)
792  // Maps viewID -> ccHObject* to support multiple objects in the scene
793  // Note: ccHObject is not a QObject, so we use raw pointers
794  std::map<std::string, ccHObject*> m_sourceObjectMap;
795 
796  // View Properties (ParaView-compatible)
797  double m_lightIntensity; // Current light intensity (0.0-1.0)
798 
799  // Axes Grid actors (ParaView-style)
800  // Data Axes Grid: one per object (viewID -> actor mapping)
801  // Data Axes Grid: per-object, bound to viewID
802  std::map<std::string, vtkSmartPointer<vtkCubeAxesActor>> m_dataAxesGridMap;
803 
804  // Camera Orientation Widget (ParaView-style)
806 };
807 
808 typedef std::shared_ptr<PCLVis> PCLVisPtr;
809 } // namespace PclUtils
MouseEvent event
int width
int height
int count
pcl::PCLPointCloud2 PCLCloud
Definition: PCLCloud.h:34
pcl::TextureMesh PCLTextureMesh
Definition: PCLCloud.h:33
#define signals
Eigen::Matrix3d rotation
Definition: VoxelGridIO.cpp:27
Eigen::Vector3d origin
Definition: VoxelGridIO.cpp:26
bool isActorPickingEnabled()
Definition: PCLVis.h:680
vtkBoundingBox GeometryBounds
Definition: PCLVis.h:630
std::map< std::string, ccHObject * > m_sourceObjectMap
Definition: PCLVis.h:794
bool isAreaPickingEnabled()
Definition: PCLVis.h:675
void clearTextureCache()
Clear texture cache.
vtkSmartPointer< vtkCameraOrientationWidget > m_cameraOrientationWidget
Definition: PCLVis.h:805
bool m_pointPickingEnabled
Definition: PCLVis.h:705
WidgetActorMapPtr m_widget_map
Internal list with actor pointers and name IDs for widgets.
Definition: PCLVis.h:625
PropActorMapPtr getPropActorMap()
Return a pointer to the PropActorMap this visualizer uses.
Definition: PCLVis.h:609
bool isPointPickingEnabled()
Definition: PCLVis.h:667
vtkSmartPointer< VTKExtensions::vtkCustomInteractorStyle > get2DInteractorStyle()
Definition: PCLVis.h:614
bool addTextureMeshFromOBJAdvanced(const std::string &obj_path, const std::string &mtl_path, const std::string &id, int viewport=0, int max_texture_size=4096, bool use_mipmaps=true, bool enable_cache=true)
Load multi-texture mesh from OBJ file (advanced options)
bool getAutoUpateCameraPos()
Definition: PCLVis.h:164
vtkSmartPointer< VTKExtensions::vtkCustomInteractorStyle > ThreeDInteractorStyle
Definition: PCLVis.h:635
std::map< std::string, vtkSmartPointer< vtkCubeAxesActor > > m_dataAxesGridMap
Definition: PCLVis.h:802
void internalResetCameraClippingRange()
Definition: PCLVis.h:253
vtkSmartPointer< VTKExtensions::vtkPVCenterAxesActor > m_centerAxes
Definition: PCLVis.h:631
void resetCamera(double bounds[6])
Definition: PCLVis.h:266
bool m_autoUpdateCameraPos
Definition: PCLVis.h:709
vtkSmartPointer< vtkOrientationMarkerWidget > m_axes_widget
Definition: PCLVis.h:784
vtkSmartPointer< pcl::visualization::PCLVisualizerInteractorStyle > m_interactorStyle
Definition: PCLVis.h:637
bool m_areaPickingEnabled
Definition: PCLVis.h:706
vtkBoundingBox getVisibleGeometryBounds()
Definition: PCLVis.h:611
vtkSmartPointer< VTKExtensions::vtkCustomInteractorStyle > get3DInteractorStyle()
Definition: PCLVis.h:619
vtkSmartPointer< VTKExtensions::vtkCustomInteractorStyle > TwoDInteractorStyle
Definition: PCLVis.h:633
void resetCamera()
Definition: PCLVis.h:263
void setAreaPickingEnabled(bool state)
Definition: PCLVis.h:676
void setAutoUpateCameraPos(bool state)
Definition: PCLVis.h:165
vtkSmartPointer< vtkRenderWindowInteractor > getRenderWindowInteractor()
Get a pointer to the current interactor style used.
Definition: PCLVis.h:148
void setPointPickingEnabled(bool state)
Definition: PCLVis.h:668
WidgetActorMapPtr getWidgetActorMap()
Return a pointer to the WidgetActorMap this visualizer uses.
Definition: PCLVis.h:606
std::vector< int > m_selected_slice
Definition: PCLVis.h:789
double m_lightIntensity
Definition: PCLVis.h:797
vtkSmartPointer< vtkPropPicker > m_propPicker
Definition: PCLVis.h:787
void getTextureCacheInfo(size_t &count, size_t &memory_bytes) const
Get texture cache information.
void setCenterOfRotation(double xyz[3])
Definition: PCLVis.h:193
std::mutex m_cloud_mutex
Definition: PCLVis.h:711
vtkSmartPointer< vtkPointPicker > m_point_picker
Definition: PCLVis.h:785
bool containWidget(const std::string &id) const
Check if the widgets or props with the given id was already added to this visualizer.
Definition: PCLVis.h:600
void setActorPickingEnabled(bool state)
Definition: PCLVis.h:681
bool addTextureMeshFromOBJ(const std::string &obj_path, const std::string &id, int viewport=0, int quality=2, bool enable_cache=true)
Load multi-texture mesh from OBJ file (enhanced version)
void interactorPickedEvent(vtkActor *actor)
int m_currentMode
Definition: PCLVis.h:704
PropActorMapPtr m_prop_map
Internal list with actor pointers and name IDs for props.
Definition: PCLVis.h:628
void togglePointPicking()
Definition: PCLVis.h:671
bool m_actorPickingEnabled
Definition: PCLVis.h:707
vtkSmartPointer< vtkAreaPicker > m_area_picker
Definition: PCLVis.h:786
void toggleActorPicking()
Definition: PCLVis.h:684
vtkCustomInteractorStyle defines an unique, custom VTK based interactory style for PCL Visualizer app...
2D Vector
Definition: CVGeom.h:32
Bounding box structure.
Definition: ecvBBox.h:25
Double version of ccGLMatrixTpl.
Definition: ecvGLMatrix.h:56
Generic mesh interface.
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
Mesh (triangle) material.
Mesh (triangle) material.
Definition: ecvMaterial.h:28
Triangular mesh.
Definition: ecvMesh.h:35
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Generic sensor interface.
Definition: ecvSensor.h:27
LineSet define a sets of lines in 3D. A typical application is to display the point cloud corresponde...
Definition: LineSet.h:29
Generic visualizer 3D interface.
MESH_RENDERING_MODE
SHADING_MODE
a[190]
ImGuiContext * context
Definition: Window.cpp:76
normal_z y
normal_z x
normal_z z
std::shared_ptr< PropActorMap > PropActorMapPtr
Definition: WidgetMap.h:40
std::shared_ptr< PCLVis > PCLVisPtr
Definition: PCLVis.h:808
std::shared_ptr< WidgetActorMap > WidgetActorMapPtr
Definition: WidgetMap.h:37
Generic file read and write utility for python interface.
#define QPCL_ENGINE_LIB_API
Definition: qPCL.h:15
Data Axes Grid properties structure Encapsulates all properties for vtkCubeAxesActor configuration.
Display context.