comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkPointCloudRepresentation.h

275 lines
9.4 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkPointCloudRepresentation.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkPointCloudRepresentation
* @brief represent the vtkPointCloudWidget
*
* This class provides support for interactively querying and selecting
* points from a point cloud. It is a representation for the
* vtkPointCloudWidget.
*
* @sa
* vtkPointCloudWidget vtkHardwareSelection vtkPointPicker
*/
#ifndef vtkPointCloudRepresentation_h
#define vtkPointCloudRepresentation_h
#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_2_0
#include "vtkInteractionWidgetsModule.h" // For export macro
#include "vtkWidgetRepresentation.h"
class vtkActor;
class vtkPolyDataMapper;
class vtkOutlineFilter;
class vtkActor2D;
class vtkCoordinate;
class vtkPolyDataMapper2D;
class vtkProperty2D;
class vtkPolyData;
class vtkPicker;
class vtkPointPicker;
class vtkPointSet;
class vtkGlyphSource2D;
struct vtkPointCloudPicker;
class VTKINTERACTIONWIDGETS_EXPORT vtkPointCloudRepresentation : public vtkWidgetRepresentation
{
friend struct vtkPointCloudPicker;
public:
/**
* Instantiate this class.
*/
static vtkPointCloudRepresentation* New();
///@{
/**
* Standard VTK class methods for obtaining type information and printing.
*/
vtkTypeMacro(vtkPointCloudRepresentation, vtkWidgetRepresentation);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@}
///@{
/**
* Specify and place either an actor (vtkActor) or a point set
* (vtkPointSet) that represents the point cloud. If placing with an
* actor, then the actor must refer to a mapper which in turn refers to a
* vtkPointSet, with the actor being used to render the point cloud. If
* placing with a vtkPointSet, then an internal vtkActor (and associated
* vtkPointGaussianMapper) is created to render the point cloud.
*/
void PlacePointCloud(vtkActor* a);
void PlacePointCloud(vtkPointSet* ps);
///@}
///@{
/**
* Retrieve the associated actor and mapper used to render the point cloud.
*/
vtkGetObjectMacro(PointCloudActor, vtkActor);
vtkGetObjectMacro(PointCloudMapper, vtkPolyDataMapper);
///@}
/**
* Retrieve the point id from the selected point. Note that this can
* be invalid (<0) if nothing was picked.
*/
vtkIdType GetPointId() { return this->PointId; }
///@{
/**
* Retrieve the point coordinates of the selected point. Note that if the
* point id is invalid (<0) then the coordinates are undefined.
*/
const double* GetPointCoordinates() { return this->PointCoordinates; }
void GetPointCoordinates(double x[3])
{
x[0] = this->PointCoordinates[0];
x[1] = this->PointCoordinates[1];
x[2] = this->PointCoordinates[2];
}
///@}
///@{
/**
* Flag controls whether highlighting of points occurs as the mouse
* moves over them. This can cause extra rendering operations.
*/
vtkSetMacro(Highlighting, bool);
vtkGetMacro(Highlighting, bool);
vtkBooleanMacro(Highlighting, bool);
///@}
// Enums define the state of the representation relative to the mouse pointer
// position. Used by ComputeInteractionState() to communicate with the
// widget.
enum InteractionStateType
{
Outside = 0, // no points nor outline selected
OverOutline, // mouse is over the bounding box of the point cloud
Over, // mouse is over a point
Selecting // user has selected the point
};
#if !defined(VTK_LEGACY_REMOVE)
VTK_DEPRECATED_IN_9_2_0("because leading underscore is reserved")
typedef InteractionStateType _InteractionState;
#endif
///@{
/**
* The interaction state may be set from a widget (e.g., PointCloudWidget)
* or other object. This controls how the interaction with the widget
* proceeds. Normally this method is used as part of a handshaking process
* with the widget: First ComputeInteractionState() is invoked that returns
* a state based on geometric considerations (i.e., cursor near a widget
* feature), then based on events, the widget may modify this further.
*/
vtkSetClampMacro(InteractionState, int, Outside, Selecting);
///@}
///@{
/**
* Some methods required to satisfy the vtkWidgetRepresentation API.
*/
double* GetBounds() VTK_SIZEHINT(6) override;
void BuildRepresentation() override {}
int ComputeInteractionState(int X, int Y, int modify = 0) override;
///@}
///@{
/**
* These methods are necessary to make this representation behave as
* a vtkProp (i.e., support rendering).
*/
void GetActors(vtkPropCollection* pc) override;
void GetActors2D(vtkPropCollection* pc) override;
int RenderOpaqueGeometry(vtkViewport* viewport) override;
int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
vtkTypeBool HasTranslucentPolygonalGeometry() override;
void ReleaseGraphicsResources(vtkWindow*) override;
int RenderOverlay(vtkViewport*) override;
///@}
///@{
/**
* Because point clouds can be very large, alternative point picking
* approaches can be used to select points: either hardware picking (via
* rendering) or software rendering (via CPU ray cast). In summary,
* hardware picking (via vtkHardwareSelector) is preferred, with an
* optional software picker (via vtkPointPicker) available. Each approach
* has potential advantages and disadvantages - mainly, vtkHardwareSelector
* is faster but only selects opaque geometry and what is visible on the
* screen, does not work with anti-aliasing, cannot handle assemblies, and
* may not work on some systems. vtkPointPicker avoids extra renders, and
* can handle translucent geometry, can select points "behind" other
* objects, will work on all systems, but is scalable to only a few tens of
* thousands of points. (See vtkHardwareSelector and vtkPointPicker for
* further information.) The choice of picker also has implications on the
* type of tolerancing used (as described in the following documentation).
* (Note also that the pickers may return slighty different results, this
* is expected due to the different way tolerancing works.)
*/
enum PickingModeType
{
HARDWARE_PICKING = 0,
SOFTWARE_PICKING
};
#if !defined(VTK_LEGACY_REMOVE)
VTK_DEPRECATED_IN_9_2_0("because leading underscore is reserved")
typedef PickingModeType _Picking_Mode;
#endif
vtkSetClampMacro(PickingMode, int, HARDWARE_PICKING, SOFTWARE_PICKING);
vtkGetMacro(PickingMode, int);
void SetPickingModeToHardware() { this->SetPickingMode(HARDWARE_PICKING); }
void SetPickingModeToSoftware() { this->SetPickingMode(SOFTWARE_PICKING); }
///@}
///@{
/**
* The tolerance representing the distance to a point expressed in pixels.
* A tolerance of 0 selects from the pixel precisely under the cursor. A
* tolerance of 1 results in a 3x3 pixel square under the cursor (padded
* out by 1 in each direction); a tolerance of N results in a (2N+1)**2
* selection rectangle. The point in the selection rectangle which is
* closest in z-buffer to the pick position is selected. Note that this can
* sometimes return points further away from the cursor (which can be
* unexpected - use the tolerance carefully).
*/
vtkSetMacro(HardwarePickingTolerance, unsigned int);
vtkGetMacro(HardwarePickingTolerance, unsigned int);
///@}
///@{
/**
* The tolerance representing the distance to a point (as a fraction of the
* bounding box of the point cloud). This specifies when the cursor is
* considered near enough to the point to highlight it. Note that this is
* a sensitive parameter - too small and it's hard to pick anything; too
* large and points close to the eye can be picked in preference to points
* further away which are closer to the pick ray.
*/
vtkSetClampMacro(SoftwarePickingTolerance, double, 0.0, 100.0);
vtkGetMacro(SoftwarePickingTolerance, double);
///@}
/*
* Register internal Pickers within PickingManager
*/
void RegisterPickers() override;
protected:
vtkPointCloudRepresentation();
~vtkPointCloudRepresentation() override;
// The point cloud that is being operated on
vtkActor* PointCloudActor;
vtkPolyDataMapper* PointCloudMapper;
vtkPointSet* PointCloud;
// The selected point id and coordinates
vtkIdType PointId;
double PointCoordinates[3];
// Data members to manage state
bool Highlighting;
int PickingMode;
unsigned int HardwarePickingTolerance;
double SoftwarePickingTolerance;
vtkPicker* OutlinePicker;
vtkPointCloudPicker* PointCloudPicker;
// Draw an outline around the point cloud
vtkActor* OutlineActor;
vtkPolyDataMapper* OutlineMapper;
vtkOutlineFilter* OutlineFilter;
// Highlight the selected point
vtkActor2D* SelectionActor;
vtkCoordinate* SelectionCoordinate;
vtkPolyDataMapper2D* SelectionMapper;
vtkGlyphSource2D* SelectionShape;
vtkProperty2D* SelectionProperty;
void CreateDefaultProperties();
private:
vtkPointCloudRepresentation(const vtkPointCloudRepresentation&) = delete;
void operator=(const vtkPointCloudRepresentation&) = delete;
};
#endif